Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 20

 

Решение проблемы автоматического изменения валют кастомного символа после перезагрузки Терминала.

// Сервис корректирует валюты всех кастомных символов.
#property service

bool CorrectCurrency( const string Symb, const string Currency )
{  
  return(SymbolInfoInteger(Symb, SYMBOL_CUSTOM) && 
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_BASE, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_MARGIN, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_PROFIT, Currency));
}

void CorrectSymbols( void )
{
  const string Currency = AccountInfoString(ACCOUNT_CURRENCY);
  
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
    CorrectCurrency(SymbolName(i, false), Currency);
    
  return;
}

void OnStart()
{
  CorrectSymbols();
}
 
Подскажите, при тестирование пользовательского символа цена тика для него моделируется или нет?
 
Irek Gilmutdinov:
Подскажите, при тестирование пользовательского символа цена тика для него моделируется или нет?

Должна моделироваться. Быстрее проверить.

 
Да вот у меня не моделируется, поэтому и спрашиваю.
 
Кто-нибудь может сказать что-нибудь о поднятой мной проблеме?
 
jaffer wilson:
Кто-нибудь может сказать что-нибудь о поднятой мной проблеме?

Вы проверяли на билде 2145?

 

Не моделируется цена тика в тестере на пользовательском символе.

MT5 build 2145.

Создаю кастом GBPCAD_с, все поля унаследованы с GBPCAD:

В него загружаю пользовательскую историю минуток.

Далее бэктест на депозите 100 000 USD, open prices.

Простейший советник опрашивает цену тика и открывает одну позицию:

void OnTick()
  {
//---
  static bool bOnce = true;
  datetime dtTime[1];
  if (bOnce && CopyTime(NULL, 0, 0, 1, dtTime) == 1 && dtTime[0] % 86400 == 0)
    {
    MqlTick stcTick;
    MqlTradeRequest stcRequest;
    MqlTradeResult  stcResult;
    ZeroMemory(stcRequest);
    ZeroMemory(stcResult);
    SymbolInfoTick(_Symbol, stcTick);
    stcRequest.symbol = _Symbol;
    stcRequest.type = ORDER_TYPE_BUY;
    stcRequest.action = TRADE_ACTION_DEAL;
    stcRequest.price = stcTick.ask;
    stcRequest.volume = 1;
    bool bSent = OrderSend(stcRequest, stcResult);
    
    bOnce = false;
    }
  
  PrintFormat("tv=%.5f, USDCAD=%.5f",SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE), 1/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE));
  }

Цена тика не меняется вообще и не соответствует курсу USDCAD на тот момент времени.

История по GBPUSD и USDCAD подгружается только после открытия позиции, но на цену тика это не влияет.

На скриншоте цена тика соответствует курсу USDCAD = 1.3300, а должно быть = 1.0230:


 
Irek Gilmutdinov:

Не моделируется цена тика в тестере на пользовательском символе.

MT5 build 2145.

Создаю кастом GBPCAD_с, все поля унаследованы с GBPCAD:

В него загружаю пользовательскую историю минуток.

Далее бэктест на депозите 100 000 USD, open prices.

Простейший советник опрашивает цену тика и открывает одну позицию:

Цена тика не меняется вообще и не соответствует курсу USDCAD на тот момент времени.

История по GBPUSD и USDCAD подгружается только после открытия позиции, но на цену тика это не влияет.

На скриншоте цена тика соответствует курсу USDCAD = 1.3300, а должно быть = 1.0230:


Скорее всего дело в загрузке истории минуток, а не тиков.
Загрузите тики!

 
Тиков нет, тестирование проводится по ценам открытия.
 
fxsaber:

Решение проблемы автоматического изменения валют кастомного символа после перезагрузки Терминала.

Не нужна ли проверка и ожидание того, чтобы терминал законнектился к серверу? Помню, бывали случаи, что без коннекта валюта депозита неизвестна.

Зачем делать возврат (return) в конце, где он сам по себе происходит? Бессмысленно и не комильфо.

Причина обращения: