Как импортировать бид/аск из другой валютной пары? - страница 3

 
HosseinKOGO:

В чем проблема?

Поскольку ваши Ask2 и Bid2 равны 0, почему бы не добавить эту строку после одной из них?

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

И посмотреть, есть ли полезная информация?

 
HosseinKOGO: Я пробую GBPAUD в качестве открытого графика и GBPUSD в качестве второй пары.

Вы вызывали download_history для вашей "второй пары", второго ТФ?

 
William Roeder:

Вы вызывали 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 в качестве входа SecondPair и сделал этот бэктест на графике GBPAUD.

 
Seng Joo Thio:

Поскольку ваши Ask2 и Bid2 равны 0, почему бы не добавить эту строку после одной из них?

И посмотреть, есть ли полезная информация?

Я добавил эту строку, о которой вы упомянули, в функцию start сразу после определения Ask2,Bid2, когда я отключил строку ниже, чтобы позволить свечам стартовать и график продолжился.
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

Ошибка была 4106, что означает "Неизвестный символ".

Затем я отключил и строку ниже:

download_history(SecondPair,PERIOD_H4);
И получил сначала ошибку 4066 (Запрашиваемые исторические данные в состоянии обновления.) Затем она превратилась в 4106 до конца бэктестинга.
 
HosseinKOGO:
Я добавил эту строку, которую вы упомянули, в функцию start сразу после определения Ask2,Bid2, когда я отключил строку ниже, чтобы свечи запустились и график продолжил движение.

Ошибка была 4106, что означает "Неизвестный символ".

Затем я отключил и строку ниже:

И получил сначала ошибку 4066 (Запрашиваемые исторические данные в состоянии обновления.) Затем она превратилась в 4106 до конца бэктестинга.

Я подозреваю, что имя вашего символа не просто "GBPUSD"... в нем могут быть лишние символы... вы пробовали это:

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

проверить, что имя символа состоит только из шести заглавных букв?

 
Seng Joo Thio:

Я подозреваю, что имя вашего символа не просто "GBPUSD"... в нем могут быть лишние символы... вы пробовали это:

проверить, что имя символа состоит только из шести заглавных букв?

Моя функция symbol() показывает "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 будут нулевыми для символов, не включенных в мой мониторинг рынка... но как только я включу их в мой мониторинг рынка, я смогу получить их bid и ask. Нет необходимости беспокоиться об исторических данных.

 
Seng Joo Thio:

Кажется, я нашел причину, по которой вы получаете нули... Я вставил эти строки в скрипт и запустил его на своем MT4:

И я понял, что Ask2 и Bid2 будут нулевыми для символов, не включенных в мой мониторинг рынка... но как только я включу их в мой мониторинг рынка, я смогу получить их bid и ask. Нет необходимости беспокоиться об исторических данных.

У меня есть эти символы в окне наблюдения за рынком в левом верхнем углу MT4.
Но если вы имеете в виду, что я должен включить их в свой код, то как вы включили их в код? (Если я неправильно понял, пожалуйста, объясните мне, так как я не такой профессионал :D)

 
HosseinKOGO:

У меня есть эти символы в окне просмотра рынка, в верхнем левом углу MT4.
Но если вы имеете в виду, что я должен включить их в свой код, то как вы включили их в код? (Если я неправильно понял, пожалуйста, объясните мне, так как я не такой профессионал :D)

Не кодом.
Поскольку они уже находятся в вашем окне просмотра рынка, все становится еще более странным.
С какого брокера вы скачали mt4? Я хочу установить его для тестирования.
 
Большое спасибо за вашу реакцию,

Действительно, я не кодер, но я пробовал кодировать несколько советников. Моя деятельность связана с изобретательностью и системой, поэтому я придумал 600-700 мыслей для создания советников и создал их до сих пор. Я просто могу кодировать простых советников и не привык к вашему кодированию в ненормальном состоянии...

Я вставил эти коды в свой советник, но он возвращает только эту ошибку: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA! GBPAUD,H4: iTime(GBPUSD,240) Failed: 0

Я пытаюсь использовать GBPAUD в качестве моей открытой диаграммы и GBPUSD в качестве второй пары.

В чем проблема?
Причина обращения: