Если ни чего не упустил, вроде так
#property strict #include <Trade/Trade.mqh> CTrade trade; input int Deviation = 5, SL = 0, TP = 0; //+------------------------------------------------------------------+ void OnStart() { if( SL <= 0 && TP <= 0 ) return; trade.SetMarginMode(); trade.SetDeviationInPoints(Deviation); trade.LogLevel(LOG_LEVEL_ERRORS); trade.SetTypeFillingBySymbol(_Symbol); int stopLevel = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)+1, digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); double sl = SL>0 ? ((SL<stopLevel ? stopLevel : SL)*_Point) : 0, tp = TP>0 ? ((TP<stopLevel ? stopLevel : TP)*_Point) : 0, bid = SymbolInfoDouble(_Symbol, SYMBOL_BID), ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); for(int cnt=0; cnt<PositionsTotal(); cnt++) { string symbol = PositionGetSymbol(cnt); if( symbol != _Symbol ) continue; trade.SetExpertMagicNumber( PositionGetInteger(POSITION_MAGIC) ); ulong ticket = PositionGetInteger(POSITION_TICKET); switch( (int)PositionGetInteger(POSITION_TYPE) ) { case ORDER_TYPE_BUY: if( PositionGetDouble(POSITION_SL) == NormalizeDouble(bid - sl, digits) && PositionGetDouble(POSITION_TP) == NormalizeDouble(bid + tp, digits) ) break; if( trade.PositionModify( ticket, (sl>0 ? NormalizeDouble(bid - sl, digits) : PositionGetDouble(POSITION_SL)), (sl>0 ? NormalizeDouble(bid + tp, digits) : PositionGetDouble(POSITION_TP)) ) ) printf("Long position %s by %f to be modified", symbol, ticket); break; case ORDER_TYPE_SELL: if( PositionGetDouble(POSITION_SL) == NormalizeDouble(ask + sl, digits) && PositionGetDouble(POSITION_TP) == NormalizeDouble(ask - tp, digits) ) break; if( trade.PositionModify( ticket, (sl>0 ? NormalizeDouble(ask + sl, digits) : PositionGetDouble(POSITION_SL)), (tp>0 ? NormalizeDouble(ask - tp, digits) : PositionGetDouble(POSITION_TP)) ) ) printf("Long position %s by %f to be modified", symbol, ticket); break; } } }
Konstantin Nikitin:
Если ни чего не упустил, вроде так
Если ни чего не упустил, вроде так
Спасибо! после открытия рынка протестирую.
Konstantin
Скрипт выставляет TP и SL только в том случае, если их размер указывать в пунктах. Можете, пожалуйста, подправить ваш код так, чтобы параметры для установки уровней TP&SL задавались значениями цены валютной пары?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте!
Помогите в поиске скрипта для установки указанного в цене Стоп Лосса и Тейк Профита на всех открытых ордерах типа buy или sell, по валютной паре в активном графике.