Preguntas de un "tonto" - página 51

 

Muchas gracias papaklass, ha funcionado, ahora intentaré entender la diferencia.

 

Por qué el Asesor Experto depende de esta pieza de código:

if(Orders_Total!=0)
  {
   for(i=Orders_Total;i>=0;i--)
     {
      Alert(Orders_Total);
      if(Symbol()==PositionGetSymbol(i))
        {
         OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);
         OrderLot = PositionGetDouble(POSITION_VOLUME);
         StopLoss = PositionGetDouble(POSITION_SL);
         TakeProfit=PositionGetDouble(POSITION_TP);
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            for(i=0;i<12;i++)
              {
               if(Price[i].low<lowest)
                 {
                  lowest=Price[i].low;
                 }
              }
            Alert(lowest);
            SL=NormalizeDouble(lowest-spread-_Point,_Digits);
            if(StopLoss<SL)
              {
               request.action=TRADE_ACTION_SLTP;
               request.symbol=_Symbol;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type=ORDER_TYPE_BUY;
               OrderSend(request,result);
              }
           }
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            for(i=0;i<12;i++)
              {
               if(Price[i].high>highest)
                 {
                  highest=Price[i].high;
                 }
              }
            Alert(highest);
            SL=NormalizeDouble(highest+spread+_Point,_Digits);
            if(StopLoss>SL)
              {
               request.action=TRADE_ACTION_SLTP;
               request.symbol=_Symbol;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type=ORDER_TYPE_SELL;
               OrderSend(request,result);
              }
           }
        }
     }
  }

He insertado las alertas Orders_Total=2 la más baja y la más alta también dan valores adecuados sin embargo el experto se cuelga en este bucle, dando un número infinito de alertas, no se da ningún otro error (relativo a la modificación de la orden).

Por favor, ayude a un novato a entender :)

 

Para un ciclo exterior y dos ciclos interiores, la misma variable de ciclo i, que se convierte en 12 con cada nueva iteración del ciclo exterior

 
stringo:

Para un ciclo exterior y dos ciclos interiores, la misma variable de ciclo i, que se convierte en 12 con cada nueva iteración del ciclo exterior

¡¡¡Gracias!!!
 

¿Puedes arreglar el código? Necesito el precio de apertura de la barra actual. Gracias de antemano.

double Open[], val4;
ArraySetAsSeries(Open,true);
CopyOpen(Symbol_, PERIOD_M15,1,0,Open);
val4 = (Open[ArrayMinimum(Open,0,1)] );

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
abeiks:

¿Puedes arreglar el código? Necesito el precio de apertura de la barra actual. Gracias de antemano.

"Symbol_ " es un parámetro incorrecto, el guión bajo debería estar en la parte delantera

Y el número de elementos copiados es 0.

 

Si conecto un indicador externo a un EA a través de iCustom, no puedo cambiar los parámetros de entrada dinámicamente. iMA está bien, funciona con valores fijos, dos cadenas intercambiables, lo pongo en OnTick(), el período de MA se recalcula.

ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);
   
ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE); 

Si este es el caso, lo que no se puede cambiar en los externos, entonces ¿por qué tengo que incrustar el código en mi EA?

Lo siento, funciona, pero tarda mucho más.

 
Karlson:

Si conecto un indicador externo a un EA a través de iCustom, no puedo cambiar los parámetros de entrada dinámicamente. iMA está bien, funciona con valores fijos, dos cadenas intercambiables, lo pongo en OnTick(), el período de MA se recalcula.

Si este es el caso, lo que no se puede cambiar en el EA, entonces ¿cómo podemos incrustar el código en el EA?

"...no puedo cambiar dinámicamente los parámetros de entrada" del indicador?

Reproducir los parámetros de entrada del indicador como parámetros de entrada del Asesor Experto. Y es mejor obtener la manija una vez en la inicialización del Asesor Experto en lugar de en cada nueva garrapata.

 
Yedelkin:

"...no puede cambiar dinámicamente los parámetros de entrada" del indicador?

Reproducir los parámetros de entrada del indicador como parámetros de entrada del Asesor Experto. Y es mejor obtener la manija una vez al inicializar el Asesor Experto que en cada nuevo tick.

Tengo un período de la media varía de ATR durante el trabajo de la EA, por lo que el mango de la media se coloca en OnTick() . De hecho, el parámetro de entrada para la EA es el período de ATR, no cambia.

int OnInit()
  {
  atr_handle = iATR(_Symbol,0, ATR);  //инициализируем хэндл ATR
  }

void OnTick()
  {
     CopyBuffer(atr_handle,0,0,5,atr);   //заполняем массив ATR
     ArraySetAsSeries(atr,true);

     MA=(int)(atr[1]*kMA);                 //рассчитываем период требуемый для средней от ATR

   //ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);  // получаем хэндл средней
   
     ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE);

     CopyBuffer(ma_handle,0,0,5,ma);     //заполняем массив средней
     ArraySetAsSeries(ma,true); 
  }
 
Karlson:

Tengo un periodo de media que cambia de ATR mientras el EA se está ejecutando, por lo que el mango de la media se coloca en OnTick().De hecho el parámetro de entrada al EA es el periodo de ATR.No cambia.ATR en OnInit().

Lo he entendido aproximadamente. Pero es difícil obtener el asa del indicador cada vez en un nuevo tick. ¿Y qué se hace con el mango anterior?
Razón de la queja: