Pages:
Author

Topic: Trading Bot en C# avec API Bittrex : "Par où commencer??" [Débutant] [Résolu] (Read 408 times)

jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Ché bon chat!!!!!?Huh (on intègre la news via "cryptopanic" pour diminuer le risque management à r=r-1):

        private void backgroundWorker5_DoWork(object sender, DoWorkEventArgs e)
        {

            //****************************************CryptoPanic*******************************************  
            try
            {
                string url = "https://cryptopanic.com/api/posts/?auth_token=YOURAPIKEYcurrencies=" + Curr1.ToString()+","+Curr2.ToString();
                string json = new WebClient().DownloadString(url);
                var dataDeserialized = JsonConvert.DeserializeObject(json);
                dt_CryptoPanic.Clear();
                try
                {
                    for (int b = 0; b <= dataDeserialized.results.Count - 1; b++)
                    {
                        dt_CryptoPanic.Rows.Add(
                    dataDeserialized.results.domain,

                    dataDeserialized.results.votes.negative,
                    dataDeserialized.results.votes.positive,
                    dataDeserialized.results.votes.important,
                    dataDeserialized.results.votes.liked,
                    dataDeserialized.results.votes.disliked,
                    dataDeserialized.results.votes.lol,
                    dataDeserialized.results.votes.toxic,
                    dataDeserialized.results.votes.saved,

                    dataDeserialized.results.source.domain,
                    dataDeserialized.results.source.title,
                    dataDeserialized.results.source.region,
                    dataDeserialized.results.source.path,

                    dataDeserialized.results.title,
                    dataDeserialized.results.published_at,
                    dataDeserialized.results.slug,

                    dataDeserialized.results.currencies[0].code,
                    dataDeserialized.results.currencies[0].title,
                    dataDeserialized.results.currencies[0].slug,
                    dataDeserialized.results.currencies[0].url,

                    dataDeserialized.results.id,
                    dataDeserialized.results.created_at,
                    dataDeserialized.results.url
                    );
                    }
                }
                catch (InvalidOperationException ex)
                {
                    MessageBox.Show(ex.Message, "BGW5 Second Try");
                }
            }
            catch (InvalidOperationException ex)
            {
                MessageBox.Show(ex.Message, "BGW5 Premier Try");
            }
        }

        private void backgroundWorker5_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            dataGridView2.Rows.Clear();
            for (int c = 0; c <= dt_CryptoPanic.Rows.Count - 1; c++)
            {
                dataGridView2.Rows.Add(
                //dt_CryptoPanic.Rows[c].ItemArray[0],//domain
                dt_CryptoPanic.Rows[c].ItemArray[1],//negative
                dt_CryptoPanic.Rows[c].ItemArray[2],//positive
                dt_CryptoPanic.Rows[c].ItemArray[3],//important
                dt_CryptoPanic.Rows[c].ItemArray[4],//liked
                dt_CryptoPanic.Rows[c].ItemArray[5],//disliked
                dt_CryptoPanic.Rows[c].ItemArray[6],//lol
                dt_CryptoPanic.Rows[c].ItemArray[7],//toxic
                //dt_CryptoPanic.Rows[c].ItemArray[8],//saved
                dt_CryptoPanic.Rows[c].ItemArray[9],//source_domaine
                //dt_CryptoPanic.Rows[c].ItemArray[10],//source_title
                //dt_CryptoPanic.Rows[c].ItemArray[11],//source_region
                //dt_CryptoPanic.Rows[c].ItemArray[12],//source_path
                dt_CryptoPanic.Rows[c].ItemArray[13],//title
                dt_CryptoPanic.Rows[c].ItemArray[14],//published_at
                //dt_CryptoPanic.Rows[c].ItemArray[15],//slug
                dt_CryptoPanic.Rows[c].ItemArray[16]//currencies_code
                //dt_CryptoPanic.Rows[c].ItemArray[17],//currencies_title
                //dt_CryptoPanic.Rows[c].ItemArray[18],//currencies_slug
                //dt_CryptoPanic.Rows[c].ItemArray[19],//currencies_url
                //dt_CryptoPanic.Rows[c].ItemArray[20],//id
                //dt_CryptoPanic.Rows[c].ItemArray[21]//created_at
                //dt_CryptoPanic.Rows[c].ItemArray[22]//url
                );
            }
            dataGridView2.ClearSelection();
            for (int c = 0; c <= dataGridView2.Rows.Count - 1; c++)
            {
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[0].Value) >0)
                {
                    dataGridView2.Rows[c].Cells[0].Style.BackColor = Color.Red;
                }
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[1].Value) > 0)
                {
                    dataGridView2.Rows[c].Cells[1].Style.BackColor = Color.Green;
                }
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[2].Value) > 0)
                {
                    dataGridView2.Rows[c].Cells[2].Style.BackColor = Color.Yellow;
                }
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[3].Value) > 0)
                {
                    dataGridView2.Rows[c].Cells[3].Style.BackColor = Color.Blue;
                }
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[4].Value) > 0)
                {
                    dataGridView2.Rows[c].Cells[4].Style.BackColor = Color.Fuchsia;
                }
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[5].Value) > 0)
                {
                    dataGridView2.Rows[c].Cells[5].Style.BackColor = Color.White;
                    dataGridView2.Rows[c].Cells[5].Style.ForeColor = Color.Black;
                }
                if (Convert.ToInt32(dataGridView2.Rows[c].Cells[6].Value) > 0)
                {
                    dataGridView2.Rows[c].Cells[6].Style.BackColor = Color.Red;
                }
            }
            TraceNews();
            timer3.Start();
        }
        private void TraceNews()
        {
            int Neg_count = 0;
            int Pos_count = 0;
            int Imp_count = 0;
            int Lik_count = 0;
            int Dis_count = 0;
            int Lol_count = 0;
            int Tox_count = 0;
            for (int r = 0; r <= dataGridView2.Rows.Count - 1; r++)
            {
                Neg_count = Neg_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[0].Value);
                Pos_count = Pos_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[1].Value);
                Imp_count = Imp_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[2].Value);
                Lik_count = Lik_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[3].Value);
                Dis_count = Dis_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[4].Value);
                Lol_count = Lol_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[5].Value);
                Tox_count = Tox_count + Convert.ToInt32(dataGridView2.Rows[r].Cells[6].Value);
            }
            chart3.Series[0].Points.Clear();
            chart3.Series[1].Points.Clear();
            chart3.Series[2].Points.Clear();
            chart3.Series[3].Points.Clear();
            chart3.Series[4].Points.Clear();
            chart3.Series[5].Points.Clear();
            chart3.Series[6].Points.Clear();
        
            chart3.Series["Negative"].Points.AddY(Neg_count);
            chart3.Series["Positive"].Points.AddY(Pos_count);
            chart3.Series["Important"].Points.AddY(Imp_count);
            chart3.Series["Liked"].Points.AddY(Lik_count);
            chart3.Series["Disliked"].Points.AddY(Dis_count);
            chart3.Series["Lol"].Points.AddY(Lol_count);
            chart3.Series["Toxic"].Points.AddY(Tox_count);

            chart3.Series["Negative"].IsValueShownAsLabel = true;
            chart3.Series["Negative"].LabelFormat = "{#}";
            chart3.Series["Negative"].LabelForeColor = Color.White;
            chart3.Series["Positive"].IsValueShownAsLabel = true;
            chart3.Series["Positive"].LabelFormat = "{#}";
            chart3.Series["Positive"].LabelForeColor = Color.White;
            chart3.Series["Important"].IsValueShownAsLabel = true;
            chart3.Series["Important"].LabelFormat = "{#}";
            chart3.Series["Important"].LabelForeColor = Color.White;
            chart3.Series["Liked"].IsValueShownAsLabel = true;
            chart3.Series["Liked"].LabelFormat = "{#}";
            chart3.Series["Liked"].LabelForeColor = Color.White;
            chart3.Series["Disliked"].IsValueShownAsLabel = true;
            chart3.Series["Disliked"].LabelFormat = "{#}";
            chart3.Series["Disliked"].LabelForeColor = Color.White;
            chart3.Series["Lol"].IsValueShownAsLabel = true;
            chart3.Series["Lol"].LabelFormat = "{#}";
            chart3.Series["Lol"].LabelForeColor = Color.White;
            chart3.Series["Toxic"].IsValueShownAsLabel = true;
            chart3.Series["Toxic"].LabelFormat = "{#}";
            chart3.Series["Toxic"].LabelForeColor = Color.White;
            //chart3.ChartAreas[0].AxisX.Maximum = 2;
            chart3.ChartAreas[0].RecalculateAxesScale();
            
            //chart3.ChartAreas[0].AxisY.Maximum = 10;
        }
    }
}
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Bande de Kinoton ! Smiley

Normalement y a plus un seul bugg!!! j'ai dû dupliquer mon cerveau à la puissance 10000 pour en arriver à bout...: https://github.com/PtiPoulet/SurriBot

Smiley enjoy Grin
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
J'pense que j'incommode certain...Je suis malheureusement ultra sensible à la susceptibilité négative...j vais voir ailleurs avec mon bot....Sad ....zavez le github...stay tune.Wink
full member
Activity: 322
Merit: 117
Tu sais que tu as une très jolie fonction qui te permes d'éditer tes messages ?
Ça t'évitera tous les désagréments qui peuvent venir à faire des poste à la suite Wink


jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
ah c'est bon j'ai trouvé...pas simple tout ça...

C:\Users\"Votre nom du compte sur le PC"\source\repos\WindowsFormsApp3

Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
d'ailleurs j'ai une question : il est enregistré où mon projet dans MVS si je veux partager les sources de mon code sur Github??? sans avoir à copier ici un truc qui pourrait filer mal au crâne aux moins aguéris? Smiley Huh Huh J'ai pas "Enregistrer-sous" comme dans word?Huh Huh
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Au début j demandais de l'aide....mais maintenant c'est plus devenu un partage de connaissance pour les plus débutants comme je le suis.... Wink vu que j'arrive à trouver réponse à mes questions....Vive le partage ! Smiley
full member
Activity: 322
Merit: 117
Avec le nombre de questions qui sont posé chaques jours ?
Je ne dis pas que tous les sujets peuvent être marqué résolut Wink
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Tiens c'est la première fois que je vois un sujet résolu, marqué dans le titre.
Ca pourrait être un amélioration. Surtout pour les demandes d'aide, quand pensez vous ?
Si le sujet n'est pas "résolu" alors c'est qu'il n'y a personne qui cherche....où qu'il n'y a en faite pas de problèmes à résoudre ! Smiley
full member
Activity: 322
Merit: 117
Tiens c'est la première fois que je vois un sujet résolu, marqué dans le titre.
Ca pourrait être un amélioration. Surtout pour les demandes d'aide, quand pensez vous ?
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Version épurée sans bug de la balance USDT ...bref comme l'ancienne version mais en version mieux  Tongue:

