老周 发表于 2017-3-17 14:01:47

盈利后修改止损价为开仓价

该函数执行的是提损功能,即订单盈利到达水平后将止损价修改为开仓价,这样确保订单不会亏损出场。

//这里函数带有开仓部分,调用时请自行过滤所需要的函数
extern double 下单量=0.1;
extern double 止损=30;
extern double 止盈=90;
extern double 滑点=3;
extern double TrailingStop=20; //盈利的点数,你这里是 20
int start()
{ int i;int ticket1;
//+---------- 自定义做多条件 --------------------------------------------------------+
if( OrdersTotal()==0
&& Close-Open>1*Point
//+------------------------------------------------------------------+
)
{ticket1=OrderSend(Symbol(),OP_BUY, 下 单 量 ,Ask, 滑 点 ,Ask- 止 损
*Point,Ask+止盈*Point,"",20101018,0,0);
}
if( OrdersTotal()==0
&& Open-Close>1*Point
//+------------------------------------------------------------------+
){ticket1=OrderSend(Symbol(),OP_SELL, 下 单 量 ,Bid, 滑 点 ,Bid+ 止 损
*Point,Bid-止盈*Point,"",20101018,0,0);
}
//+---------以下为当有利润 20 点时,调整止损位到入场价-----------------+
int total=OrdersTotal();
for(int cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
//+------------------------------------------------------------------+
return(0);}

页: [1]
查看完整版本: 盈利后修改止损价为开仓价