Если МТ4, то используйте этот:
//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних HoursNumber часов int DoTrailOrders(double eDistance, double eHoursNumber, int eMagicNumber, string eSymbol, int eTimeFrame) { int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS); eDistance*=MarketInfo(eSymbol,MODE_POINT); double eSpread=MarketInfo(eSymbol,MODE_SPREAD)*MarketInfo(eSymbol,MODE_POINT); int eBarsNumber=(int)MathMax(MathCeil(3600.0/PeriodSeconds(eTimeFrame)*eHoursNumber),1); double eExtremum; int ePosition, eTotal=OrdersTotal(), eType; for(ePosition=0; ePosition<eTotal; ePosition++) { if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) { //обработка ошибки continue; } eType=OrderType(); if(eType!=OP_BUY && eType!=OP_SELL) continue; if(OrderMagicNumber()!=eMagicNumber) continue; if(OrderSymbol()!=eSymbol) continue; //наблюдаем начиная с бара следующим за баром открытия if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) continue; if(eType==OP_BUY) { //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eBarsNumber eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eBarsNumber,1)); //расстояние от минимума до StopLoss должно превысить TrailingLevel if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance && OrderStopLoss()>0) continue; //расстояние от минимума до цены открытия должно превысить TrailingLevel if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance) continue; //новый стоп должен быть не ближе к текущей цене, чем на два спреда if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)-eExtremum+eDistance,eDigits)<=eSpread) continue; if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance,eDigits),OrderTakeProfit(),OrderExpiration(),clOpenBuy)) { //обработка ошибки } } if(eType==OP_SELL) { //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eBarsNumber eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eBarsNumber,1)); if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=eDistance && OrderStopLoss()>0) continue; if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=eDistance) continue; if(NormalizeDouble(eExtremum+eDistance-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread) continue; if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+eDistance,eDigits),OrderTakeProfit(),OrderExpiration(),clOpenSell)) { //обработка ошибки } } } return(0); }
Есть такое поверие, если переводишь ордер в БУ то как правило БУ и получаешь!!! Так к слову....
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Приветствую. Пытаюсь найти советник/скрипт/волшебную палочку, которая могла бы поттягивать стоп-лосс для buy ордера ниже минимума предыдущей свечи и для sell ордера выше максимума предыдущей свечи. По-идее реализация такого безобразия не особо сложной должна быть, но такое ощущение, что никто ничего подобного не делал. Есть у кого информация по этому поводу?
Заранее благодарю за предметные ответы