https://github.com/PtiPoulet/PtiPoulet

 Smiley
sr. member
Activity: 812
Merit: 388
Moi c'est du chinois, j'y pige que dalle.
Je m'arrête à du bash en programmation et ça me donne déjà pas mal de difficulté.
Alors j'admire ton acharnement Wink
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Merci j m'en sors plutôt pas mal....enfin j'arrive à ce que je veux ....(heureusement qu'on a "StackOverFlow")... Smiley
P.S: désolé pour le mal au crâne  Tongue
sr. member
Activity: 812
Merit: 388
Franchement j'aimerai bien t'aider mais j'y capte rien à ce que tu racontes. Ca me donne un mal de crane.
J'espère qu'une personne pourra t'aider ici, tu n'aurais pas plus de réponse sur un forum informatique ou programmation.
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
tordu le cou au MSChart...+ d'autres trucs mineurs :
téléchargeable ici :
https://github.com/PtiPoulet/PtiPoulet
Fichier .exe dans dossier "Zip" nommé "ByZeDeep.zip" (j'ai pas déposé le nom mais il se pourrait que j'le fasse  Grin)
Smiley

PtiPoulet
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Revue du code complet!!!
....après quelques figeages de screen et quelques B.O.S.D (genre OS non reconnu après restart! Fichtre !!!! I'm Damned !!!! Grin).... on revoit l'affaire >Shocked
  On passe toutes les requêtes bittrex avec tu "Try..Catch", on mets tout dans des datatables sur du background workers "RunAsynchWork", et on migre les données des datatables vers des datagridviews sur "backgroundworker_RunWorker_Completed"
...ba ça va tout de suite mieux  ! Smiley lol
C'est là : https://github.com/PtiPoulet/PtiPoulet
Merci Bill Gates pour ces "BackGroundWorkers"magiques !!! Smiley
P.S.: Faut Zappuyer sur le bouton "Test" en haut à droite..j ai oublié de mettre la fonction sur la "Form Load"! Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Voili voilou la Bête : https://github.com/PtiPoulet/PtiPoulet

 Smiley (pas d'entourloupe ou de truc bizarre genre méchant virus caché....100% PtiPoulet garanti Juillet 2018)
(Pas de Setup, simplement un .exe (sous Windows10) .......en mode simulation uniquement avec la paire USDT-BTC avec mise de départ 500 USDT et paramètré avec profit mini >= 1% et il annule les buy orders et sell orders non-filled toutes les 5 * 5000ms et les relance tout seul en fonction du nouveau carnet d'ordre rafraîchit au bout de ce timelapse> en résumé il émet un son (le célèbre "blaouuumm" de windows10)quand il achète ou revend et les enregistredans les deux tableaux du bas , y faut juste regarder la balance pour voir si ça monte où si j'me suis complètement planté lol Grin Roll Eyes)

Let's see... Cry

P.S: y a moyen?de récupérer les infos de "Cointelegraphe" ou autre via une API puis dé-concaténer les phrases des gros titres avec un split.string et récupérer les mots et les comparer dans une BDD pré-établie, genre deux listbox : une bullish et une bearish.....si les mots sontbearish (genre bitcoin + crash) alors le bot diminue sont risque management et vis et versa... Shocked !! Roll Eyes Huh ;)j'suis sûr que oui ! Grin Wink
...ça devrait pouvoir se faire, même pour un débutant ça ! Smiley.... Grin...dans le prochain épisode ! Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
J'ai un bug c'est cheloux! Sad J'manque de RAM dans mon cerveau pour comprendre.... :/
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
J'ai rajouté une condition sur achat : j'achète que les supports(rafraichissement des supports d'achats toutes les 5 minutes et annulation des anciens "OpenOrder" "non-filled" au bout de 5 min toujours => TimeLapse à définir)(cf.plus gros volumes voir code précédent avec calcul du ratio sur la quantité à acheter en fonction du risquemanagement) et si et seulement si ils(ces ordres triés par volumes descndants) ont une rentabilité de plus * de 1% (différences des "Rate" entres les support d'achats/vente par index "tout simplement"(<< à cogiter) sur chacun des 100 derniers Index des carnets d'ordre achat/vente respectifs)(pour test....car possible que j 'm'oriente vers du 3%)....il a mis un peu moins de 5 heures à acheter ....Alleluia !!!!  Grin

private void Profitability()
        {
            dataGridView12.Rows.Clear();
            double Profit_Mini = 1.00;
            for (int Id = 0; Id <= dataGridView6.Rows.Count-1; Id++)
            {
                double Buy_Rate = Convert.ToDouble(dataGridView6.Rows[Id].Cells[1].Value);
                double Sell_Rate = Convert.ToDouble(dataGridView7.Rows[Id].Cells[0].Value);
                if ((Sell_Rate - Buy_Rate) / (Buy_Rate / 100) >= Profit_Mini)
                {
                    dataGridView12.Rows.Add(
                        Id,
                        dataGridView6.Rows[Id].Cells[1].Value,
                        (Sell_Rate - Buy_Rate) / (Buy_Rate / 100),
                        dataGridView7.Rows[Id].Cells[0].Value);
                }
            }
            dataGridView12.Sort(dataGridView12.Columns[2], ListSortDirection.Descending);
            dataGridView12.ClearSelection();
            dataGridView12.Rows[0].Selected = true;

            button3.Enabled = true;
        }
        private void Rate_To_Buy()
        {
            dataGridView8.Rows.Clear();
            for (int Id = 0; Id <= dataGridView12.Rows.Count - 2; Id++)
            {
                dataGridView8.Rows.Add(
                    dataGridView12.Rows[Id].Cells[0].Value,
                    dataGridView12.Rows[Id].Cells[1].Value);
            }
            dataGridView8.Sort(dataGridView8.Columns[0], ListSortDirection.Ascending);
            dataGridView8.ClearSelection();
            dataGridView8.Rows[0].Selected = true;
        }


Maintenant, faut qu'il vende et continue à acheter LOL! Smiley

Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Bittrex : "We are currently restricting orders to 500 open orders and 200,000 orders a day."

Question : Je lance 500 "Open order" en achat à midi, puis à 18H00 je les "Cancel"....j'ai encore droit à 500 jusqu'à minuit Roll Eyes? où c'est grillé??? Cry

Merci d'avance

PtiPoulet
Pages:
Jump to: