Pages:
Author

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

jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
ça donne vraiment mal au crâne ce MSChart ! Sad (j'ai l'impression de me transformer en spéléologue professionnel quant il s'agit d'aller changer la couleur d'un truc dans ce chart.... Shocked)
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Yop ! Y a quoi de mieux que MSChart en version gratos pour mettre en forme les graphes sur une appli C# SVP ? on va pas s'attarder sur les details mais ce serait plus léger sans backgroundworker tout ça....Sad
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
ah! c'est bon j 'ai trouvé  Tongue
        double A_Buy = 1;
        double B_Buy = 0;
        double Ratio_Buy = 0;

        private void button3_Click(object sender, EventArgs e)
        {
            double balance = Convert.ToDouble(label6.Text);
            double pending_Buy = 0;
            double pending_bill = 0;
            double Buy_Order_Id = Convert.ToDouble(numericUpDown1.Value.ToString());
            for (double Id_B = Buy_Order_Id; Id_B >= 0; Id_B--)
            {
                B_Buy = B_Buy + dataGridView6.Rows[Convert.ToInt32(Id_B)+1].Index;
            }
            for (double Id_B = Buy_Order_Id; Id_B >= 0 ; Id_B--)
            {               
                Ratio_Buy = A_Buy / B_Buy;
                pending_Buy = Ratio_Buy * balance;
                pending_bill = pending_bill + pending_Buy;
                dataGridView8.Rows.Add(
               (Ratio_Buy)*(balance/Convert.ToDouble(dataGridView6.Rows[Convert.ToInt32(Id_B)].Cells[1].Value)),
                dataGridView6.Rows[Convert.ToInt32(Id_B)].Cells[1].Value.ToString(),
                "OPEN_ORDER");
                A_Buy = A_Buy + 1;
            }
            balance = balance - pending_bill;
            label6.Text = balance.ToString();
            A_Buy = 1;
            B_Buy = 0;
            dataGridView8.Sort(dataGridView8.Columns[0], ListSortDirection.Descending);
        }
 Roll Eyes
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
J'ai une idée pour l'algo d'achat lol....en résumé j achètes les plus gros supports et j revends sur les plus grosses resistances!!! :p

on "trie" les 100 dernières valeurs de l'"order book" par volume les plus élevés dans une datatable (l index 0 aura donc le volume d'achat le plus élevé) , on choisi le "risque management"genre :

    -risque [r] = 1 : on cherche depuis l'index avec n=0(via numericupdown selecteur) (visant la datatable)avec une boucle "for (int i=0....) jusqu'à n = r-1 alors on boucle on cherche le prix du volume correspondant jusqu'à ce que l'index le plus élevée soit i=r-1 de l'"order book sorted by volume" et la mise sera(1/[r]+(i)), genre on investit notre capital à hauteur de 1/1 sur l'index i = 0 de la datatable de l'"order bouk sorted by volume" Résultat cas [1]=>investissement 100% sur la première mise à l'index 0.

    -risque [r] = 2 : on cherche depuis l'index avec n=1(via numericupdown selecteur) (de la datatable)avec une boucle "for (int i=0....) jusqu'à n = r-1 alors on boucle on cherche le prix du volume correspondant jusqu'à ce que l'index le plus élevée soit i=r-1 de l'"order book sorted by volume" et la mise sera(1/[r]+(i)), genre on investit notre capital à hauteur de 1*n(1/[r]+(i)) sur l'index i[0] et 2*n(1/[r]+(i)) sur l'index i[1] Résultat cas [2]==>investissement 1/3 sur l'index 1 et 2/3 sur l'index 0.

    -risque [r] = 3 : on cherche depuis l'index avec n=2(via numericupdown selecteur) (de la datatable)avec une boucle "for (int i=0....) jusqu'à n = r-1 alors on boucle on cherche le prix du volume correspondant jusqu'à ce que l'index le plus élevée soit i=r-1 de l'"order book sorted by volume" et la mise sera(1/[r]+(i)), genre on investit notre capital à hauteur de 1*n(1/[r]+(i)) sur l'index i[0], 2*n*(1/[r]+(i)) sur l'index i[1] et 3*n*(1/[r]+(i)) sur l'indexi[1] ......................Résultat cas [3]==>investissement 1/6 sur l'index 2, 2/6 sur l'index 1 et 3/6 sur l'index 0


...et ainsi de suite!!!.....bref z'avez compris le principe!!........elle est ou l'erreur SVP dans la formule?Huh Shocked Shocked Cry j'ai jamais été bon en maths et j'le regrette Sad

J'offre toute ma considération à celui qui me trouvera la formule unique et résultante des résultats précédemment attendus! :p

Merci par avance

PtiPoulet ! Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
okay..... pas de ban du serveur à 4 requêtes toutes les 5 secondes depuis le dernier thread......poussons le plus bas.....4 requêtes toutes les 500ms : let' see .... Shocked
Mémoire du procesus à 37 Mo (on sait pas ce que ça veut dire ) Waouuuuuu ! ?
 Musique bien : https://www.youtube.com/watch?v=AOBpBOZD8gg

Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
J'me disais que j'allais mettre une alarme sur MACD et/ou RSi pour lancer un achat...mais ça va pas être possible si l'appli du bot ne tourne pas H24 sur le PC sur lequel l'appli est lancée....il aura pas les données antérieur à 24H. Sad

Alors j pense que j vais me servir de mes MiningRigs pour enregistrer les requêtes API dans une base de données (SQL?) et puis lorsque j'ouvre l'appli de mon Bot sur mon pc de "tous les jours",l'appli récupère les info enregistrées par le/les miningrigs sur la période voulu pour faire mon calcul MACD/RSI...
c'est pas con??
Sous quelle forme c'est mieux de stocker toutes ces données? XML, Txt, MySQL, c'est tout pareil, autre???

Merci par avance.

PtiPoulet

P.S: question : quelle fréquence pour les requêtes API REST de Bittrex via un "Timer_tick"? là j'suis à 4 requêtes différentes toutes les 5 secondes ! c'est trop?pas assez, sans avis Smiley?



jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
/*Petite rectif pour les noobs comme moi qui se galèrent et qui voudraient utiliser l'"API REST"(="tu envois des requêtes au serveur et il te répond quand il peut") plutôt que le "WebSocketAPI"(="tu souscris au serveur et t'attend qui t'envois des infos en fonction de la surcharge du serveur").... : donc Premièrement créer une WindowsForm avec 1 bouton, 1 comboBox et 1 datagridview (ajoutez trois columns à cette datagridview via "click droit" sur le datagridview (click droit : "Modifier les colonnes").....(aussi n'oubliez pas d'intégrer la référence NewtonSoft.JSON au projet(click droit ds l'explorateur de solution sur la solution ...gérer les packages nugget's......puis parcourir.....Rechercher le package : "NewtonSoft.JSON" puis l'installer....Smiley voici le code pour la Form1.cs: */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using System.Net;
using System.Net.Http;


namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            GetMarket();
        }
        private void GetMarket()
        {
            string url = "     https://bittrex.com/api/v1.1/public/getmarkets";
            string json = new WebClient().DownloadString(url);
            var dataDeserialized = JsonConvert.DeserializeObject(json);

            for (int n = 0; n <= dataDeserialized.result.Count - 1; n++)
            {
                comboBox1.Items.Add(dataDeserialized.result[n].BaseCurrency
                    + "-" + dataDeserialized.result[n].MarketCurrency);
            }
            comboBox1.SelectedIndex = 0;
        }
    

        private void button1_Click(object sender, EventArgs e)
        {
            string url = "https://bittrex.com/api/v1.1/public/getticker?market=" + comboBox1.SelectedItem.ToString();
            string json = new WebClient().DownloadString(url);
            var dataDeserialized = JsonConvert.DeserializeObject(json);
            dataGridView1.Rows.Add(dataDeserialized.result.Bid, dataDeserialized.result.Ask,dataDeserialized.result.Last);
              
        }
    }
}


/*et Deuxièmement Smiley tu crées une class (click droit dans l'explorateur de solution sur "le projet en question(WindowsFormApp1)" .....puis "ajouter" ......"class"....>>>la renomer en "Bittrex.cs"....voici le code à coller : */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApp1
{
    public class Market
    {
        public class Result
        {
            public string MarketCurrency { get; set; }
            public string BaseCurrency { get; set; }
            public string MarketCurrencyLong { get; set; }
            public string BaseCurrencyLong { get; set; }
            public double MinTradeSize { get; set; }
            public string MarketName { get; set; }
            public bool IsActive { get; set; }
            public DateTime Created { get; set; }
            public string Notice { get; set; }
            public bool? IsSponsored { get; set; }
            public string LogoUrl { get; set; }
        }

        public class RootObject
        {
            public bool success { get; set; }
            public string message { get; set; }
            public List result { get; set; }
        }
    }
    public class Ticker
    {
        public class Result
        {
            public double Bid { get; set; }
            public double Ask { get; set; }
            public double Last { get; set; }
        }

        public class RootObject
        {
            public bool success { get; set; }
            public string message { get; set; }
            public Result result { get; set; }
        }
    }
      
}

//Fin
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Ne cherchez plus j'ai trouvé... Grin Grin

private void LoadAPISettings()
        {
            textBox1.Text = Properties.Settings.Default.APIKey;
            textBox2.Text = Properties.Settings.Default.APISecret;
        }

        public void InitializeAPI()
        {
            BittrexWebsocket.BittrexCallback CreateCallback(string name)
            {
                            
                return (info) =>
                {
                    string BittrexInfo = BittrexWebsocket.Decode(info);
                    
                    RootObject root = Newtonsoft.Json.JsonConvert.DeserializeObject(BittrexInfo);

                    dataGridView1.Invoke(new MethodInvoker(delegate
                    {
                        dataGridView1.Rows.Add(root.M,root.N,root.Z,root.S,root.f);
                    }));
                    
                };
            }

            
            Task task = Task.Run(
         async () =>
         {
             string apiKey = Properties.Settings.Default.APIKey;
             string apiSecret = Properties.Settings.Default.APISecret;
             string baseUrl = "https://beta.bittrex.com/signalr";


C'est moche mais ça marche...
Smiley
jr. member
Activity: 42
Merit: 2
Nothing Really Matters... :)
Salut salut,

Nouveau en trading et nouveau aussi en programmation, j voudrais utiliser la nouvelle API Bittrex en c# pour me bidouiller un bot....
En mode console pas de soucis ça m'affiche bien des trucs, mais j voudrais intégrer ces trucs (:p) dans une windows form.
Un pti coup de pouce SVP pour me faire avancer?
j'me doute que cela se passe dans "static void Main(string[] args)" mais comment initialiser l'API à partir d'une windows form et y intégrer les données vers ce windows form?
 Roll Eyes
Merci par avance.

PtiPoulet
Smiley
Pages:
Jump to: