新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 664

 
Roman Sharanov:

我不明白如何写指标,问题出在哪里?

我需要画一条线来显示active_1和 active_2 之间的 价格差异。

它的作用

我还需要一个平均的ma_period ma_period 来绘制在这条线上,有一个问题--它没有被显示。

你没有检查复制的结果。

你在每次打勾时都会复制整个历史。

Bars()的数量,而不是rate_total,应该从一个非本地符号(而不是当前图表符号)中复制。

每两分钟,你需要请求,例如,非本地符号的当前条形时间,以保持其历史数据的更新。

使用SimpleMAOnBuffer()来平滑dataBuffer数据。

 
Artyom Trishkin:

你没有检查复制的结果。

你在每次打勾时复制整个历史。

一个非本地的符号(不是当前的图表符号)应该有Bars()数字被复制,而不是rate_total。

每两分钟,你需要请求,例如,非本地符号的当前酒吧时间,以保持其历史数据的更新。

使用SimpleMAOnBuffer()来平滑dataBuffer数据

像这样吗?"完全停止工作

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

问候。

请您告诉我如何在EA开单时记录一些数值,以便它们指的是那个特定的订单,例如在票据上。

 
Andrey Sokolov:

问候。

请您告诉我如何在EA开单时记录一些数值,以便它们指的是那个特定的订单,例如在票据上。

在评论中

 

我想观察一下波动情况。为此,我在tmp1数组中计算收盘与开盘之差,然后用它来绘制感兴趣时期的SMA。


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[])
  {


int i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


编译时没有发生错误,终端没有画出指标,日志显示CADJPY,H1: array out of range in '_t1.mq4' (65,11)

这是计算MathMax-MathMin 之差的一行,可能是什么原因?


 
psyman:

我想观察一下波动情况。为此,我在tmp1数组中计算收盘与开盘之差,然后用它来绘制感兴趣时期的SMA。



编译时没有发生错误,终端没有画出指标,日志显示CADJPY,H1: array out of range in '_t1.mq4' (65,11)

这是计算MathMax-MathMin 之差的一行,可能是什么原因?


我还没有理解这个代码,但如果是这样。

for(i=1; i<rates_total-1; i++)
 

关于交易、自动交易系统和策略测试的论坛

对MQL4初学者的任何问题,对算法和代码的帮助和讨论

Vitaly Muzichenko, 2018.10.16 12:13

没有真正处理好代码,但如果是这样。

for(i=1; i<rates_total-1; i++)

它不起作用。


UPD

将字符串简化到最低限度,tmp1[i]=close[i]; 错误依旧。

 
psyman:

我想观察一下波动情况。为此,我在tmp1数组中计算收盘与开盘之差,然后用它来绘制感兴趣时期的SMA。



编译时没有发生错误,终端没有画出指标,日志显示CADJPY,H1: array out of range in '_t1.mq4' (65,11)

这是计算MathMax-MathMin 之差的线。


数组tmp[]被声明为一个动态数组,初始长度为零。因此出现了错误。

你应该声明这个数组作为计算的指标缓冲区

 
 

关于交易、自动交易系统和策略测试的论坛

对MQL4初学者的任何问题,对算法和代码的帮助和讨论

Alexey Viktorov, 2018.10.16 12:31

数组tmp[]被声明为一个动态数组,初始长度为零。因此出现了错误。

这个数组应该被声明为计算的指标缓冲区


为什么我们不能使用一个动态数组?

在这种情况下,我把收盘价覆盖在那里,没有进行任何计算。

我在哪里可以读到如何使用指示剂缓冲器?