Ошибки, баги, вопросы - страница 446

 
voix_kas:

Код ошибки: 4756. Видно на скрине.

1. Еще раз повтарю свой вопрос - Список символов по которым предполагается торговля селективно выбран (т.е. по всем символам которые собирается торговать мульт была выполнена команда SymbolSelect со вторым параметром true)?

Советую в блоке инициализации произвести выбор всех символов которые требуется при помощи SymbolSelect и проверить наличие данной ошибки после такой модификации.

2. Разработчикам:

а) Спрашивается с какого перепоя в список символов терминала в явном виде (можно посмотреть на скрине выше) попадают символы которые не были выбраны при помощи SymbolSelect (при условии что по ним вообще никаких действия кроме сбора определенной информации не проводилось)?

б) не кажется ли Вам сстранным что вот такие казалось бы безобидные вещи как SymbolsTotal(false) и SymbolName(index,false) приводят к явному отображению символов в окне визуализации.

Насколько я понимаю должно быть так - Нет SymbolSelect нет символа среди отображаемых в MarketWatch.

в) Насколько я понимаю в тестере правильно будет окружение грузить по всем опрашиваемым символам, а отображать только те которые выбраны при SymbolSelect либо по которым пользователь пытается получить цены или любую другую существенную информацию.

К примеру если я пытаюсь определить синхронизирован какой либо символ или насколько глубока его история на сервере зачем его тут же помещать в MarketWatch с признаком выбора?

 
voix_kas:

А как поймать код ошибки в обозначенный Вами момент? Я регистрирую ошибку в последней строке приведенного кода.

Данная ошибка не появляется, если прямо перед этим кодом добавить следующую сроку:

 

Например так:

double price=SymbolInfoDouble(Instrumet, SYMBOL_ASK);
if(price==0.0)
  {
   Print("Ай-яй-яй. Ошибка ",GetLastError());
   return(false);
  }
TradeRequest.price = price;
 
Interesting:

2. Разработчикам - Спрашивается с какого перепоя в список символов терминала в явном виде (можно посмотреть на скрине выше) попадают символы которые не были выбраны при помощи SymbolSelect (при условии что по ним вообще никаких действия кроме сбора определенной информации не проводилось)?

Тестер МТ5 использует очень точное моделирование торговых условий, включая максимально точную конвертацию профитов в валюту баланса.

Это означает, что при работе с кроссами приходится моделировать и базовую валютную пару для пересчета профита. То есть, при работе на некоторых инструментах (кроссах) идет двойной объем моделирования, чтобы в любую секунду расчет был абсолютно точный и повторяемый.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Interesting
Разумеется. Данный код стоит перед всеми последующими действиями:

if (SymbolInfoInteger(Instrumet, SYMBOL_SELECT) || SymbolSelect(Instrumet, true))
{
  ...
}

Если условие не выполняется, дальнейших действий с данным инструментом не происходит.

На счет "SymbolSelect" при инициализации... Т.е. Вы считаете, что первый вызов ( SymbolSelect(Instrumet, true) ) не подгружает инструмент? Требуют, как минимум, два?

Просто я сначала перебираю символы на наличие (инициализирую). А потом уже в OnTick|OnTimer произвожу явный выбор, если инструмент не был ранее выбран.

uncleVic

Спасибо. Именно так сейчас и обхожу данную ошибку.
Если можно, поясните, пожалуйста, по каким причинам возникает нулевая цена? И может ли такое быть в жизни (читай, в режиме "реал-тайм", а не только при тестировании)? 

 
voix_kas:

Interesting
Разумеется. Данный код стоит перед всеми последующими действиями:

Если условие не выполняется, дальнейших действий с данным инструментом не происходит.

На счет "SymbolSelect" при инициализации... Т.е. Вы считаете, что первый вызов ( SymbolSelect(Instrumet, true) ) не подгружает инструмент? Требуют, как минимум, два?

Просто я сначала перебираю символы на наличие (инициализирую). А потом уже в OnTick|OnTimer произвожу явный выбор, если инструмент не был ранее выбран.


Странно, или я чего-то не понимаю или где-то есть код который работает не так как я предполагаю.

Насколько я знаю SymbolSelect достаточно использовать один раз, в блоке инициализации (желательно при этом проверить результат).

Я в тестере просто формирую MarketWatch из заранее подготовленного массива, примерно вот таким вот образом

  //Forming list of symbols
  for(int f=0;f<ArraySize(ArrSymbolsEA);f++)
  {
  SymbolSelect(ArrSymbolsEA[f],true);
  }

Этого обычно бывает достаточно чтобы все символы в тестере стали доступны для торговли.

Но при таком подходе в случае если символ отсутствует в журнале появится примерно такая ошибка

2011.07.06 18:47:57     symbol NZDUSD does not exist

Если все отработало как положено окно тестера должно принять примерно такой вид


 
voix_kas:

Спасибо. Именно так сейчас и обхожу данную ошибку.
Если можно, поясните, пожалуйста, по каким причинам возникает нулевая цена? И может ли такое быть в жизни (читай, в режиме "реал-тайм", а не только при тестировании)? 


Какой код ошибки?
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 

Разработчикам

Хотел писать в СД, да передумал, буду тут - Добавьте плиз функцию bool SymbolExists(name) / bool SymbolIsExists(name)

Назначение - определяет наличие указанного символа на сервере. В случае успеха возвращает true.

Только так чтобы при ее использовании символ не отображался в MarketWatch у тестера (принцип такой же как у SymbolIsSynchronized).

Все это позволит избавится вот от таких вот неприятностей

2011.07.06 18:47:57     symbol NZDUSD does not exist
 
uncleVic:
Какой код ошибки?

Насколько видно из тестера стратегий, одновременно генериться две ошибки. Удается перехватить только последнюю.
Как мне его узнать? Код привел выше. Куда мне в него поместить вывод информации о коде ошибке? 

 
Interesting:

Странно, или я чего-то не понимаю или где-то есть код который работает не так как я предполагаю.

...

Если все отработало как положено окно тестера должно принять примерно такой вид

Запустите, пожалуйста, тестер со своим мультивалютником с 2011.01.03 00:00:00.

У меня до 2011.01.03 00:59:59 доступны только 3 валютные пары (которые и отображаются в маркетвотч, на скрине видно). Начиная с 2011.01.03 01:00:00 - все нормально.

П.С.

Речь идет о демо-счетах MQ (для подготовки к чемпу). 

 
voix_kas:

Запустите, пожалуйста, тестер со своим мультивалютником с 2011.01.03 00:00:00.

У меня до 2011.01.03 00:59:59 доступны только 3 валютные пары (которые и отображаются в маркетвотч, на скрине видно). Начиная с 2011.01.03 01:00:00 - все нормально.

П.С.

Речь идет о демо-счетах MQ (для подготовки к чемпу). 

История по символам синхронизирована?