如何从其他货币对导入买入/卖出价? - 页 3

 
HosseinKOGO:

问题出在哪里?

既然你的Ask2和Bid2都是0,为什么不在其中一个后面加上这一行?

Print("MarketInfo Error = ", GetLastError());

然后看看是否有什么有用的信息?

 
HosseinKOGO: 我正在尝试将GBPAUD作为我的开放图表,将GBPUSD作为我的第二对。

你是否为你的 "第二对"、第二个TF调用了download_history

 
William Roeder:

你是否为你的 "第二对 "即第二个TF调用了download_history

这是我的全局区域。
extern string SecondPair;
double Ask2,Bid2;

#define  HR2400 PERIOD_D1 * 60    // 86400 = 24 * 3600
int      TimeOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( int(when % HR2400 ));            }
datetime DateOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( when - TimeOfDay(when) );   }
#define  SYMBOL string
#define  THIS_SYMBOL ""
bool  download_history(ENUM_TIMEFRAMES period=PERIOD_CURRENT){
   return download_history(_Symbol, period); 
}
bool  download_history(
      SYMBOL            symbol=THIS_SYMBOL,     ///< The symbol required.
      ENUM_TIMEFRAMES   period=PERIOD_CURRENT   /**< The standard timeframe.*/){
   if(symbol == THIS_SYMBOL)     symbol = _Symbol;
   if(period == PERIOD_CURRENT)  period = _Period;
   datetime today = DateOfDay();
   ResetLastError();
   datetime other = iTime(symbol, period, 0);
   if(_LastError == 0 
   && today == DateOfDay(other)) return true;   
   if(_LastError != ERR_HISTORY_WILL_UPDATED
   && _LastError != ERR_NO_HISTORY_DATA
     ) Print(StringFormat("iTime(%s,%i) Failed: %i", symbol, period,_LastError));
   return false;
}
.
.
.

这里是我的启动函数。

   download_history(SecondPair,PERIOD_H4);
   while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }
   Ask2=SymbolInfoDouble(SecondPair,SYMBOL_ASK);
   Bid2=SymbolInfoDouble(SecondPair,SYMBOL_BID);
   Comment(Ask2,Bid2);
.
.
.

其中,我把GBPUSD作为第二对的输入,并在GBPAUD图表上做这个回测。

 
Seng Joo Thio:

既然你的Ask2和Bid2都是0,为什么不在其中一个后面加上这一行?

然后看看是否有任何有用的信息?

我在定义Ask2,Bid2之后,在我的启动函数中加入了你提到的这一行,当时我已经禁用了下面这一行,以便让蜡烛开始,图表继续进行。
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

错误是4106,意思是 "未知符号"。

然后我把下面这一行也禁用了。

download_history(SecondPair,PERIOD_H4);
起初得到的错误是4066(要求的历史数据处于更新状态),然后在后面的回测 中变成了4106。
 
HosseinKOGO:
我在定义了Ask2,Bid2之后,在我的启动函数中加入了你提到的这一行,当时我已经禁用了下面这一行,以便让蜡烛开始,图表继续进行。

错误是4106,意思是 "未知符号"。

然后我也禁用了下面这一行。

一开始得到的错误是4066(要求的历史数据处于更新状态),然后在后面的回测 中变成4106。

我怀疑你的符号名称不只是 "GBPUSD"......它可能在某个地方有额外的字符......你有没有试过这个。

Print("Symbol Name = ", Symbol());

之前,以验证符号名称只是六个大写字母?

 
Seng Joo Thio:

我怀疑你的符号名称不只是 "GBPUSD"......它可能在某个地方有额外的字符......你有没有试过这个。

之前,以验证符号名称只是六个大写字母?

我的符号()函数 显示 "GBPAUD",因为我把它放在GBPAUD图表上。
尽管我使用的是正常的模拟账户进行回溯测试,但确切的说是6个大写字母。然而,我已经尝试了你的建议,得到了预期的结果。

当我编译代码时,我也有一个警告。"隐式枚举转换",我在下面强调了这一点。这到底是什么意思?

#define  HR2400 PERIOD_D1 * 60    // 86400 = 24 * 3600
int      TimeOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( int(when % HR2400 ));            }
datetime DateOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( when - TimeOfDay(when) );   }
#define  SYMBOL string
#define  THIS_SYMBOL ""
bool  download_history(ENUM_TIMEFRAMES period=PERIOD_CURRENT){
   return download_history(_Symbol, period); 
}
bool  download_history(
      SYMBOL            symbol=THIS_SYMBOL,     ///< The symbol required.
      ENUM_TIMEFRAMES   period=PERIOD_CURRENT   /**< The standard timeframe.*/){
   if(symbol == THIS_SYMBOL)     symbol = _Symbol;
   if(period == PERIOD_CURRENT)  period = _Period;
   datetime today = DateOfDay();
   ResetLastError();
   datetime other = iTime(symbol, period, 0);
   if(_LastError == 0 
   && today == DateOfDay(other)) return true;   
   if(_LastError != ERR_HISTORY_WILL_UPDATED
   && _LastError != ERR_NO_HISTORY_DATA
     ) Print(StringFormat("iTime(%s,%i) Failed: %i", symbol, period,_LastError));
   return false;
}
 

我想我找到了你得到零的原因......。我把这几行放在一个脚本中,并在我的MT4上运行它。

   for (int i=SymbolsTotal(false)-1; i>=0; i--)
   {
      string SName = SymbolName(i,false);
      Ask2=SymbolInfoDouble(SName,SYMBOL_ASK);
      Bid2=SymbolInfoDouble(SName,SYMBOL_BID);
      Print (SName, " Ask = ", Ask2, ", Bid = ", Bid2);
   }

我意识到,对于不在我的市场观察中的符号,Ask2和Bid2将是零......但一旦我把它们纳入我的市场观察,我就可以得到它们的买入和卖出。没有必要为历史数据而烦恼。

 
Seng Joo Thio:

我想我找到了你得到零的原因......。我把这几行放在一个脚本中,并在我的MT4上运行它。

我意识到,对于不在我的市场观察中的符号,Ask2和Bid2将是零......但一旦我把它们纳入我的市场观察,我就可以得到它们的买入和卖出。没有必要为历史数据而烦恼。

我的MT4左上角 的市场观察窗口里有这些符号。
但是,如果你的意思是我应该把它们包括在我的代码中,你是如何通过代码包括它们的?(如果我理解错了,请澄清我,因为我不是那么专业。)

 
HosseinKOGO:

我的MT4左上角 的市场观察窗口里有这些符号。
但是,如果你的意思是我应该把它们包括在我的代码中,你是如何通过代码包括它们的?(如果我理解错了,请澄清我,因为我不是那么专业。)

不是代码。
既然它们已经出现在你的市场观察窗口,事情就变得更加奇怪了。
你从哪个经纪商那里下载的mt4?我想安装它来测试。
 
非常感谢你的反应。

事实上,我并不是编码员,但我曾尝试过编码一些EA。我的活动与创造性和系统有关,所以我构思了600-700个想法来制作EA,并将它们构建到现在。我只是会编码简单的EA,我不习惯你的非正常状态的编码......

我已经把这些代码放到我的EA中,但是它只返回了这个错误: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA!GBPAUD,H4: iTime(GBPUSD,240) 失败: 0

我尝试将GBPAUD作为我的开盘图,GBPUSD作为我的第二个货币对。

问题出在哪里?