//+------------------------------------------------------------------+
//| 已开仓管理EA.mq4|
//| |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright Chendafa"
#property link "http://dazhongtan.ys168.com"
extern double Get = 4; //盈利大于4点则设1点保护至少4点点差
extern double MinTakeProfit = 1;
extern bool Alert_sound = true; //语音报警开关
extern bool Auto_stp = true; //追踪止损开关
extern double OverTakeProfit = 24; //获利大于24点开始追踪止损
extern double N = 15; //止损价距离极值价的差距(至少为15)
//+------------------------------------------------------------------+
//| 主代码 |
//+------------------------------------------------------------------+
//bool OK = false; //全局变量,判断是否首次盈利>2点
//首次盈利大于2点,ok为ture,若盈利小于2且ok为ture,执行平仓操作
int start()
{
string Text;
for(int cnt=OrdersTotal() - 1; cnt >= 0; cnt --)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
{
Text = OrderComment();
double stp = OrderStopLoss();
double tpt = OrderTakeProfit();
double open = OrderOpenPrice();
double sl,mstp;
bool result = false;
//追踪止损:只要赢利不断增加,就自动抬高止损价,尽可能多的让获利单奔跑
if(OrderType() == OP_BUY)
{
if((Bid - open) / Point > OverTakeProfit * Point && Auto_stp == true)
mstp = Bid - N * Point;
if(mstp > stp) //新的价格更具优势才修改
result = OrderModify(OrderTicket(),OrderOpenPrice(),mstp,0,0,Green);
Alert (result);
}
if(OrderType() == OP_SELL)
{
if((open - Ask) / Point > OverTakeProfit * Point && Auto_stp == true)
mstp = Ask + N * Point;
if(mstp < stp) //新的价格更具优势才修改
result = OrderModify(OrderTicket(),OrderOpenPrice(),mstp,0,0,Green);
Alert (result);
}
//最小盈利保护:不允许盈利单变为亏损单
if((OrderType() == OP_BUY) && (Bid - open) / Point > Get && (stp < open))
{
sl = open + MinTakeProfit * Point;
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,tpt,0,Green);
if(Alert_sound == true) PlaySound("news");
//---------------删除挂单
for(int i = OrdersTotal () - 1; i >= 0; i --)
{
OrderSelect(i, SELECT_BY_POS);
if (OrderType () == 5 && OrderComment() == Text) //保证删除的是对应的挂单
OrderDelete (OrderTicket ());
}
//---------------
}
if((OrderType() == OP_SELL) && (open - Ask) / Point > Get && (open < stp))
{
sl = open - MinTakeProfit * Point;
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,tpt,0,Green);
if(Alert_sound == true) PlaySound("news");
//---------------删除挂单
for(int j = OrdersTotal () - 1; j >= 0; j --)
{
OrderSelect(j, SELECT_BY_POS);
if (OrderType () == 4 && OrderComment() == Text) //保证删除的是对应的挂单
OrderDelete (OrderTicket ());
}
//---------------
}
}
}
}