大师们,这个是自动止盈止损的代码,想在上面加上可以自动注释的代码,我小白一个跪求帮忙。谢谢了~~
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//+------------------------------------------------------------------+
//| 自动止损、止盈、盈利后移动止损、分批出场.mq4 |
//| Copyright ?2009, 龙德而隐者 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2009 by 龙德而隐者"
#property link "http://www.metaquotes.net/"
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);
}
}
}
}
|