Partage
  • Partager sur Facebook
  • Partager sur Twitter

[API]telegram automatisation trading

    3 décembre 2020 à 17:36:19

    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
      3 décembre 2020 à 20:30:37

      Franchement pour 3 semaines ca va, on sent que tu réfléchis un minimum.

      Après je te conseille de poster dans "recrutement", qui est fait pour ca

      • Partager sur Facebook
      • Partager sur Twitter
      $2b||!$2b
        3 décembre 2020 à 20:53:43

        Merci pour ta réponse.

        Je vais suivre ton conseil, merci.

        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2020 à 7:37:18

          Et si je peux te donner des conseilles, tout ce qui est code similaire dans plus d'un endroit en générale, on peu créer des fonctions pour regrouper cette partie de code et dans certains cas des includes qui agit comme un copié/collé.

          Je te laisse te renseigner sur le sujet s'il t'intéresse :)

          • Partager sur Facebook
          • Partager sur Twitter
          $2b||!$2b
            4 décembre 2020 à 10:04:31

            Merci du conseil, je vais me renseigner ! 

            • Partager sur Facebook
            • Partager sur Twitter

            [API]telegram 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