Стоп в без убыток как сделать?

 

Выбираете те открытые ордера, что еще не получили стоп в безубыток, а дальше по условию

Однозначно вам сюда Гипотеза о sl,tp,tral там же найдете две интересные ссылки по теме

 
а показать можно куском кода, не совсем понял как..........
 
1Rakso >>:
а показать можно куском кода, не совсем понял как..........

Для покупки, у меня работает:

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);
        }
        }     
   }
 }
 }
 
storm >>:

Для покупки, у меня работает:

а акстивация на каком уровне происходит.....там нужно расстояние вставить допустим ушла в профит 25 пунктов только после этого выставляется стоп в б/у?

 

бросаеш гор линию называеш "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;	   	// активация безубытка после профита...
 

наверно сложная функция, мне делал один прогер такую штуку я советник не сохранил, теперь гадаю как там было сделано....


может у кого есть кусок кода, не думаю что его не применял никто, или покажет где можно посмотреть, может я плохо искал?

 
1Rakso >>:

...где можно посмотреть, может я плохо искал?

Кусочек поиска по теме.

 

поиск рулит, уж солько написанно...

 
1Rakso >>:

а акстивация на каком уровне происходит.....там нужно расстояние вставить допустим ушла в профит 25 пунктов только после этого выставляется стоп в б/у?

активацию задавайте через TrailingStop. Т.е. в вашем случае ставьте его равным 25, и все будет ок. Кусочек только для сделок Бай, и по евра/бакс, на других парах меняйте округление 

NormalizeDouble(Ask,4)// вместо четверки можно написать вроде digits, вобщем хранящую кол-во знаков после запятой