Fehler, Irrtümer, Fragen - Seite 3076

 
Vladimir Karputov #:

Erste Frage: Haben Sie diesen Code selbst geschrieben und diese Variablennamen vergeben?

Ja.

 
Yury Lemeshev #:

Ja.

Sehr seltsame Namen - sieht aus wie dekompiliert. Bitte zeigen Sie mehr von Ihrem anderen Code - Code, den Sie selbst geschrieben haben.

 
Vladimir Karputov #:

Sehr seltsame Namen - sieht aus wie dekompiliert. Bitte zeigen Sie mehr von Ihrem anderen Code - Code, den Sie selbst geschrieben haben.

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 #:

Sehr seltsame Namen - sieht aus wie dekompiliert. Bitte zeigen Sie mehr von Ihrem anderen Code - dem Code, den Sie selbst geschrieben haben.

Ich unterteile alles in meinem Expert Advisor in Funktionen, iFunctionExample(), und die Variablen iFE1,iFE2,iFE3 für int, und dFE1, dFE2, dFE3 für double. Das macht es für mich einfacher zu verstehen, woher alles kommt.

 
Yury Lemeshev #:

In meinem Expert Advisor teile ich alles durch Funktionen, iFunctionExample(), und die Variablen iFE1,iFE2,iFE3 für int, und dFE1, dFE2, dFE3 für double. So ist es für mich einfacher zu verstehen, was dabei herauskommt.

Gut. Vielen Dank für diese Klarstellung und dafür, dass Sie begonnen haben, den Code richtig zu verstehen.

 
Yury Lemeshev #:

Ich arbeite an zwei oder mehr Aufträgen gleichzeitig. Raster. Ich prüfe, ob der Kurs unter oder über dem bedingten Einstiegspunkt liegt. Bedingte Einstiegspunkte befanden sich ursprünglich im Array, jetzt sind sie in den globalen.

Und es stellt sich heraus, dass es einen Zifferntausch gibt, aber Gott bewahre den Tausch. Wenn der Vergleich nur richtig durchgeführt würde. Aber auch bei der Auswechslung gibt es Probleme.

Ich habe gesehen, dass SymbolInfoBid(name,SYMBOL_BID) 0 oder EMPTY_VALUE zurückgeben kann, also lohnt es sich zu prüfen, ob es gültig ist.

Aber ein doppelter Vergleich wenn (A>B && B-A<0) liest sich recht lustig: "Ist es mehr als B ? und selbst wenn ?

Scheuen Sie sich nicht, log zu verwenden - drucken Sie Ihre Variablen aus, um zu sehen, was wirklich vor sich geht

PS/ natürlich sind Variablennamen eine Qual... wie kann man solchen Code lesen und schreiben :-) und vor allem nicht vergessen

 
Maxim Kuznetsov #:

SymbolInfoBid(name,SYMBOL_BID) kann 0 oder EMPTY_VALUE zurückgeben, es lohnt sich zu prüfen, ob es korrekt ist

Aber ein doppelter Vergleich if (A>B && B-A<0) liest sich recht witzig: "Ist es größer als B ? und wenn ja ?

Scheuen Sie sich nicht, log zu verwenden - drucken Sie Ihre Variablen aus, um zu sehen, was wirklich vor sich geht

PS/ natürlich sind Variablennamen eine Qual... wie kann man solchen Code lesen und schreiben :-) und vor allem nicht vergessen

Ich werde einen EA schreiben, bei dem dieser Fehler offensichtlich sein sollte, oder ich werde ihn nicht bemerken. Ich werde später darüber schreiben.

B-A<0 zusätzliche Prüfung, um nicht in die Funktion zu gelangen, aber es werden auch andere Zeichen aus den Daten genommen, die diese Prüfung umgehen.

 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#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();}
      }
   }
 

Die Tickets 6,7,8 haben ihre Daten nicht erhalten. Wenn ich etwas falsch schreibe, wäre ich Ihnen dankbar, wenn Sie mir sagen könnten, was falsch ist. Ich habe jedoch viele Änderungen vorgenommen und der Fehler bleibt bestehen.

Ich sehe das Problem im MT5-Tester im Visualisierungsmodus.

Dateien:
bhshrzc2g7.png  27 kb
 

Ich versuche, das Problem zu lösen.

Folgendes ist mir aufgefallen:

Der Prüfer schreibt keine Protokolle mehr, egal welcher Art. Und an diesem Punkt kommt es zum Crash, die Metamatik bricht zusammen.

2020.08.17 06:12:21 EURGBP 0.90496

2020.08.17 06:12:21 EURGBP KAUFEN 0.90496

2020.08.17 06:47:12 GBPUSD 1,3098

2020.08.17 06:47:12 GBPUSD KAUFEN 1.3098

Gerade um 6:34:15 Uhr werden Geschäfte eröffnet, die nicht eröffnet werden sollten.

Bitte überprüfen Sie meinen Code auf dem Testgerät. Ich habe den Eindruck, dass das Prüfgerät nach den letzten Aktualisierungen nicht mehr richtig funktioniert.


Dateien:
du8ozf0qs9.png  67 kb
Grund der Beschwerde: