自动止损、止盈、盈利后移动止损、分批出场

extern string 自动止损参数="默认打开";
extern bool AutoStoploss=True;
extern double stoploss= 22;
extern string 自动止盈参数="默认打开";
extern bool AutoTakeProfit=True;
extern double takeprofit=30;
extern string 盈利后移动止损="默认打开";
extern bool AutoTrailingStop=true;
extern double TrailingStop = 15;
extern string 分次离场参数="按比例分步撤退";
extern bool Gradually = False;                
extern int GraduallyNum = 3;               
double OriginalLot;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)  
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
 
  if(OrderSymbol()==Symbol())
  {
     double stp=OrderStopLoss();   
     double tpt=OrderTakeProfit();  
     double OpenPrice = OrderOpenPrice(); 
 
       if (OriginalLot == 0) 
           {
           OriginalLot=OrderLots();
           }          
 
 
     if(OrderType()==OP_BUY)          
     {
        CraduallyBuy ();
	    if (AutoStoploss && AutoTakeProfit && stp==0 && tpt==0&&OrderMagicNumber()<=0)   
          OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Point*stoploss,Ask+Point*takeprofit,0,Green);
        else
        {
          if (AutoStoploss && stp==0)                  
          {
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Point*stoploss,OrderTakeProfit(),0,Green);
	      }
      
	      if (AutoTakeProfit && tpt==0)               
          {
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+Point*takeprofit,0,Green);
          }   
 

          if (AutoTrailingStop  && ((Bid - OpenPrice) > Point*TrailingStop)&&OrderMagicNumber()<=0)       
          {
            if((Bid-stp)>TrailingStop*Point )
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
          }
	    }    
     }
 
  if(OrderType()==OP_SELL)                   
  {
     CraduallySell ();
     if (AutoStoploss && AutoTakeProfit && stp==0 && tpt==0)  
       OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*stoploss,Bid-Point*takeprofit,0,Green);
     else
     {
        if (AutoStoploss && stp==0)          
        {
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*stoploss,OrderTakeProfit(),0,Green);
        }
        if (AutoTakeProfit && tpt==0)        
        {
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-Point*takeprofit,0,Green);
        }  

        if(AutoTrailingStop  && ((OpenPrice-Ask) > Point*TrailingStop ))       
        {
		   if((stp-Ask)>TrailingStop*Point)
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Green);
        }
     }
  }
 
 }
 }
else
{
    OriginalLot=0;
}
	 
} 
}





 void CraduallyBuy ()                
 {
  double OpenPrice = OrderOpenPrice(); 
  double lot=OrderLots();             
  
  for (int yi=1;yi<=GraduallyNum;yi++)
   { 
	  if (NormalizeDouble((Bid - OpenPrice)/Point,0) == NormalizeDouble(TrailingStop/GraduallyNum*yi,0))
	    {
        
        if  (lot != NormalizeDouble(OriginalLot*(1-yi/GraduallyNum),2))
         {
           OrderClose(OrderTicket(),NormalizeDouble(OriginalLot/GraduallyNum,2),Bid,3,CLR_NONE);
         }
        	     
	    }
	}
 }
 
 
 
 void CraduallySell ()               
 {
  double OpenPrice = OrderOpenPrice();
  double lot=OrderLots();             
  
  for (int yi=1;yi<=GraduallyNum;yi++)
   { 
	  if (NormalizeDouble((OpenPrice - Ask)/Point,0) == NormalizeDouble(TrailingStop/GraduallyNum*yi,0))
	    {	    
        
        if  (lot != NormalizeDouble(OriginalLot*(1-yi/GraduallyNum),2))
         {
           OrderClose(OrderTicket(),NormalizeDouble(OriginalLot/GraduallyNum,2),Ask,3,CLR_NONE);
         }
        	     
	    }
	}

 }
本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)