ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests
Répondre Page 1 sur 1

Comprendre le fonctionnement d un robot

par nememoris » 02 Sep 2015 23:26

Bonjour

Je cherche à comprendre le fonctionnement d un robot, le renkoscalper que vous pouvez trouver ici :https://www.mql5.com/en/code/10547.

En fait je souhaiterais le reproduire en delphi .

J ai determiné les conditions d'ouverture du trade et son sens mais c est tout.
Pas moyen de comprendre la modification des SL/TP et surtout les conditions de fermeture.

La seule question technique posée sur mql5 date de pres d un an et n a jamais eu de reponse alors je me tourne vers vous.

Voici le code :
Code: Tout sélectionner
#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Afterburner 2011"
#property link      "http://www.forex-meta.com"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 200;
extern bool UseTakeProfit = False;
extern int TakeProfit = 10;SIGNAL_CLOSESELL
extern bool UseTrailingStop = True;
extern int TrailingStop = 10;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;

   if (EachTickMode) Current = 0; else Current = 1;

   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;



   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;

   //+------------------------------------------------------------------+
   //| Variable Begin                                                   |
   //+------------------------------------------------------------------+


double Buy1_1 = iClose(NULL, 0, Current + 0);
double Buy1_2 = iClose(NULL, 0, Current + 1);

double Sell1_1 = iClose(NULL, 0, Current + 0);
double Sell1_2 = iClose(NULL, 0, Current + 1);



   
   //+------------------------------------------------------------------+
   //| Variable End                                                     |
   //+------------------------------------------------------------------+

   //Check position
   bool IsTrade = False;

   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Buy)                                           |
            //+------------------------------------------------------------------+

           

            //+------------------------------------------------------------------+
            //| Signal End(Exit Buy)                                             |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } else {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Sell)                                          |
            //+------------------------------------------------------------------+

           

            //+------------------------------------------------------------------+
            //| Signal End(Exit Sell)                                            |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }

   //+------------------------------------------------------------------+
   //| Signal Begin(Entry)                                              |
   //+------------------------------------------------------------------+

   if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

   if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;


   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+

   //Buy
   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
            Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
         } else {
            Print("Error opening BUY order : ", GetLastError());
         }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
            Print("SELL order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
         } else {
            Print("Error opening SELL order : ", GetLastError());
         }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   if (!EachTickMode) BarCount = Bars;

   return(0);
}
//+------------------------------------------------------------------+


merci de votre aide

Re: Comprendre le fonctionnement d un robot

par Epitaf » 02 Sep 2015 23:47

Je ne connais pas ce logiciel, mais si je comprend bien il fait des trades automatiques.
Et donc tu ne comprends pas comment sont effectués ces trades, c'est ça ?

Si c'est ça, pourquoi tu cherches à reproduire des trades que tu ne comprends même pas ?

Re: Comprendre le fonctionnement d un robot

par nememoris » 03 Sep 2015 23:40

@ x3 : si je cherche à reproduire c est que je cherche à comprendre le fonctionnement du systeme.
Si tu veux apprendre l informatique il existe deux solutions :
Soit u te colle à la lecture de livres entiers en esperant en retenir quelque chose soit tu prends des bouts de codes que tu reproduis pour chercher à en comprendre le fonctionnement .
Moi je suis de cette catégorie là. Je suis incapable de me coller à la lecture d une donc, il faut imperativement que je mette les mains dedans pour comprendre...

@ Sevice :
d'abord il declare
Code: Tout sélectionner
bool IsTrade = False;

ce n est qu ensuite qu il le passe à true dans le test de condition
Code: Tout sélectionner
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               ...
...
...
               IsTrade = False;
               continue;
            }


merci de t y interesser

Re: Comprendre le fonctionnement d un robot

par Epitaf » 04 Sep 2015 00:01

Oh ok, je n'y étais pas. Ton but est juste de démonter le logiciel.
Navré je ne connais pas ce langage

Sinon j'allais te conseiller de d'abord pratiquer le trade manuel avant de t'engager dans de l'automatique afin de justement savoir où chercher, plutôt que de prendre des algos déjà tout fait, surement moisi et bien périmé :lol:

Re: Comprendre le fonctionnement d un robot

par nememoris » 04 Sep 2015 01:02

effectivement je souhaite le demonter pour en comprendre le fonctionnement et developper un petit soft de test où je pourrais inclure un spread de mon choix car j ai un compte demo chez Lmax avec des spreads tres faibles, mais des commissions et elles ne sont pas prises en compte pour le backtest.
J avais lu sur trading-automatique que les coms etaient de 25$ pour 1000000$
J aurais donc inclus 0.5 de spread en plus par lot.
Histoire d avoir un back test qui corresponde plus à la réalité...

Re: Comprendre le fonctionnement d un robot

par nememoris » 04 Sep 2015 01:10

Là ma demarche n'est pas d'apprendre à trader mais bien de comprendre le fonctionnement d une ea et d'apprendre le language....
enfin pour partie car mon objectif est de developper (si je parviens à trouver une strategie performante car je debute) un ea qui ne servira que de passerelle avec mon robot (dll) que j aurais developpé en Delphi.
out cela bien sur en attendant de devenir trader pro et de developper via les API de mes differents brokers :lol: :lol: :lol:

Re: Comprendre le fonctionnement d un robot

par Epitaf » 04 Sep 2015 01:18

J'ai bien saisi, mais comment tu vas la trouver ta stratégie performante si tu n'as pas tradé en manuel ?
Au pif en faisant des milliards de calcul en backtest ? ou en reprenant des robots périmés sur le web ?

Je pense que tu t'y prends mal, laisse tomber ton robot et commence par chercher ta stratégie. Et ensuite tu pourras coder autour de cette stratégie.

Et pour modifier le spread, je vois pas où est la difficulté, tu te mets des variables en début de script qui augmenteront ou diminueront le spread comme tu le souhaites. De mon côté je l'ai mis en dur à 1 point car je me concentre sur l'API d'IG

Re: Comprendre le fonctionnement d un robot

par nememoris » 04 Sep 2015 08:24

J avais pris le parti,à l issue de mes lectures de faire du 100% auto, pour eviter le stress, le facteur psychologique dans mes decisions.
J avais decidé aussi d adopter une representation Renko, c est le chart qui me parle le plus.
J ai donc bien evidemment commencé par chercher une strategie manuellement sur un chart renko.
J ai trouvé cet ea qui reprend une partie de mes conditions et lui ai ajouté les miennes ce qui me donne pour mes premieres tests sur EURGBP pour la periode du 01.01.2015 au 31.08.2015 les stats dans le tableau en fin de post.:

Il est evident que j ai des ameliorations à y apporter mais surtout que je dois comprendre le fonctionnement de l'ea pour un jour envisager de passer en reel.
En plus, le renko est un chart offline. Je dois trouver comment pouvoir trader en live avec.
Mais considerant sa construction il est aisé de le reporduire sur un chart en barre, en live à travers un indic mais pas sur le passé car il doit etre construit tick par tick pour etre efficient.
Mon idee etait donc de debuter sur un compte demo via mt4 et VPS gratuit 1 an.
durant cette periode :apprentissage de C# pour pouvoir utiliser ensuite l'API Lmax.
A l issue de cette année d evaluation (le seul pb etant que chez lmax le compte demo est limité à 1mois mais quitte à tester chez un autre broker qi met à dispo un compte gratuit illimité...), si les resultats sont probants, passer en reel.

Tu comprends donc l interet que j ai à comprendre le fonctionnement de cet ea...
Fichiers joints

Articles en relation
mon robot, votre avis
par nememoris » 21 Aoû 2015 17:09 (4 Réponses)
Geronimo, mon robot scalper...
Fichier(s) joint(s) par Renaud-C » 11 Sep 2015 09:23 (27 Réponses)
Création d’un robot parfait
par Stochastic » 21 Oct 2015 00:11 (67 Réponses)
Futur robot à l'imparfait
par BillyRayValentine » 22 Mar 2017 16:57 (35 Réponses)

ProRealTime

Alors partagez-le 5 fois c'est bon pour la santé