sergey1294: ...в справке не указано что для успешной работы этой функции необходимо присутствие инструмента в окне MarketWatch
Справку действительно нужно укомплектовать нормальными примерами и указать "узкие места".
PS
Также часто возникают ситуаций при которых после внесения в язык изменений некоторые эксперты из базы перестают работать (или выдают ошибки при компиляции).
Вероятно, это для тех символов, которые отсутствуют в MarketWatch, так как для SymbolName сказано:
Выведите имя символа, для которого получен неожиданный результат и сравните со списком в MarketWatch.
Для символов, которые отсутствуют в MarketWatch, функция SymbolInfoTick() возвращает ошибку ERR_MARKET_SELECT_ERROR "Символ не выбран в MarketWatch" (код 4302). У меня в MarketWatch выбраны только EURUSD и GBPUSD. Элементарный прогон показывает, что для невыбранных символов SymbolInfoTick() возвращает ошибку ERR_MARKET_SELECT_ERROR:
IS 01 (EURUSD,M15) 01:53:21 ************************************************
MF 01 (EURUSD,M15) 01:53:21 Инструмент - EURUSD
RR 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
RG 01 (EURUSD,M15) 01:53:21 Базовая валюта = EUR
QM 01 (EURUSD,M15) 01:53:21 Валюта маржи = EUR
CH 01 (EURUSD,M15) 01:53:21 Маржа для покупки = 1271.23
QG 01 (EURUSD,M15) 01:53:21 Маржа для продажи = 1271.05
CQ 01 (EURUSD,M15) 01:53:21 ************************************************
JQ 01 (EURUSD,M15) 01:53:21 Инструмент - GBPUSD
HQ 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
EH 01 (EURUSD,M15) 01:53:21 Базовая валюта = GBP
RN 01 (EURUSD,M15) 01:53:21 Валюта маржи = GBP
MI 01 (EURUSD,M15) 01:53:21 Маржа для покупки = 1553.53
DP 01 (EURUSD,M15) 01:53:21 Маржа для продажи = 1553.25
MG 01 (EURUSD,M15) 01:53:21 ************************************************
LR 01 (EURUSD,M15) 01:53:21 Инструмент - USDCHF
NG 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
NJ 01 (EURUSD,M15) 01:53:21 Базовая валюта = USD
EQ 01 (EURUSD,M15) 01:53:21 Валюта маржи = USD
RI 01 (EURUSD,M15) 01:53:21SymbolInfoTick() failed, error = 4302
GL 01 (EURUSD,M15) 01:53:21 ************************************************
PE 01 (EURUSD,M15) 01:53:21 Инструмент - USDJPY
DL 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
DF 01 (EURUSD,M15) 01:53:21 Базовая валюта = USD
OL 01 (EURUSD,M15) 01:53:21 Валюта маржи = USD
HL 01 (EURUSD,M15) 01:53:21SymbolInfoTick() failed, error = 4302
QH 01 (EURUSD,M15) 01:53:21 ************************************************
...
Кстати, последний блок данных в логе sergey1294 отличается от остальных: во-первых, SymbolInfoTick() на сей раз возвращает тот самый код ошибки, а во-вторых, - не кажется ли Вам, что инструмент, базовая валюта и валюта маржи в этом блоке данных имеют какие-то странные имена?
Это - bug? Вы эту странность заметили вообще?
CE 0OrderCalcMargin (EURUSD,M1) 20:44:27 ************************************************
IG 0OrderCalcMargin (EURUSD,M1) 20:44:27 Инструмент -
LS 0OrderCalcMargin (EURUSD,M1) 20:44:27 Валюта депозита = USD
DD 0OrderCalcMargin (EURUSD,M1) 20:44:27 Базовая валюта =
CL 0OrderCalcMargin (EURUSD,M1) 20:44:27 Валюта маржи =
RG 0OrderCalcMargin (EURUSD,M1) 20:44:27SymbolInfoTick() failed, error = 4302
что касается последнего блока данных, это просто цикл перебора глюканул немного, и в последнем запросе к данным обратился к несуществующему инструменту, поэтому все поля кроме валюта депозита пустые
sergey1294: что касается последнего блока данных, это просто цикл перебора глюканул немного, и в последнем запросе к данным обратился к несуществующему инструменту, поэтому все поля кроме валюта депозита пустые
Это - как? В смысле, лог не от той версии кода, которая была приведёна?
Судя, по коду, там всё нормально.
Или SymbolsTotal() вернула одну величину, а во время прогона скрипта, где-то в середине цикла, по ужасной случайности, брокер, настраивая серверную часть, убрал из доступных один символ, и функция SymbolsTotal() - запроси её скрипт - вернула бы новое значение, на единицу меньшее, но, поскольку условие окончания цикла основывалось на старом значении, запомненном в переменной total, то соответствующие функции на последней итерации при обращении к уже теперь несуществующему символу вернули пустые строки? :)
Пока только такой сценарий придумался, чтобы такое произошло. :)
... Далее происходит явное приведение вычисленного значения к значению типа ulong. Именно к ulong, поскольку имеется гарантия, что приводимое значение неотрицательно.
В процессе приведения к целочисленному типу дробная часть вещественного типа отбрасывается. Не округление к ближайшему происходит, а именно отбрасывание дробной части, что гарантирует неувеличение максимального значения лотов, которое позволяет свободная маржа. То есть, - именно то, что нам и нужно.
simpleton, я тоже пошёл по аналогичному пути, но использовал явное приведение к типу int. Исходил из того, что максимально возможный размер лота будет ограничен либо брокером/дилером, либо размером собственных средств. В связи с чем должно вполне хватить использования int . Как Вы полагаете, имеются ли при таком подходе (округление "снизу" с помощью int) какие-нибудь подводные камни?
Вероятно, это для тех символов, которые отсутствуют в MarketWatch, так как для SymbolName сказано:
Выведите имя символа, для которого получен неожиданный результат и сравните со списком в MarketWatch....в справке не указано что для успешной работы этой функции необходимо присутствие инструмента в окне MarketWatch
Справку действительно нужно укомплектовать нормальными примерами и указать "узкие места".
PS
Также часто возникают ситуаций при которых после внесения в язык изменений некоторые эксперты из базы перестают работать (или выдают ошибки при компиляции).
Сегодня заметил...MT5(access.metatrader5.com:443)
EURJPY, Daily:
к примеру GBPJPY, Daily: Здесь все нормально.
А вот скрин EURJPY, Daily одного ДЦ MT4:
Разница видна невооруженным глазом....
Как это исправить?
Вероятно, это для тех символов, которые отсутствуют в MarketWatch, так как для SymbolName сказано:
Выведите имя символа, для которого получен неожиданный результат и сравните со списком в MarketWatch.Для символов, которые отсутствуют в MarketWatch, функция SymbolInfoTick() возвращает ошибку ERR_MARKET_SELECT_ERROR "Символ не выбран в MarketWatch" (код 4302). У меня в MarketWatch выбраны только EURUSD и GBPUSD. Элементарный прогон показывает, что для невыбранных символов SymbolInfoTick() возвращает ошибку ERR_MARKET_SELECT_ERROR:
Кстати, последний блок данных в логе sergey1294 отличается от остальных: во-первых, SymbolInfoTick() на сей раз возвращает тот самый код ошибки, а во-вторых, - не кажется ли Вам, что инструмент, базовая валюта и валюта маржи в этом блоке данных имеют какие-то странные имена?
Это - bug? Вы эту странность заметили вообще?
что касается последнего блока данных, это просто цикл перебора глюканул немного, и в последнем запросе к данным обратился к несуществующему инструменту, поэтому все поля кроме валюта депозита пустые
Это - как? В смысле, лог не от той версии кода, которая была приведёна?
Судя, по коду, там всё нормально.
Или SymbolsTotal() вернула одну величину, а во время прогона скрипта, где-то в середине цикла, по ужасной случайности, брокер, настраивая серверную часть, убрал из доступных один символ, и функция SymbolsTotal() - запроси её скрипт - вернула бы новое значение, на единицу меньшее, но, поскольку условие окончания цикла основывалось на старом значении, запомненном в переменной total, то соответствующие функции на последней итерации при обращении к уже теперь несуществующему символу вернули пустые строки? :)
Пока только такой сценарий придумался, чтобы такое произошло. :)
... Далее происходит явное приведение вычисленного значения к значению типа ulong. Именно к ulong, поскольку имеется гарантия, что приводимое значение неотрицательно.
В процессе приведения к целочисленному типу дробная часть вещественного типа отбрасывается. Не округление к ближайшему происходит, а именно отбрасывание дробной части, что гарантирует неувеличение максимального значения лотов, которое позволяет свободная маржа. То есть, - именно то, что нам и нужно.
Разработчикам.
А как сделать так чтобы в скриптах параметры появились (а то лень постоянно код менять под новые условия)?...
Разработчикам.
А как сделать так чтобы в скриптах параметры появились (а то лень постоянно код менять под новые условия)?...
#property script_show_inputs