Un peu d'aide ? - page 2

 
WHRoeder:
  1. Bien sûr que non. RTFM. Vous n'obtenez un nouveau tick que lorsque vous revenez du départ.
  2. RTFM et limites du testeur: vous ne pouvez PAS dormir dans le testeur.
  3. Quelles sont les valeurs de retour des fonctions ? Comment puis-je les utiliser ? - Forum MQL4


Merci pour votre aide, j'ai supprimé la boucle while et le retour à la fonction start à chaque exécution d'ordre, supprimé la fonction IsTesting (pour l'instant) et mon OrderSend semble fonctionner.


Je l'utilise maintenant, peu importe où j'ai une fonction Print(), rien n'apparaît dans le journal (ou le livre de bord), l'ordre initial s'ouvre bien et puis plus rien - même si j'ai mon ordre d'impression comme la ligne suivante dans le code ?

 
j.w.msb:

Merci pour votre aide, j'ai supprimé la boucle while et le break vers la fonction start à chaque exécution d'ordre, supprimé la fonction IsTesting (pour l'instant) et mon OrderSend semble fonctionner.


J'ai supprimé la fonction IsTesting (pour l'instant) et mon OrderSend semble fonctionner. En l'exécutant maintenant, peu importe où j'ai une fonction Print(), rien n'apparaît dans le journal (ou le livre de bord), l'ordre initial s'ouvre bien et ensuite rien - même si j'ai mon ordre d'impression comme la ligne suivante dans le code ?


comment se présente votre code maintenant ?
 
Désolé d'être un cauchemar à ce sujet ! J'ai essayé de trouver des informations sur les erreurs dans le testeur de stratégie mais Google ne m'aide pas :s
//+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern int z=1234;
int total;
//---
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total=0;
   if (OrdersTotal()!=0)
      {
      for (i=OrdersTotal()-1; i>=0; i--)                                                     
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               else 
                  {
                  total++;                                                                 
               }
            }
         }
      }
   }
//----
   return;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int i,L;
   if (AccountBalance()>50)                                                                                     
   {
//-----
double SMA6=iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;                                                                                                            
//----
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,"",z,0,Red); 
         Print("WE ARE HERE");
         total+=1;                                                       
      }
      if ((RSI30)&&(SMA6<SMA21))
         {
         OrderSend(Symbol(),OP_SELL,0.1,Bid,0,0,0,"",z,0,Blue);
         total+=1;
      }  
   }
//---
   if (total!=0)
      {
      L=0;
      for (i=OrdersTotal()-1; i>=0; i--)                                                    
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
                     total+=-1;
                     break;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                 
                     total+=-1;
                     break;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
//----
}
//----
return;
}
//-------------------------------------------
 

double, int, string, bool, datetime, color, ........ que dois-je utiliser ? ?? ....

//-----
double SMA6=iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6=  ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21=  ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70=  ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;
Print("RSI30=  ",RSI30);                                                                                                            
//----

Sont-ils doubles ? ??

         OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,"",z,0,Red); 
         Print("WE ARE HERE");

SEEEEEE Que sont les valeurs de retour des fonctions ? Comment les utiliser ? - Forum MQL4

grande explication

Lorsqu'une fonction renvoie un int, comme OrderSend(), nous pouvons utiliser un code tel que celui-ci pour vérifier que la fonction a fonctionné et signaler une erreur dans les journaux si elle n'a pas fonctionné . . .

int TicketNumber;

TicketNumber = OrderSend( . . . . . . . . );

**(*******************)
   {
   Print(******************);
   }
else
   {
   Print(************************);
   }

. Voir le lien que vous avez donné par WHRoeder et vous trouverez ce que j'ai caché ici avec des étoiles .......

Utilisez-le également pour vérifier la clôture des transactions.

Faites quelque chose comme ça à l'intérieur de votre code.... de cette façon quand les ordres échouent vous savez de quel type et d'où vient l'erreur.

.

que se passe-t-il si la fermeture de l'ordre échoue....... ?????

 

Le RSI et la MA sont tous deux doubles, les variables doivent donc l'être aussi, non ?

https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA

J'ai codé les erreurs d'impression, mais rien n'est imprimé dans le journal et je ne peux pas déterminer quelles erreurs se produisent. Est-ce que je rate encore quelque chose d'évident ? Maintenant, je me retrouve à ouvrir une vente et à ne pas pouvoir la fermer...

//+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern int z=1234;
int total;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total=0;
   if (OrdersTotal()!=0)
      {
      for (i=OrdersTotal()-1; i>=0; i--)                                                     
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               else 
                  {
                  total++;                                                                 
               }
            }
         }
      }
   }
//----
   return;
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int ticket,i,L;
   bool x;
   if (AccountBalance()>50)                                                                                     
   {
//-----
double SMA6=iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6 is ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21 is ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70 is ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30; 
Print("RSI30 is ",RSI30);                                                                                                           
//----
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red); 
         total+=1;                                                       
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }
      if ((RSI30)&&(SMA6<SMA21))
         {
         ticket=OrderSend(Symbol(),OP_SELL,v(AccountBalance()),Bid,0,0,0,"",z,0,Blue);
         total+=1;
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }  
   }
//---
   if (total!=0)
      {
      L=0;
      for (i=OrdersTotal()-1; i>=0; i--)                                                    
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
                     if (x==false)
                        {
                        Print("Error is ", GetLastError());
                     }
                     else total+=-1;
                     break;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);   
                     if (x==false)
                        {
                        Print("Error is ", GetLastError());
                     }
                     else 
                        {
                        total+=-1;
                     }
                     break;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
//----
}
//----
return;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
}
//-------------------------------------------------------------------+
double v(double k)
{
   double v=((k*0.015)/1000);
   if (v<MarketInfo(Symbol(),MODE_MINLOT))
      {
      v=MarketInfo(Symbol(),MODE_MINLOT);
      return(v);
   }
   else
      {
      return(v);
   }
}
//-------------------------------------------------------------------+
 

duuuhhhh iRSI est double mais la comparaison sort 1 - donc j'ai remplacé RSI30 et RSI70 avec juste RSI et j'ai fait une comparaison et tout fonctionne HOORAY ! SAUF quand je change le SMA6 en shift, il sort toujours SMA6=0 ? pourquoi ?

Merci à tous pour votre aide ! J'espère ne pas m'ennuyer autant la prochaine fois !

 
j.w.msb:

Le RSI et la MA sont tous deux doubles, les variables doivent donc l'être aussi, non ?

https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA

J'ai codé les erreurs d'impression, mais rien n'est imprimé dans le journal et je ne peux pas déterminer quelles sont les erreurs qui se produisent ? Est-ce que je rate encore quelque chose d'évident ? Maintenant, je suis de retour à l'ouverture d'une vente et puis ne pas être en mesure de fermer ...

Placez l'EA sur le graphique d'un compte de démonstration.

ne cherchez pas seulement dans le journal du terminal ...
consultez aussi les experts en terminologie .....

qu'est-ce que vous voyez imprimé

 
deVries:

placer l'EA sur un graphique d'un compte de démonstration

ne regardez pas seulement dans le journal du terminal ...
regardez aussi dans le terminal experts .....

qu'est-ce que vous y voyez imprimé


Impression et exécution maintenant :) merci pour votre aide - j'avais tort de définir iRSI<70 comme un double (puisque c'était une comparaison) et cela causait des problèmes. Il s'imprime maintenant et fonctionne comme prévu, sauf que, si je change le décalage de la SMA, il imprime SMA=0 ?
 
j.w.msb:

Impression et exécution maintenant :) merci pour votre aide - j'avais tort de définir iRSI<70 comme un double (puisque c'était une comparaison) et cela causait des problèmes. Il s'imprime maintenant et fonctionne comme prévu, sauf que, si je change le décalage de la SMA, il imprime SMA=0 ?

Placez un SMA avec les mêmes paramètres sur le graphique de votre EA et voyez ce que vous avez fait ...
 
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red); 
         total+=1;                                                       
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }

Pourquoi le total += 1 ;

Pour l'instant, je ne sais pas si l'ordre a réussi.

et s'il échoue, je ne vois pas quel type d'ordre il a essayé d'ouvrir, cela pourrait être aussi une vente que vous avez essayé d'ouvrir.