Partage
  • Partager sur Facebook
  • Partager sur Twitter

[API]automatisation trading

    3 décembre 2020 à 17:34:31

    Bonjour a tous,

    Présentation :

    Je m'appel Nicolas, je suis en reconversion professionnelle pour devenir développeur web back end, je voudrais me spécialiser en PhP et MySQL.

    J'ai commencé les cours sur OpenClassrooms, HTML, CSS, JavaScript, PhP et MySQL. Je suis donc très débutant dans le domaine, mais j'adore ça et je peux passer des heures a faire des recherches sans me lasser.

    A côté de ça, je fais du trading de cryptomonnaie, et c'est en ça que j'ai pensé mon projet.

    Genèse du projet :

    Ce projet est né de l'envie d'automatiser mes trades.

    J'utilise l'exchange 3comma, qui permet de créer de bot de trading. Ces bots peuvent gérer les ordres d'ouverture et de fermeture d'achat, de  configurer le profit voulu etc...

    Sur l'application Telegram, je suis abonné à un canal qui envoi des signaux pour conseiller quel ordre d'achat-vente ouvrir. (On appel cela une 'pair' ex: BTC_ETH)

    Le but de l'application est de récupérer le message telegram grâce a l'api, d'extraire la chaine de caractère comportant la pair, et envoyé l'info au bot 3comma via l'api.

    Je n'ai pas réussi a directement récupérer le message. 

    Ce que j'ai fait, c'est de créer un bot telegram sur lequel je peux agir via l'api telegram, et je transfert a la main le message du canal vers mon bot.

    Ensuite, via l'API bot telegram, je peux récupérer le message et faire ce que je veux.

    BUT :

    Mon but est de trouver des personnes qui voudrait travailler avec moi sur ce projet, j'ai déjà un code qui fonctionne, mais je le trouve vraiment pas propre, et je suis sur qu'on peut l'optimiser énormément.

    Voici donc mon code : 

    Recup message telegram 

     <?php 
     session_start();
    
    //initialisation de la connexion vers l'URL de l'api
    $curl = curl_init('https://api.telegram.org/{botTOKEN}/getUpdates');
    
    //ajout des différentes options avec un array
    curl_setopt_array($curl, [
    
    	CURLOPT_SSL_VERIFYPEER => false, // =>> dit de ne pas vérifier le SSL donc danger
    	//voir CURLOPT_CAINFO pour gestion des certificats ou bien géré avec un dossier .htacces
    
    	CURLOPT_RETURNTRANSFER => true, //retourne le résultat de l'éxécution dans la variable $data 
    
    	CURLOPT_TIMEOUT => 5, //un timeOUT
    ]);
    //on exécute la requéte avec les options définis précédemment, valeur de renvoi TRUE ou FALSE
    $data = curl_exec($curl); 
    if ($data === false) { // si FALSE 
    	var_dump(curl_error($curl)); // analyse de l'erreur
    } else {
    //si TRUE , la requête s'est bien exécuté
    	//on récupère le code HTTP retourner par la page
    	if (curl_getinfo($curl, CURLINFO_HTTP_CODE) === 200) {
    		//si le code est bien 200 OK alors on met en forme les données reçu
    		$data = json_decode($data, true);
    		
    		$index = count($data['result']) - 1; //index de fin de tableau
    
    		$message = $data['result'][$index]['message']['text']; //on récupère le contenu du message telegram
    
    		$pair = preg_split("/[\s,]+/", $message); //on split le tableau pour récupérer chaque ligne
    		$pair['1'] = preg_replace("#\##", "", $pair['1']); //on enlève le # devant la pair
    		
    		$_SESSION['pairActuelle'] = $pair['1']; 
    
    //on va vérifier que le message transmis est différent du précédent
    		if ($_SESSION['pairActuelle'] != $_SESSION['pairAncienne']) { 
    
    			$_SESSION['pairAncienne'] = $_SESSION['pairActuelle']; //on modifie la variable de session pour les prochains tests
    
    			echo "c'est bon ça fonctionne " . $_SESSION['pairAncienne'] . " est égal a " . $_SESSION['pairActuelle'];
    
    			require('envoiMessage3comma.php');
    
    		}else{
    
    			echo $_SESSION['pairAncienne'] . " est identique a " . $_SESSION['pairActuelle'];
    			
    		}
    
    		
    //gestion de l'erreur
    	}else{
    		$data = json_decode($data, true);
    		echo '<p>ERREUR : ' . curl_getinfo($curl, CURLINFO_HTTP_CODE) . '</p>';
    		echo '<pre>';
    		print_r($data); // on affiche le contenue de $data decodé en JSON
    		echo '</pre>';
    	}
    	
    }
    header('Refresh: 5;URL=recupMessageTelegram.php'); //permet de rafraichir la page et donc de relancer le script toute les 5sec... pas très satisfaisant...

    Envoi message 3comma : 

    <?php 
    //initialisation de la connexion vers l'URL de l'api
    $account_id = XXX;
    $idBOT = XXX;
    
    //définition de la requête API
    $pathToResource = '/public/api/ver1/bots/{bot_ID}/start_new_deal?pair='.$_SESSION['pairActuelle'];
    
    $curl = curl_init('https://api.3commas.io'.$pathToResource); //initialisation cURL
    
    $apiKey = 'XXXXXXX';
    $signature = 'XXXXXXXX';
    
    $signatureHash = hash_hmac('SHA256', $pathToResource, $signature);
    
    //ajout des différentes options avec un array
    curl_setopt_array($curl, [
    	CURLOPT_POST => true,
    
    	CURLOPT_SSL_VERIFYPEER => false, // =>> dit de ne pas vérifier le SSL donc danger
    	//voir CURLOPT_CAINFO pour gestion des certificats ou bien géré avec un dossier .htacces
    
    	CURLOPT_HTTPHEADER => array(
    		'apikey: ' . $apiKey,
    		'signature: ' . $signatureHash
    	), // défini un header avec un array
    
    	CURLOPT_RETURNTRANSFER => true, //retourne le résultat de l'éxécution dans la variable $data 
    
    	CURLOPT_TIMEOUT => 5 //un timeOUT
    ]);
    
    //on exécute la requéte avec les options définis précédemment, valeur de renvoi TRUE ou FALSE
    $data = curl_exec($curl); 
    
    if ($data === false) { // si FALSE 
    	var_dump(curl_error($curl)); // analyse de l'erreur
    } else {
    //si TRUE , la requête s'est bien exécutée
    	//on récupère le code HTTP retourner par la page
    	if (curl_getinfo($curl, CURLINFO_HTTP_CODE) === 200) {
    		//si le code est bien 200 OK alors on met en forme les données reçu
    		$data = json_decode($data, true);
    		echo '<pre>';
    		print_r($data); // on affiche le contenue de $data decodé en JSON
    		echo '</pre>';
    	}else{
    		$data = json_decode($data, true);
    		echo '<p>ERREUR : ' . curl_getinfo($curl, CURLINFO_HTTP_CODE) . '</p>';
    		echo '<pre>';
    		print_r($data); // on affiche le contenue de $data decodé en JSON
    		echo '</pre>';
    	}
    	
    }
    curl_close($curl);
    

    Comme vous le voyez, j'utilise cURL, mais je pense qu'il y a d'autre méthodes pour utiliser les API, malheureusement je suis très novice, j'ai fini les cours PhP y'a 3semaines et j'ai pondu ça en 8jours... soyez induglent :)

    Il y a aussi le fait que je ne vérifie pas SSL, donc pour l'instant impossible de le mettre en ligne, je l'utilise uniquement en local via MAMP.

    Merci de m'avoir lu.

    N'hésitez pas si vous avez des questions, je vous répond avec plaisir.

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2021 à 16:59:11

      Fait gaffe avec ce genre de groupe.

      Et comment tu pense programmer tes StopLoss et TakeProfit ?

      • Partager sur Facebook
      • Partager sur Twitter
        25 mai 2021 à 22:56:25

        Le choix du langage n'est pas forcément le plus approprié. Je te conseille de te tourner plus vers du Python/R/Julia pour tout ce qui est usage numérique. Si tu veux faire un truc vraiment propre tu peux aller sur du c++ aussi.

        Après tout dépend de ce que tu cherches à faire : trading à la nanosecondes / secondes / 30s / 1m / ... / Au mois. Dans les premiers cas oublies l'idée, tu risques de perdre face aux fonds d'investissement.

        Sâches aussi que c'est un problème difficile, les bons algorithmes de trading valent chers, en IA c'est un sujet d'actualité où les résultats laissent à désirer.

        Ce que je te conseille :

        - changes de langage, pars sur un environnement numérique plus adapté

        - vises des objectifs simples (des règles codées en dur) plutôt que de l'IA / modèles prédictifs.

        - obtient des jeux de données importants pour pré-tester tes algorithmes (et surtout en période de crash)

        - renseignes toi sur les indicateurs de la finance et des cryptos, certains sont beaucoup plus intéressant qu'un taux de conversion.

        En espérant t'avoir été utile !

        • Partager sur Facebook
        • Partager sur Twitter

        [API]automatisation trading

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown