//+------------------------------------------------------------------+ //| Возвращает корректный StopLoss относительно StopLevel | //+------------------------------------------------------------------+ double CorrectStopLoss(const string symbol_name,const ENUM_POSITION_TYPE position_type,const int stop_loss) { if(stop_loss==0) return 0; double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT); if(pt==0) return 0; double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(symbol_name,SYMBOL_ASK) : SymbolInfoDouble(symbol_name,SYMBOL_BID)); int lv=StopLevel(symbol_name),dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS); return (position_type==POSITION_TYPE_BUY ? NormalizeDouble(::fmin(price-lv*pt,price-stop_loss*pt),dg) : NormalizeDouble(::fmax(price+lv*pt,price+stop_loss*pt),dg) ); } //+------------------------------------------------------------------+ //| Прверяет StopLoss на корректность относительно StopLevel | //+------------------------------------------------------------------+ bool CheckCorrectStopLoss(const string symbol_name,const ENUM_POSITION_TYPE position_type,const double stop_loss) { if(stop_loss==0) return true; double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT); if(pt==0) return false; double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(symbol_name,SYMBOL_ASK) : SymbolInfoDouble(symbol_name,SYMBOL_BID)); int lv=StopLevel(symbol_name),dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS); return ( position_type==POSITION_TYPE_BUY ? NormalizeDouble(stop_loss-price-lv*pt,dg)<0 : NormalizeDouble(stop_loss-price+lv*pt,dg)>0 ); }
Выделены ошибки.
fxsaber:
Выделены ошибки.
double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(symbol_name,SYMBOL_ASK) : SymbolInfoDouble(symbol_name,SYMBOL_BID)); int lv=StopLevel(symbol_name),dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS); return (position_type==POSITION_TYPE_BUY ? NormalizeDouble(::fmin(price-lv*pt,price-stop_loss*pt),dg) : NormalizeDouble(::fmax(price+lv*pt,price+stop_loss*pt),dg) );
В чём ошибка?
Artyom Trishkin:
В чём ошибка?
Цена неверная используется.
fxsaber:
Обоснуйте.
Цена неверная используется.
Artyom Trishkin:
Обоснуйте.
Обоснуйте.
OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, Bid);
Сработает при StopLevel == 0.
Отличная работа! Спасибо большое!

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
TrailingStopAndTake:
Данный неторгующий советник предназначен для простого трейлинга приказов стоп лосс и тейк профит открытых позиций.
Принцип работы: при открытии новой позиции, советник проверяет ее стоп-приказы и, если стоп-приказа нет, выставляет его на заданный в настройках размер. Далее начинает передвигать тейк профит и/или стоп лосс позиции, если цена уходит на расстояние дальше, чем указано в настройках.
Имеется возможность задать тип позиции - любая/покупка/продажа, символ позиции (любой или указанный), магик (любой или указанный) или тикет позиции (любой или указанный). Также возможно указать режим трейлинга в убыточной зоне - если режим не задан, то стоп-приказы не будут подтягиваться в зоне убытка. Размер безубытка можно указать в настройках.
Рис.1 Начальный StopLoss 600, начальный TakeProfit 1200, размер TrailingStop 300, трейлинг тейк профит отключен, в убыточной зоне не подтягивает.
Автор: Scriptor