Erreurs, bugs, questions - page 3076

 
Yury Lemeshev #:

Oui.

Des noms très étranges - on dirait des décompilés. Veuillez montrer plus de votre autre code - un code que vous avez écrit vous-même.

 
Vladimir Karputov #:

Des noms très étranges - on dirait des décompilés. Veuillez montrer plus de votre autre code - un code que vous avez écrit vous-même.

int intLevelOrderProfit()
   {
   int iLOP,iL;
   ProfitCycle=GlobalVariableGet("["+MAGICs+"] Profit Cycle");
   iL=GlobalVariableGet("["+MAGICs+"] Level Orders")-1;
   ArrayResize(LOP,GlobalVariableGet("["+MAGICs+"] Level Orders")-1);
   int LOPc;LOPc=0;
   for(i=0; i<GlobalVariablesTotal(); i++)
      {
      if(StringFind(GlobalVariableName(i),"["+MAGICs+"] Level Order #")!=-1)
         {
         iLOP=GlobalVariableGet(GlobalVariableName(i));
         if(iLOP<GlobalVariableGet("["+MAGICs+"] Level Orders"))
            {
            /*MT5*/if(PositionSelectByTicket(StringSubstr(GlobalVariableName(i),(2+StringFind(GlobalVariableName(i)," #",0))))==true)
            ///*MT4*/if(OrderSelect(StringSubstr(GlobalVariableName(i),(2+StringFind(GlobalVariableName(i)," #",0))),SELECT_BY_TICKET,MODE_TRADES)==true)
               {
               LOPc++;
               ArrayFill(LOP,(iLOP-1)*5+0,1,MAGICs);
               /*MT5*/ArrayFill(LOP,(iLOP-1)*5+1,1,LOP[iLOP-1][1]+PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP));
               ///*MT4*/ArrayFill(LOP,(iLOP-1)*5+1,1,LOP[iLOP-1][1]+OrderProfit()+OrderSwap()+OrderCommission());
               if(LOPc==1){ArrayFill(LOP,((iLOP-1)*5)+3,1,StringSubstr(GlobalVariableName(i),(2+StringFind(GlobalVariableName(i)," #",0))));}
               if(LOPc==2){ArrayFill(LOP,((iLOP-1)*5)+4,1,StringSubstr(GlobalVariableName(i),(2+StringFind(GlobalVariableName(i)," #",0))));}
               if(LOPc==2){LOPc=0;}
               }
            }
         }
      }
   if(ArraySize(LOP)>0)
      {
      int iLOPP;
      iLOPP=Profit;
      if(CloseLevelOrders==ECLO2){iLOPP=Profit*(GlobalVariableGet("["+MAGICs+"] Level Orders"));}
      for(i=0; i<ArraySize(LOP)/5; i++)
         {
         if(NormalizeDouble(LOP[i][0],0)==MAGICs)
            {
            if((-LOP[i][1])<(-iLOPP*2) && (-LOP[i][1])<(-LOP[i][2]*2))
               {ArrayFill(LOP,(i*5)+2,1,(LOP[i][1])/2);}
            if(LOP[i][1]>iLOPP && LOP[i][1]<=LOP[i][2])
               {
               if(LOP[i][3]>0)
                  {
                  ticket=LOP[i][3];Print("-673- Closing by profit "+(LOP[i][2])+" ticket "+ticket);intClosePosition();CloseMode="CloseOneMagic";intDeleteGlobalVariables();GlobalVariableSet("["+MAGICs+"] Profit Cycle",LOP[i][2]/2+ProfitCycle);
                  }
               if(LOP[i][4]>0)
                  {
                  ticket=LOP[i][4];Print("-677- Closing by profit "+(LOP[i][2])+" ticket "+ticket);intClosePosition();CloseMode="CloseOneMagic";intDeleteGlobalVariables();GlobalVariableSet("["+MAGICs+"] Profit Cycle",LOP[i][2]/2+ProfitCycle);
                  }
               GlobalVariableSet("["+MAGICs+"] INDEX",GlobalVariableGet("["+MAGICs+"] INDEX")/DeMultiplicationVoltage); //Edition 26082021
               ArrayFill(LOP,(i*5)+2,1,0);
               }
            }
         ArrayFill(LOP,(i*5)+0,1,0);
         ArrayFill(LOP,(i*5)+1,1,0);
         ArrayFill(LOP,(i*5)+3,1,0);
         ArrayFill(LOP,(i*5)+4,1,0);
         }
      }
   return(0);
   }
 
Vladimir Karputov #:

Des noms très étranges - on dirait des décompilés. Veuillez montrer plus de votre autre code - le code que vous avez écrit vous-même.

Je divise tout dans mon Expert Advisor en fonctions, iFunctionExample(), et les variables iFE1,iFE2,iFE3 pour int, et dFE1, dFE2, dFE3 pour double. Cela me permet de comprendre plus facilement d'où vient chaque chose.

 
Yury Lemeshev #:

Dans mon Expert Advisor, je divise tout par des fonctions, iFunctionExample(), et les variables iFE1,iFE2,iFE3 pour int, et dFE1, dFE2, dFE3 pour double. C'est plus facile pour moi de comprendre ce qui en ressort de cette façon.

Ok. Merci pour cette clarification et pour avoir commencé à bien coder.

 
Yury Lemeshev #:

Je travaille sur deux ou plusieurs commandes en même temps. Grille. Je vérifie le prix en dessous ou au-dessus du point d'entrée conditionnel. Les points d'entrée conditionnels étaient à l'origine dans le tableau, ils sont maintenant dans les globaux.

Et il s'avère que les chiffres sont intervertis, mais Dieu interdit l'interversion. Si seulement la comparaison était effectuée correctement. Mais les problèmes de substitution existent aussi.

J'ai vu que SymbolInfoBid(name,SYMBOL_BID) peut retourner 0 ou EMPTY_VALUE, donc il vaut la peine de vérifier si c'est valide.

Mais une double comparaison si (A>B && B-A<0) se lit assez drôlement : "Est-ce plus que B ? et même si ?

n'ayez pas peur d'utiliser le journal - imprimez vos variables pour voir ce qui se passe vraiment

PS/ bien sûr, les noms de variables sont une plaie... comment lire et écrire un tel code :-) et surtout n'oubliez pas

 
Maxim Kuznetsov #:

SymbolInfoBid(name,SYMBOL_BID) peut retourner 0 ou EMPTY_VALUE, il est utile de vérifier si c'est correct.

Mais une double comparaison si (A>B && B-A<0) se lit assez drôlement : "Est-il plus grand que B ? et même si ?

n'ayez pas peur d'utiliser le journal - imprimez vos variables pour voir ce qui se passe vraiment

PS/ bien sûr les noms de variables sont une blague...comment lire et écrire un tel code :-) et surtout n'oubliez pas

Je vais écrire un EA où cette erreur devrait être évidente, ou je ne la rencontrerai pas. J'en parlerai plus tard.

B-A<0 vérification supplémentaire pour s'assurer que la fonction n'est pas touchée, mais d'autres caractères prennent des données qui contournent cette vérification.

 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property script_show_inputs

input int                        Magic                      =100;
input double                     Volume                     =0.01;
input bool                       EURUSD                     =true;
input bool                       EURGBP                     =true;
input bool                       GBPUSD                     =true;
input double                     Grid                       =0.5;
extern int                       Slippage                   =5;   

int i,type,ticket,MagiX;
double price;
string symbol,iOrderComment;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
   {
   return(INIT_SUCCEEDED);  
   }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
   {
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iGridCreate()
   {
   double dGC1;
   dGC1=SymbolInfoDouble(symbol,SYMBOL_BID);
   for(i=0; i<25; i++)
      {GlobalVariableSet(symbol+" BUY "+(1001+i),NormalizeDouble(dGC1=dGC1-(dGC1/100*Grid),SymbolInfoInteger(symbol,SYMBOL_DIGITS)));}
   dGC1=SymbolInfoDouble(symbol,SYMBOL_BID);
   for(i=0; i<25; i++)
      {GlobalVariableSet(symbol+" SELL "+(1001+i),NormalizeDouble(dGC1=dGC1+(dGC1/100*Grid),SymbolInfoInteger(symbol,SYMBOL_DIGITS)));}
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iMagic()
   {
   MagiX=Magic;
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iGridOpen()
   {
   double dGO1;
   string sGO1;
   for(i=0; i<GlobalVariablesTotal(); i++)
      {
      sGO1=GlobalVariableName(i);
      symbol=StringSubstr(sGO1,0,StringFind(sGO1," ",0));
      dGO1=SymbolInfoDouble(symbol,SYMBOL_BID);
      if(StringFind(sGO1,"BUY",0)!=-1)
         {
         if(dGO1<GlobalVariableGet(sGO1))
            {
            type=0;
            iOrderComment=dGO1+"<"+GlobalVariableGet(sGO1);
            intOpenPosition();
            GlobalVariableDel(sGO1);
            }
         }
      if(StringFind(sGO1,"SELL",0)!=-1)
         {
         if(dGO1>GlobalVariableGet(sGO1))
            {
            type=1;
            iOrderComment=dGO1+">"+GlobalVariableGet(sGO1);
            intOpenPosition();
            GlobalVariableDel(sGO1);
            }
         }
      }
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int intOpenPosition()
   {
   MqlTradeRequest TradeRequest={}; MqlTradeResult TradeResult={};
   ZeroMemory(TradeRequest);ZeroMemory(TradeResult);
   TradeRequest.action=TRADE_ACTION_DEAL;
   TradeRequest.symbol=symbol;
   TradeRequest.volume=Volume;
   TradeRequest.type=type;
   if(type==0){price=SymbolInfoDouble(symbol,SYMBOL_ASK);}
   if(type==1){price=SymbolInfoDouble(symbol,SYMBOL_BID);}
   TradeRequest.price=price;
   TradeRequest.deviation=Slippage;
   TradeRequest.magic=MagiX;
   TradeRequest.comment=iOrderComment;
   if(!OrderSend(TradeRequest,TradeResult)){Print("110");intOpenPosition();}
   else{ticket=TradeResult.deal;}
   return(0);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
   {
   iMagic();
   iGridOpen();
   if(EURUSD==true)
      {
      symbol="EURUSD";
      SymbolSelect(symbol,true);
      if(GlobalVariablesTotal()==0){iGridCreate();}
      for(i=0; i<GlobalVariablesTotal(); i++)
         {
         if(StringFind(GlobalVariableName(i),symbol,0)!=-1){break;}
         }
      if(i==GlobalVariablesTotal()){iGridCreate();}
      }
   if(EURGBP==true)
      {
      symbol="EURGBP";
      SymbolSelect(symbol,true);
      if(GlobalVariablesTotal()==0){iGridCreate();}
      for(i=0; i<GlobalVariablesTotal(); i++)
         {
         if(StringFind(GlobalVariableName(i),symbol,0)!=-1){break;}
         }
      if(i==GlobalVariablesTotal()){iGridCreate();}
      }
   if(GBPUSD==true)
      {
      symbol="GBPUSD";
      SymbolSelect(symbol,true);
      if(GlobalVariablesTotal()==0){iGridCreate();}
      for(i=0; i<GlobalVariablesTotal(); i++)
         {
         if(StringFind(GlobalVariableName(i),symbol,0)!=-1){break;}
         }
      if(i==GlobalVariablesTotal()){iGridCreate();}
      }
   }
 

Les tickets 6,7,8 n'ont pas reçu leurs données. Si j'écris quelque chose de mal, je vous serais reconnaissant de me dire ce qui ne va pas. Cependant, j'ai essayé de nombreux changements et l'erreur persiste.

Je vois le problème dans le testeur MT5 en mode visualisation.

Dossiers :
bhshrzc2g7.png  27 kb
 

J'essaie de résoudre le problème.

J'ai remarqué ce qui suit :

Le testeur cesse d'écrire des journaux, de quelque nature que ce soit. Et à ce moment-là, il y a un crash, les métamatiques s'effondrent.

2020.08.17 06:12:21 EURGBP 0.90496

2020.08.17 06:12:21 EURGBP ACHETER 0.90496

2020.08.17 06:47:12 GBPUSD 1.3098

2020.08.17 06:47:12 GBPUSD ACHETER 1.3098

Juste à 6:34:15 il y a une ouverture de transactions qui ne devraient pas être ouvertes.

Veuillez vérifier mon code sur le testeur. Il me semble que le testeur ne fonctionne pas correctement après les dernières mises à jour.


Dossiers :
du8ozf0qs9.png  67 kb
 
Aidez à résoudre le problème avec l'indicateur. Un indicateur est installé sur deux PC. Après avoir changé mon compte de trading, l'indicateur n'était pas affiché sur le graphique (1 pc), j'ai changé de timeframe et l'indicateur a été perdu (2 pc). Tout ce que j'ai fait est de télécharger/désinstaller l'indicateur, compiler et réinstaller le terminal. Aucun résultat.