Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 224

 
En el Asesor Experto, las primeras líneas de
OnTick()

Después de estas líneas, se ejecutará más código una vez por vela. En el momento de su formación.

¿Llamas a este indicador desde el EA, según tengo entendido?

 
Aleksei Stepanenko:
En el Asesor Experto, las primeras líneas de

Después de estas líneas, se ejecutará más código una vez por vela. En el momento de su formación.

¿Estás llamando a este indicador desde el EA, según tengo entendido?

Bueno, en realidad, inserto este indicador en otro indicador que envía la señal a otro programa. Es decir, no hay ningún Asesor Experto. Es decir, debería insertarse en alguna parte del propio indicador, pero ¿cómo?
 
¿Qué programa abre las ofertas? Es un asesor. ¿No es así?
 
Aleksei Stepanenko:
¿Y qué programa abre el trato? Es el Asesor Experto. ¿No es así?

Ah, bueno, tal vez... Pero luego las cosas parecen complicarse mucho más... No hay manera de encajarlo en este código, ¿verdad? Y tampoco hay código en el segundo indicador.

OnTick()
¿Cómo diablos funciona eso...:)))))
 
Puede intentar otra forma, en la que llame a este indicador a través de iCustom, ponga 1 al final de esta función en lugar de 0 también.
 
Por cierto, el indicador sigue dibujando muchas flechas, pero cuando recargo el gráfico, sólo quedan algunas. :( Como si el indicador se estuviera guardando en el historial, como si mirara cómo comercio bien, pero en tiempo real es completamente diferente. :(
 
ElenkaVladi:
Por cierto, el indicador sigue sacando muchas flechas también,

¿Sí? Hmm, le echaré un vistazo más tarde.

 
Aleksei Stepanenko:
Puede intentar otra forma, en la que llame a este indicador a través de iCustom, ponga 1 al final de esta función en lugar de 0 también.

¿Te refieres a esto?

if (IndicatorName != "") {
      up = iCustom(NULL, 0, IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom(NULL, 0, IndicatorName, IndiBufferPut, SignalType);
if (IndicatorName != "") {
      up = iCustom(NULL, 1, IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom(NULL, 1, IndicatorName, IndiBufferPut, SignalType);

¿Así?

 
Aleksei Stepanenko:

¿Sí? Hmm, le echaré un vistazo más tarde.

Tal vez sea ese mensaje. ¿No deberíamos hacer lo que dice?

https://www.mql5.com/ru/forum/160587/page223#comment_19618305

De todos modos, muchas gracias por juguetear con nosotros aquí... :)))

Adjuntamos los archivos para una mejor comprensión de la situación.

Вопросы от начинающих MQL4 MT4 MetaTrader 4
Вопросы от начинающих MQL4 MT4 MetaTrader 4
  • 2020.11.29
  • www.mql5.com
Если у Вас вопросы по MQL4, MT4, MetaTrader 4, пожалуйста пишите в этой теме. Особенно когда вопросы касаются торговых функций...
Archivos adjuntos:
 
ElenkaVladi:

Aquí está el código de trabajo:

//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 2
#property  indicator_color1  Blue
#property  indicator_color2  Red
//---- indicator parameters
extern int  period = 4; //12
extern int  shift  = 0; //сдвиг по бару
//---- indicator buffers
double BufferUp[],BufferDn[];
double Ma[],MaOn[];

datetime LastTime=0;
int i, st=5;

int OnInit()
   {
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_ARROW,2);
   SetIndexArrow(0,233);
   SetIndexStyle(1,DRAW_ARROW,2);
   SetIndexArrow(1,234);

   SetIndexBuffer(0,BufferUp);//стрелка синяя верх
   SetIndexBuffer(1,BufferDn);//стрелка красная вниз
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("T3MA-ALARM ("+period+")");
   
   ArraySetAsSeries(Ma,true);
   ArraySetAsSeries(MaOn,true);
//---- initialization done
   if(Digits==3 || Digits==5) st*=10;
   return(INIT_SUCCEEDED);
   }
   
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {
   if(rates_total<=MathMax(period,shift)) return(0);
   int limit=rates_total-prev_calculated;   
   if(prev_calculated>0) limit++;

   if(LastTime!=time[1])
      {
      LastTime=time[1];
      ArrayCopy(Ma,Ma,rates_total-ArraySize(Ma),0,WHOLE_ARRAY);
      ArrayCopy(MaOn,MaOn,rates_total-ArraySize(MaOn),0,WHOLE_ARRAY);
      }

   for(i=limit; i>=1; i--) Ma[i]=iMA(NULL,0,period,0,MODE_EMA,PRICE_CLOSE,i);
   for(i=limit; i>=1; i--) MaOn[i]=iMAOnArray(Ma,rates_total,period,0,MODE_EMA,i);
      
   for(i=limit; i>=1; i--)
      {
      if(MaOn[i+shift]-MaOn[i+1+shift]<0 && MaOn[i+1+shift]-MaOn[i+2+shift]>0){BufferDn[i+1]=high[i+1]+st*Point;}
      if(MaOn[i+shift]-MaOn[i+1+shift]>0 && MaOn[i+1+shift]-MaOn[i+2+shift]<0){BufferUp[i+1]=low[i+1]-st*Point;}
      }
   return(rates_total);
   }
Observe que la flecha se dibuja hacia atrás BufferDn[i+1]=... Esto es lamentable.
Razón de la queja: