Выбираете те открытые ордера, что еще не получили стоп в безубыток, а дальше по условию
Однозначно вам сюда Гипотеза о sl,tp,tral там же найдете две интересные ссылки по теме
Для покупки, у меня работает:
if(TrailingStop>0) { for(int t=0;t<=OrdersTotal();t++) { if(OrderSelect(t,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; if((OrderType()==OP_BUY) && Ask>OrderOpenPrice()) { if(Ask-OrderOpenPrice()>(TrailingStop+5)*Point)//5 - это ваши "+5 пунктов" если после знака по евра/бакс четыре числа { if(OrderStopLoss()<OrderOpenPrice()) { bool modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask,4)-(TrailingStop+5)*Point,OrderTakeProfit(),0,Red); } } } } }
бросаеш гор линию называеш "target" ставиш на нужную цену и бросеш на линию ордера этот скрипт :
//+------------------------------------------------------------------+ //| _SET_BU.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void start(){ int stlw=MarketInfo(Symbol(),MODE_STOPLEVEL); int spr =MarketInfo(Symbol(),MODE_SPREAD); double prise=WindowPriceOnDropped(); if(prise==0){ Alert("Цена не определена!"); return; } //---- for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderCloseTime()==0){ if(MathAbs(OrderOpenPrice()-prise)<spr*Point*2){ int ticket=OrderTicket(); } } } } } if(ticket<1){ Alert("ордер не найден!"); return; } //---- while(!IsStopped()){ Sleep(300); if(ObjectFind("target")!=0){ Alert("Нет целевого уровня"); return; }else{ double target = nd(ObjectGet("target",OBJPROP_PRICE1)); } if(OrderSelect(ticket,SELECT_BY_TICKET)){ if(OrderType()>1){Alert("Неверный тип ордера");return;} if(OrderCloseTime()!=0){Alert("ордер закрыт");return;} if(OrderType()==OP_BUY){if(target<OrderOpenPrice()){Alert("Передвиньте целевой уровень выше!");return;}} if(OrderType()==OP_SELL){if(target>OrderOpenPrice()){Alert("Передвиньте целевой уровень ниже!");return;}} if(NormalizeDouble(OrderOpenPrice(),Digits)==NormalizeDouble(OrderStopLoss(),Digits)){Alert("БУ установлен");return;} if(OrderType()==0){Comment("Дистанция до цели = ",(target - nd(MarketInfo(Symbol(),MODE_BID)))/Point); if(nd(MarketInfo(Symbol(),MODE_BID))>target){ if(nd(MarketInfo(Symbol(),MODE_BID))-OrderOpenPrice()>stlw*Point){ if(!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Blue)){ Alert("Ошибка установки БУ №",GetLastError()); return; }else{PlaySound("expert.wav");} } } } if(OrderType()==1){Comment("Дистанция до цели = ",(nd(MarketInfo(Symbol(),MODE_ASK)) - target)/Point); if(nd(MarketInfo(Symbol(),MODE_ASK))<target){ if(OrderOpenPrice()-nd(MarketInfo(Symbol(),MODE_ASK))>stlw*Point){ if(!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Blue)){ Alert("Ошибка установки БУ №",GetLastError()); return; }else{PlaySound("expert.wav");} } } } } } return;} //+------------------------------------------------------------------+ double nd(double in){return(NormalizeDouble(in,MarketInfo(Symbol(),MODE_DIGITS)));}
extern int StopLossBu = 5; // безубыток extern int StopLoss_act = 25; // активация безубытка после профита...
наверно сложная функция, мне делал один прогер такую штуку я советник не сохранил, теперь гадаю как там было сделано....
может у кого есть кусок кода, не думаю что его не применял никто, или покажет где можно посмотреть, может я плохо искал?
поиск рулит, уж солько написанно...
а акстивация на каком уровне происходит.....там нужно расстояние вставить допустим ушла в профит 25 пунктов только после этого выставляется стоп в б/у?
активацию задавайте через TrailingStop. Т.е. в вашем случае ставьте его равным 25, и все будет ок. Кусочек только для сделок Бай, и по евра/бакс, на других парах меняйте округление
NormalizeDouble(Ask,4)// вместо четверки можно написать вроде digits, вобщем хранящую кол-во знаков после запятой
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
как сделать функцию стопа в б/у
цена если ушла в профит 25 пунктов, то выставляется стоп в без убыток +5пп..