Errores, fallos, preguntas - página 3076

 
Vladimir Karputov #:

Primera pregunta: ¿escribiste tú mismo este código y diste estos nombres de variables?

Sí.

 
Yury Lemeshev #:

Sí.

Nombres muy extraños - parece que se ha descompuesto. Por favor, muestre más de su otro código - código que escribió usted mismo.

 
Vladimir Karputov #:

Nombres muy extraños - parece que se ha descompuesto. Por favor, muestre más de su otro código - código que escribió usted mismo.

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

Nombres muy extraños - parece que se ha descompuesto. Por favor, muestre más de su otro código - el código que usted mismo escribió.

Divido todo en mi Asesor Experto en funciones, iFunctionExample(), y las variables iFE1,iFE2,iFE3 para int, y dFE1, dFE2, dFE3 para double. Así me resulta más fácil entender de dónde viene todo.

 
Yury Lemeshev #:

En mi Asesor Experto, divido todo por funciones, iFunctionExample(), y las variables iFE1,iFE2,iFE3 para int, y dFE1, dFE2, dFE3 para double. Para mí es más fácil entender lo que sale de esta manera.

Bien. Gracias por esta aclaración y por empezar a poner el código bien.

 
Yury Lemeshev #:

Trabajo con dos o más pedidos al mismo tiempo. Rejilla. Compruebo el precio por debajo o por encima del punto de entrada condicional. Los puntos de entrada condicionales estaban originalmente en el array, ahora están en los globales.

Y resulta que hay un intercambio de dígitos, pero Dios no permita el intercambio. Si la comparación se realizara correctamente. Pero los fallos de sustitución también.

He visto que SymbolInfoBid(name,SYMBOL_BID) puede devolver 0 o EMPTY_VALUE, por lo que conviene comprobar si es válido.

Pero una doble comparación si (A>B && B-A<0) se lee de forma bastante graciosa: "¿Es más que B ? y aún así ?

no tenga miedo de usar el registro - imprima sus variables para ver lo que realmente está pasando

PS/ por supuesto los nombres de las variables son un dolor...como se lee y se escribe ese código :-) y lo más importante recordar

 
Maxim Kuznetsov #:

SymbolInfoBid(nombre,SYMBOL_BID) puede devolver 0 o EMPTY_VALUE , conviene comprobar si es correcto

Pero una doble comparación si (A>B && B-A<0) se lee de forma bastante graciosa: "¿Es mayor que B ? y aún así ?

no tenga miedo de usar el registro - imprima sus variables para ver lo que realmente está pasando

PS/ por supuesto los nombres de las variables son un dolor...como se lee y se escribe ese código :-) y lo más importante recordar

Escribiré un EA en el que este error debería ser obvio, o no me lo encontraré. Escribiré sobre ello más adelante.

B-A<0 comprobación adicional para evitar entrar en la función, pero también se toman otros caracteres de los datos que se saltan esta comprobación.

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

Las entradas 6,7,8 no han recibido sus datos. Si estoy escribiendo algo mal, le agradecería que me dijera qué es lo que está mal. Sin embargo, he probado muchos cambios y el error persiste.

Veo el problema en el probador de MT5 en modo de visualización.

Archivos adjuntos:
bhshrzc2g7.png  27 kb
 

Tratando de resolver el problema.

Me di cuenta de lo siguiente:

El probador deja de escribir registros, de cualquier tipo. Y en este punto hay un choque, la metamática se derrumba.

2020.08.17 06:12:21 EURGBP 0.90496

2020.08.17 06:12:21 EURGBP COMPRAR 0.90496

2020.08.17 06:47:12 GBPUSD 1.3098

2020.08.17 06:47:12 GBPUSD COMPRAR 1.3098

Justo a las 6:34:15 hay una apertura de operaciones que no debería abrirse.

Por favor, compruebe mi código en el probador. Me parece que el probador no funciona correctamente después de las últimas actualizaciones.


Archivos adjuntos:
du8ozf0qs9.png  67 kb
Razón de la queja: