Эта функция рассчитывает сумму прибыли от всех открытых трейдов в указанном ей уровне цены. Однако есть котируемое мнение, что в ней не учтен спред, с чем я соглашаюсь. Автор этого мнения предложил такое решение:
Но, признаюсь честно, я его не понимаю, как пишет он:
Что-то я не понимаю алгоритма, который он предложил, каким же образом там учитывается спред? Может кто-нибудь объяснить?
OrderProfit() считается для коротких позиций по текущему Ask, вот здесь и учитываются значения текущего спреда. Если спред не изменится, то, при изменении цены от величины текущего Bid до newSL профит позиции ( любой, Buy или Sell, с соответствующим знаком ) в один лот изменится на величину delta, что и записано в операторе:
delta = ( newSL - Bid ) * TickValue;
Короче, OrderProfit() считает все с учетом спредов.Фиксируем, с помощью OrderProfit(), результат на определенный момент ( текущая цена). Дальше, нам остается лишь следить за изменением цены.
OrderProfit() считается для коротких позиций по текущему Ask, вот здесь и учитываются значения текущего спреда. Если спред не изменится, то, при изменении цены от величины текущего Bid до newSL профит позиции ( любой, Buy или Sell, с соответствующим знаком ) в один лот изменится на величину delta, что и записано в операторе:
delta = ( newSL - Bid ) * TickValue;
Короче, OrderProfit() считает все с учетом спредов.Фиксируем, с помощью OrderProfit(), результат на определенный момент ( текущая цена). Дальше, нам остается лишь следить за изменением цены.
Ведь OrderProfit для коротких позиций считается от цены Ask, не так ли?
Кстати MarketInfo( SymbolName, MODE_TICKVALUE) у меня дает 329.02 на паре EURUSD валюта депозита USD, поэтому у меня не считает эта функция все как надо.
Mislaid: Как написано было, так и правильно. На сколько сдвинется Bid, на столько же сдвинется и Ask, при немзменном спреде.
Из личной практики, спред как правило изменный, причем достаточно сильно). При резких движениях наблюдал увеличение спреда с 8 до 80 пунктов на пятизнаке.
Соответственно ордера не открываются. Как устранить ошибку? Каковы причины ее возникновения?
Буду рад помощи.
Из одних сообщений терминала мало что будет понятно, мало кто поможет вам, если вы не выложите код советника. Где-то в массив у вас пишется несуществующая партия данных, как одно из предположений, но гадать не мой профиль.
То, что Вы назвали Трейлингом, по сути таковым не является, он расчитывается другим способом и и его поведение может быть нелогичным.
Пусть наши понятия о терминах не совпадают, но вы же поняли меня?
Проблему решил, она была здесь:
В этой функции не учитывались все открытые трейды, пришлось менять условия цикла. Теперь она имеет такой вид:
Эта функция рассчитывает сумму прибыли от всех открытых трейдов в указанном ей уровне цены. Однако есть котируемое мнение, что в ней не учтен спред, с чем я соглашаюсь. Автор этого мнения предложил такое решение:
Но, признаюсь честно, я его не понимаю, как пишет он:
Но, признаюсь честно, я его не понимаю, как пишет он:
Что-то я не понимаю алгоритма, который он предложил, каким же образом там учитывается спред? Может кто-нибудь объяснить?OrderProfit() считается для коротких позиций по текущему Ask, вот здесь и учитываются значения текущего спреда. Если спред не изменится, то, при изменении цены от величины текущего Bid до newSL профит позиции ( любой, Buy или Sell, с соответствующим знаком ) в один лот изменится на величину delta, что и записано в операторе:
delta = ( newSL - Bid ) * TickValue;
Короче, OrderProfit() считает все с учетом спредов.Фиксируем, с помощью OrderProfit(), результат на определенный момент ( текущая цена). Дальше, нам остается лишь следить за изменением цены.
OrderProfit() считается для коротких позиций по текущему Ask, вот здесь и учитываются значения текущего спреда. Если спред не изменится, то, при изменении цены от величины текущего Bid до newSL профит позиции ( любой, Buy или Sell, с соответствующим знаком ) в один лот изменится на величину delta, что и записано в операторе:
delta = ( newSL - Bid ) * TickValue;
Короче, OrderProfit() считает все с учетом спредов.Фиксируем, с помощью OrderProfit(), результат на определенный момент ( текущая цена). Дальше, нам остается лишь следить за изменением цены.
Кажется начинаю понимать, только, наверное, правильнее так:
Ведь OrderProfit для коротких позиций считается от цены Ask, не так ли?
Кстати MarketInfo( SymbolName, MODE_TICKVALUE) у меня дает 329.02 на паре EURUSD валюта депозита USD, поэтому у меня не считает эта функция все как надо.
Пока решил пойти на хитрость, т.е. MarketInfo(SymbolName, MODE_TICKVALUE) по-другому считать:
Пока решил пойти на хитрость, т.е. MarketInfo(SymbolName, MODE_TICKVALUE) по-другому считать:
Как написано было, так и правильно. На сколько сдвинется Bid, на столько же сдвинется и Ask, при немзменном спреде.
Из личной практики, спред как правило изменный, причем достаточно сильно). При резких движениях наблюдал увеличение спреда с 8 до 80 пунктов на пятизнаке.
Можно ли закодировать(надежно) двойную вершину?
При тестировании советника в журнале выскакивает ошибка
2013.08.07 12:35:41 2012.06.06 05:29 Пуриа - 1.452 - SQ EURUSD,M30: Возникла ошибка 4002 (Индекс массива - вне диапазона)
2013.08.07 12:35:41 2012.06.06 05:29 Пуриа - 1.452 - SQ EURUSD,M30: Попытка открыть Buy ордер. Ожидание ответа..
Соответственно ордера не открываются. Как устранить ошибку? Каковы причины ее возникновения?
Буду рад помощи.
При тестировании советника в журнале выскакивает ошибка
2013.08.07 12:35:41 2012.06.06 05:29 Пуриа - 1.452 - SQ EURUSD,M30: Возникла ошибка 4002 (Индекс массива - вне диапазона)
2013.08.07 12:35:41 2012.06.06 05:29 Пуриа - 1.452 - SQ EURUSD,M30: Попытка открыть Buy ордер. Ожидание ответа..
Соответственно ордера не открываются. Как устранить ошибку? Каковы причины ее возникновения?
Буду рад помощи.