Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Поэтому lSL - это сколько пунктов до SL
Point = 0.00001 (на 5 значных котировках)
dLotStep = 0.01
Формула (lSL*dLotCost*dLotStep))*dLotStep - неправильная
Должно быть что-то типа (lSL*dLotCost*Point))*dLotStep
Не надо ничего выдумывать. Размер лота в каждом ДЦ свой и надо его приводить к нужному размеру. Пункты тут не причем
Не надо ничего выдумывать. Размер лота в каждом ДЦ свой и надо его приводить к нужному размеру. Пункты тут не причем
По условиям задачи lSL - это размер просадки в пунктах котировок, а не в пунктах лота.Т.е. пункты тут как раз причем.
Значит, и в формуле расчета умножать (то что в скобках) надо на Point, а не на dLotStep.
Другое дело - что это уже происходит за счет dLotCost (заодно с пересчетом в валюту депозита)...
Т.е. мы сначала в
получаем целое число, а потом пересчитываем обратно в правильные единицы лота за счет умножения на dLotStep ?
есть еще вариант с депозом в 3 бакса пару "EURUSD" торговать и 30% на проиграш выставить.. но это уже из серии извращенств
По условиям задачи lSL - это размер просадки в пунктах котировок, а не в пунктах лота.Т.е. пункты тут как раз причем.
Значит, и в формуле расчета умножать (то что в скобках) надо на Point, а не на dLotStep.
Другое дело - что это уже происходит за счет dLotCost (заодно с пересчетом в валюту депозита)...
Т.е. мы сначала в
получаем целое число, а потом пересчитываем обратно в правильные единицы лота за счет умножения на dLotStep ?
Да
Всё равно формула неправильная (для блока iSL>0).
TICKVALUE дает цену для TICKSIZE.
А lSL задается в пунктах POINT.
POINT не всегда совпадает с TICKSIZE (см. 3-значную пару XAUUSD у Альпари).
Значит - надо пересчитать lSL из POINT в TICKSIZE.
Иначе - будем получать завышенный в 10 раз лот (что я и наблюдал на паре XAUUSD, пока не добавил пересчет).
if (lSL>0){
lSL= (int)(MarketInfo(lSymbol,MODE_TICKSIZE) / MarketInfo(lSymbol,MODE_POINT) )* lSL; // TICKSIZE/POINT даст целое число (1 или 10), по-этому можно использовать lSL типа int
// дальше как и было
PS: для ТС, которые оптимизируются за много проходов (>10млн) все неизменяемые параметры символа (TICKSIZE, POINT, TICKVALUE, LOTSTEP, MINLOT, MAXLOT и пр.) надо в функции init() присваивать переменным и использовать значения этих переменных в расчетах.
В т.ч. вынести в переменную значение TickSize/Point.
Всё равно формула неправильная (для блока iSL>0).
TICKVALUE дает цену для TICKSIZE.
А lSL задается в пунктах POINT.
POINT не всегда совпадает с TICKSIZE (см. 3-значную пару XAUUSD у Альпари).
Значит - надо пересчитать lSL из POINT в TICKSIZE.
Иначе - будем получать завышенный в 10 раз лот (что я и наблюдал на паре XAUUSD, пока не добавил пересчет).
if (lSL>0){
lSL= (int)(MarketInfo(lSymbol,MODE_TICKSIZE) / MarketInfo(lSymbol,MODE_POINT) )* lSL; // TICKSIZE/POINT даст целое число (1 или 10), по-этому можно использовать lSL типа int
// дальше как и было
PS: для ТС, которые оптимизируются за много проходов (>10млн) все неизменяемые параметры символа (TICKSIZE, POINT, TICKVALUE, LOTSTEP, MINLOT, MAXLOT и пр.) надо в функции init() присваивать переменным и использовать переменных в расчетах.
В т.ч. вынести в переменную значение TickSize/Point.
Спасибо
Спасибо
Топикстартер еще на первой странице послал свой респект, и больше не появлялся.
Несколько лет назад где-то на форуме этот вопрос обсуждался. Перескажу по памяти, но, без формул.
Предположим, мы торгуем пару AUDCHF. Взято совершенно произвольно, чтобы объяснить, как формируется профит или убыток по позиции. Примерно такая же тема поднималась в ветке https://www.mql5.com/ru/forum/150912
Если мы торгуем один лот 100000 AUD, то ( на пятизнаке ) каждый пипс приносит 1 CHF (знаменатель пары) прибыли или убытка (зависит от того, в какую сторону стали, и, куда идет цена).
Соответственно, в каждый момент времени, мы знаем, сколько CHF мы заработали/проиграли. Выигрыш/проигрыш конвертируется в валюту депозита по курсу USDCHF на текущий момент, если валюта депозита USD, или EURCHF, если валюта депозита EUR. По аналогии, для всех пар и валют депозита.
Отсюда ответ: абсолютно точно правильный размер лота мы можем оценить не всегда. Ориентиром может быть MarketInfo() с параметром запроса MODE_TICKVALUE.
Отсюда ответ: абсолютно точно правильный размер лота мы можем оценить не всегда. Ориентиром может быть MarketInfo() с параметром запроса MODE_TICKVALUE.
Так оно и учитывается давно. По крайней мере - в красиво оформленных постах Vinin (с пока неправильным расчетом лота для несовпадающих TICKSIZE c POINT) и старом посте от Martingeil (с правильным расчетом лота, но без возможности задаяния просадки ==0).
Главное - чтобы от ДЦ прилетало правильное значение TICKVALUE (или правильно на клиенте расчитывалось, если расчитывается в МТ).
Когда эта тема стартовала, я так понял, TICKVALUE ещё не было.
А с его появлением всё упростилось и эта тема зачахла на какое-то время.
PS: скоро выложу свою версию - гибрид варианта Vinin'a (у него формула проще и предусмотрено iSL==0) и Martingeil'a (контроль нехватки средств даже на мин. лот).
Особенности: 1) расчет баланса от AccountFreeMargin(), а не от AccountBalance().
2) И (для перевертышей) учтено, что баланс уменьшится на определенную сумму, когда открытый трейд закроется по SL.
Если не будет хватать средств даже на мин. баланс - будет выдавать объем лота -134 (ошибка 134 - нехватка средств для открытия трейда)
В связи с чем вопрос к Vinin (и др. опытным камрадам): код сам раскрашивается или Вы сами раскрашиваете? Я пробовал задать фрагмент стиль "код", но он не раскрасился. Или он только после отправки поста раскрашивается?
В связи с чем вопрос к Vinin (и др. опытным камрадам): код сам раскрашивается или Вы сами раскрашиваете? Я пробовал задать фрагмент стиль "код", но он не раскрасился. Или он только после отправки поста раскрашивается?
доработал до ума свою идею (для платформ з процентом для стоп-аута).. делюсь кодом.. конструктивная критика принимается