初学者的问题 MQL4 MT4 MetaTrader 4 - 页 224

 
在专家顾问中,第一行是
OnTick()

在这些行之后,进一步的代码将在每个蜡烛上执行一次。在其形成的时刻。

按照我的理解,你从EA中调用这个指标?

 
Aleksei Stepanenko:
在专家顾问中,第一行是

在这些行之后,进一步的代码将在每个蜡烛上执行一次。在其形成的时刻。

根据我的理解,你是在EA中调用这个指标?

好吧,实际上,我把这个指标插入另一个指标中,该指标将信号发送到另一个程序。就是说,没有专家顾问。也就是说,它应该插在指标本身的某个地方,但如何插?
 
哪个方案能打开交易?它是一个顾问。不是吗?
 
Aleksei Stepanenko:
那么什么程序可以打开交易呢?它就是专家顾问。不是吗?

啊,好吧,也许...但随后事情似乎变得更加复杂......没有办法在这个代码中嵌入它,是吗?而第二个指标代码中也没有代码。

OnTick()
这到底是怎么做到的......:)))))
 
你可以尝试另一种方法,即通过iCustom调用这个指标,在这个函数的末尾也放1而不是0。
 
顺便说一下,该指标仍然画了很多箭头,但当我重新加载图表时,只剩下一些箭头。:( 就像指标在历史上保存自己,就像看我如何交易得好,但在实时中却完全不同。:(
 
ElenkaVladi:
顺便说一下,这个指标也仍然吸引了很多箭头。

是吗?嗯,我稍后会看一看。

 
Aleksei Stepanenko:
你可以尝试另一种方法,即通过iCustom调用这个指标,在这个函数的末尾也放1而不是0。

你是说像这样吗?

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);

像这样吗?

 
Aleksei Stepanenko:

是吗?嗯,我稍后会看一看。

也许是这个消息。我们难道不应该按它说的做吗?

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

总之,非常感谢你在这里和我们一起摆弄......:))

附上文件,以便更好地了解情况。

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

下面是工作代码。

//---- 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);
   }
注意,箭头是向后画的 BufferDn[i+1]=...。这是很不幸的。