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

 
Rosh:

Вероятно, это для тех символов, которые отсутствуют в MarketWatch, так как для SymbolName сказано:

Выведите имя символа, для которого получен неожиданный результат и сравните со списком в MarketWatch.
Все символы в MarketWatch есть, в частности возвращает ноль для инструментов типа #AA, в скрипте специально проставил false
string symbol=SymbolName(i,false);
обноружил еще такую вещь, если в окне MarketWatch символ отсутствует, то функция
if(SymbolInfoTick(symbol,last_tick))
возвращает ошибку 4302, в справке не указано что для успешной работы этой функции необходимо присутствие инструмента в окне MarketWatch
 
sergey1294:
...в справке не указано что для успешной работы этой функции необходимо присутствие инструмента в окне MarketWatch

Справку действительно нужно укомплектовать нормальными примерами и указать "узкие места".

PS

Также часто возникают ситуаций при которых после внесения в язык изменений некоторые эксперты из базы перестают работать (или выдают ошибки при компиляции).

 

Сегодня заметил...MT5(access.metatrader5.com:443)

EURJPY, Daily:

 

к примеру GBPJPY, Daily: Здесь все нормально.

 

А вот скрин EURJPY, Daily одного ДЦ MT4:

 

Разница видна невооруженным глазом....

Как это исправить? 

 
Rosh:

Вероятно, это для тех символов, которые отсутствуют в MarketWatch, так как для SymbolName сказано:

Выведите имя символа, для которого получен неожиданный результат и сравните со списком в MarketWatch.

Для символов, которые отсутствуют в MarketWatch, функция SymbolInfoTick() возвращает ошибку ERR_MARKET_SELECT_ERROR "Символ не выбран в MarketWatch" (код 4302). У меня в MarketWatch выбраны только EURUSD и GBPUSD. Элементарный прогон показывает, что для невыбранных символов SymbolInfoTick() возвращает ошибку ERR_MARKET_SELECT_ERROR:

IS      0       1 (EURUSD,M15)  01:53:21        ************************************************
MF      0       1 (EURUSD,M15)  01:53:21        Инструмент - EURUSD
RR      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
RG      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = EUR
QM      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = EUR
CH      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1271.23
QG      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1271.05
CQ      0       1 (EURUSD,M15)  01:53:21        ************************************************
JQ      0       1 (EURUSD,M15)  01:53:21        Инструмент - GBPUSD
HQ      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
EH      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = GBP
RN      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = GBP
MI      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1553.53
DP      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1553.25
MG      0       1 (EURUSD,M15)  01:53:21        ************************************************
LR      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDCHF
NG      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
NJ      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
EQ      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
RI      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
GL      0       1 (EURUSD,M15)  01:53:21        ************************************************
PE      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDJPY
DL      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
DF      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
OL      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
HL      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
QH      0       1 (EURUSD,M15)  01:53:21        ************************************************

...

Кстати, последний блок данных в логе sergey1294 отличается от остальных: во-первых, SymbolInfoTick() на сей раз возвращает тот самый код ошибки, а во-вторых, - не кажется ли Вам, что инструмент, базовая валюта и валюта маржи в этом блоке данных имеют какие-то странные имена?

Это - bug? Вы эту странность заметили вообще?

CE      0       OrderCalcMargin (EURUSD,M1)     20:44:27        ************************************************
IG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Инструмент - 
LS      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта депозита = USD
DD      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Базовая валюта = 
CL      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта маржи = 
RG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        SymbolInfoTick() failed, error = 4302
 
что касается последнего блока данных, это просто цикл перебора глюканул немного, и в последнем запросе к данным обратился к несуществующему инструменту, поэтому все поля кроме валюта депозита пустые
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
sergey1294:
что касается последнего блока данных, это просто цикл перебора глюканул немного, и в последнем запросе к данным обратился к несуществующему инструменту, поэтому все поля кроме валюта депозита пустые

Это - как? В смысле, лог не от той версии кода, которая была приведёна?

Судя, по коду, там всё нормально.

Или SymbolsTotal() вернула одну величину, а во время прогона скрипта, где-то в середине цикла, по ужасной случайности, брокер, настраивая серверную часть, убрал из доступных один символ, и функция SymbolsTotal() - запроси её скрипт - вернула бы новое значение, на единицу меньшее, но, поскольку условие окончания цикла основывалось на старом значении, запомненном в переменной total, то соответствующие функции на последней итерации при обращении к уже теперь несуществующему символу вернули пустые строки? :)

Пока только такой сценарий придумался, чтобы такое произошло. :)

 
да же не знаю как это вышло, но больше этого пока не повторяется
 
simpleton:

... Далее происходит явное приведение вычисленного значения к значению типа ulong. Именно к ulong, поскольку имеется гарантия, что приводимое значение неотрицательно.

В процессе приведения к целочисленному типу дробная часть вещественного типа отбрасывается. Не округление к ближайшему происходит, а именно отбрасывание дробной части, что гарантирует неувеличение максимального значения лотов, которое позволяет свободная маржа. То есть, - именно то, что нам и нужно.

simpleton, я тоже пошёл по аналогичному пути, но использовал явное приведение к типу int. Исходил из того, что максимально возможный размер лота будет ограничен либо брокером/дилером, либо размером собственных средств. В связи с чем должно вполне хватить использования int . Как Вы полагаете, имеются ли при таком подходе (округление "снизу" с помощью int) какие-нибудь подводные камни?
 

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

А как сделать так чтобы в скриптах параметры появились (а то лень постоянно код менять под новые условия)?...

 
Interesting:

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

А как сделать так чтобы в скриптах параметры появились (а то лень постоянно код менять под новые условия)?...


#property script_show_inputs