初学者的问题 MQL5 MT5 MetaTrader 5 - 页 93

 
ryzhak.vladimir:

你好!这里有一个从2012年1月1日到2012年12月31日的欧元兑美元30分钟条形图的收盘价阵列。我用函数CopyClose 得到了它。但是,如果我打开图表,CopyClose[0]不等于终端中31.12.2012最后一棒的收盘价。请告诉我我做错了什么。为什么CopyClose的价格和图表上的实际价格不一致?

在你调用Close_buf[0]之前,你必须使用ArraySetAsSeries。一次,在EA/Script/指示器代码的整个操作过程中。

ArraySetAsSeries(Close_buf,true);
 
fyords:

ArraySetAsSeries 必须在调用Close_buf[0]之前使用。一次,在EA/脚本/指示器代码的整个期间。

它仍然不匹配,它显示的是1.32308,而不是1.31964(2012年的最后一栏收盘价)。

//+------------------------------------------------------------------+
//|                                                    simpleBet.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
double Close_buf[];//динамический массив для хранения значений закрытия баров
string my_symbol = "EURUSD";//валютная пара
ENUM_TIMEFRAMES my_timeframe = PERIOD_M30;//таймфрейм
datetime testTimeStart = D'2012.01.01';
datetime testTimeEnd = D'2012.12.31';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---    
     CopyClose(my_symbol,my_timeframe,testTimeStart,testTimeEnd,Close_buf); 
     ArraySetAsSeries(Close_buf,true);
     Print(Close_buf[0]);
  }
//+------------------------------------------------------------------+
 
ryzhak.vladimir:

仍然不匹配,显示的是1.32308,而不是1.31964(2012年最后一栏的收盘价)。

您设置
datetime testTimeEnd = D'2012.12.31';
而如果你设定
datetime testTimeEnd = D'2012.12.31 23:59:59';
 
是的,它起作用了,谢谢你!尽管仍然不清楚为什么只有在给出确切日期时价格才会匹配,甚至精确到秒。
 
ryzhak.vladimir:
是的,它起作用了,谢谢你!虽然仍然不清楚为什么只有在指定精确日期到秒的情况下,价格才会匹配。

可能是因为2012.12.31默认为2012.12.31 00:00:00,而不是2012.12.31 24:00:00

 
引用关于CopyBuffer函数的文档:"复制的数据元素(指标缓冲区 的索引为buffer_num)从现在的起始位置算起,到过去,即起始位置等于0意味着当前栏(当前栏的指标值)。"但是在实践中,为了让当前的条形图出现在第0个元素中,我们必须应用ArraySetAsSeries(Close_buf,true)。但在文档中写到,默认情况下,它复制第0个元素中的最后一个小节。为什么会有这样的区别?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir: 引用文档中关于CopyBuffer函数的内容:"要复制的数据元素(指标缓冲区 的索引为buffer_num)从现在的起始位置算起,到过去,即起始位置等于0意味着当前的条形(当前条形的指标值)。"但是在实践中,为了让当前的条形图出现在第0个元素中,我们必须应用ArraySetAsSeries(Close_buf,true)。但在文档中写到,默认情况下,它复制第0个元素中的最后一个小节。为什么会有这样的区别?
更仔细地看一下这个数字。'start_pos'项被复制到哪里了?
 
面临着心理方向的问题。
我写了一个趋势EA,它似乎是成功的。现在我正在写一个平坦的EA和...这已经是这个EA第5次被还原成以前的算法了,就好像我只能用一种算法一样。一切开始都是 "新的",但在算法结构化之后,我开始写一个EA,开始以各种可能的方式对第一个(成功的)EA进行调整。

如果有人遇到过这样的事情--告诉我如何 "摆脱 "气势汹汹的算法,这只会使单位的存款减少。
 
Lester: 如果你面对这样的废话--告诉我如何 "摆脱 "气势汹汹的算法,这在单位只是耗费了存款。
我没有遇到过这样的事情,但对于一般的注意力转移,可以尝试研究其他人的算法。
 
Lester:

面临着心理方向的问题。
我写了一个趋势EA,它似乎是成功的。现在我正在写一个平坦的EA和...这已经是这个EA第5次被还原成以前的算法了,就好像我只能用一种算法一样。一切开始都是 "新的",但在算法结构化之后,我开始写一个EA,开始以各种可能的方式对第一个(成功的)EA进行调整。

如果有人遇到过这样的事情--告诉我如何 "摆脱 "这个算法,这只会使单位的存款减少。
你的交易员不是心理问题,而是系统问题--缺乏区分趋势和平坦的精确迹象。一旦你理解了这一点,一切都会为你解决。