用户工具

站点工具


invest:mt5

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
invest:mt5 [2023/11/13 11:33] admininvest:mt5 [2024/06/03 12:54] (当前版本) admin
行 6: 行 6:
  
  
-===== MT5编程 =====+===== MT5资源、编程参考 =====
  
-=== 0到底代表最左柱还是最右柱? ===+[[https://www.mql5.com/en/code/19003 | Expert - 编程控制EA停止、启动]]
  
-<wrap hi>编程中非常重要的一个问题:在 EA, Indicator, Script 中,0到底代表最左侧蜡烛还是最右侧蜡烛?</wrap> 
  
-分下面两种情况:+===== MT5编程 =====
  
-1,Indicator 编程中,0代表最左+==== 0到底代表最左柱还是最右柱? ====
  
-**在自定义 Indicator 的编程中,预定义函数 OnCalculate 参数中的 close[0] 是图表最左侧蜡烛,close[rates_total-1] 是图表最右侧蜡烛。** 因此,如果在自定义 Indicator 中使用其他指标,为保持计数方向统定义 XxxBuffer 的时候,不进行 ArraySetAsSeries(XxxBuffertrue); 的设置(不设置XxxBuffer为时间序列),那么在 BarsCalculated(XxxHandle) => CopyBuffer(XxxHandlen, 0, count, XxxBuffer) 之后,XxxBuffer 的序列同样也是0代表最左侧,rates_total-1 代表最右侧+<wrap hi>编程中非常重要的一个问题:在 EAIndicatorScript 中,0到底代表最左侧蜡烛还是最右侧蜡烛?</wrap>
  
-2,EA 和 Script 编程中,0代表最右侧+=== EA 和 Script 编程 ===
  
-在 EA 和 Script 的编程中,为计算方便起见,为 Indicator 和 MqlRates 定义的 XxxBuffer[] 和 rates[],在定义后进行+为计算方便起见,为保存 Indicator 数据和 MqlRates 数据定义的 XxxBuffer[] 和 rates[],在定义后进行
   * ArraySetAsSeries(XxxBuffer, true);   * ArraySetAsSeries(XxxBuffer, true);
   * ArraySetAsSeries(rates, true);   * ArraySetAsSeries(rates, true);
 的设置,使 XxxBuffer 和 rates 成为时间序列,0代表最右侧蜡烛(the current bar)。 的设置,使 XxxBuffer 和 rates 成为时间序列,0代表最右侧蜡烛(the current bar)。
 +
 +=== Indicator 编程 ===
 +
 +根据计算方便程度而定:
 +
 +1, 当从左到右计算比较方便的时候
 +
 +默认情况下,预定义函数 OnCalculate 参数中的 close[0] 是图表最左侧蜡烛,close[rates_total-1] 是图表最右侧蜡烛。因此,如果从左到右计算比较方便的时候,为保存其他 Indicator 数据而定义的 XxxBuffer,不进行 ArraySetAsSeries(XxxBuffer, true) 的设置(不设置XxxBuffer为时间序列)。那么在 BarsCalculated(XxxHandle) => CopyBuffer(XxxHandle, n, 0, count, XxxBuffer) 之后,XxxBuffer 中的序列,跟 OnCalculate 参数中的 close[] 同样也是0代表最左侧,rates_total-1 代表最右侧。
 +
 +2, 当从右到左计算比较方便的时候
 +
 +在预定义函数 OnCalculate 的开头部分,先把 time[], close[] 等设置为时间序列(最右侧最新bar为0),在编程中使用到的保存其他 Indicator 数据的 XxxBuffer,也设置为时间序列:
 +  * ArraySetAsSeries(time, true);
 +  * ArraySetAsSeries(close, true);
 +  * ArraySetAsSeries(XxxBuffer, true);
 +
 +<wrap em>注意:如果在 Indicator 的编程中用到其他 Indicator,需要在 indicator_buffers N 里计入该 Indicator 的输出值,并且设置 SetIndexBuffer(n, XxxBuffer, INDICATOR_CALCULATIONS) ,否则通过 CopyBuffer(XxxHandle, 0, 0, n, XxxBuffer) 复制输出值的时候 XxxBuffer 的要素个数将与 close[] 的要素个数不匹配。</wrap>
 +
  
invest/mt5.1699846423.txt.gz · 最后更改: 2023/11/13 11:33 由 admin