qq515521313 发表于 2018-8-15 14:23:43

//-请帮我改下,只需加载一个窗口,下单时对所有订单扫描,没有的止损和止盈的单子...

//-请帮我改下,只需加载一个窗口,下单时对所有订单扫描,没有的止损和止盈的单子,自动添加止损止盈。。
//-改好后传给我,在线等,谢谢了。QQ515521313 或者邮箱515521313@qq.com,万分感谢!!!
源码如下:
//+------------------------------------------------------------------+
//|                                       自动止盈止损分批出场.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//-请高手帮我改下,只需加载一个窗口,下单时对所有订单扫描,没有的止损和止盈的单子,自动添加止损止盈。。
//-改好后传给我,在线等,谢谢了。QQ515521313 或者邮箱515521313@qq.com,
#property copyright ""
#property link      ""
extern bool 智能系数止盈止损=True;
extern int    TakeProfitxxx=1;// 止盈系数 1-2
extern int    stoplossxxx=3;   // 止盈系数 2-4
extern int    TrailingStopxxx=2; // 移动止损系数 2-4
extern string 自动止损参数="默认打开";
extern bool AutoStoploss=True;
extern double stoploss= 220;
extern string 自动止盈参数="默认打开";
extern bool AutoTakeProfit=True;
extern double takeprofit=440;
extern string 盈利后移动止损="默认打开";
extern bool AutoTrailingStop=true;
extern double TrailingStop = 330;
extern string 分次离场参数="按比例分步撤退";
extern bool Gradually = False;               
extern int GraduallyNum = 3;               
double OriginalLot;
int    ADRofdays = 3;

//+------------------------------------------------------------------+
//| Expert initialization function                                 |
//+------------------------------------------------------------------+
int OnInit()
{
    double MODTICKV=(MarketInfo(Symbol(),MODE_TICKVALUE)); //一标准手最小波动盈亏
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    int Auto_takeprofit= ADR_vlue()/TakeProfitxxx;
    int Auto_stoploss= ADR_vlue()/stoplossxxx;
    int Auto_TrailingStop= ADR_vlue()/TrailingStopxxx;

   if (智能系数止盈止损=True){ takeprofit=Auto_takeprofit;stoploss=Auto_stoploss; TrailingStop=Auto_stoploss;}
   elsestoploss= stoploss;takeprofit=takeprofit;TrailingStop=TrailingStop;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{

if(OrdersTotal()>0)
{
      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)   
          double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Point*stoploss,Ask+Point*takeprofit,0,Green);
      else
      {
          if (AutoStoploss && stp==0)                  
          {
            double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Point*stoploss,OrderTakeProfit(),0,Green);
              }

              if (AutoTakeProfit && tpt==0)               
          {
            double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+Point*takeprofit,0,Green);
          }   


          if (AutoTrailingStop&& ((Bid - OpenPrice) > Point*TrailingStop))      
          {
            if((Bid-stp)>TrailingStop*Point )
            double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
          }
          }   
   }

if(OrderType()==OP_SELL)                  
{
   CraduallySell ();
   if (AutoStoploss && AutoTakeProfit && stp==0 && tpt==0)
       double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*stoploss,Bid-Point*takeprofit,0,Green);
   else
   {
      if (AutoStoploss && stp==0)         
      {
            double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*stoploss,OrderTakeProfit(),0,Green);
      }
      if (AutoTakeProfit && tpt==0)      
      {
            double zz1=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-Point*takeprofit,0,Green);
      }

      if(AutoTrailingStop&& ((OpenPrice-Ask) > Point*TrailingStop ))      
      {
                   if((stp-Ask)>TrailingStop*Point)
            double zz1=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))
         {
         double zz1=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))
         {
         double zz1=OrderClose(OrderTicket(),NormalizeDouble(OriginalLot/GraduallyNum,2),Ask,3,CLR_NONE);
         }
                   
          }
        }

}

//------------------------
int ADR_vlue()
{
double pnt = MarketInfo(Symbol(),MODE_POINT);
//int dig = MarketInfo(Symbol(),MODE_DIGITS);
int c=0,ADR=0;
double sum=0;
for (int i=1; i<Bars-1; i++)
{
    double hi = iHigh(NULL,PERIOD_D1,i);
    double lo = iLow(NULL,PERIOD_D1,i);
    datetime dt = iTime(NULL,PERIOD_D1,i);
    if (TimeDayOfWeek(dt) > 0 && TimeDayOfWeek(dt) < 6)
   {
      sum += hi - lo;
      c++;
      if (c>=ADRofdays) break;
   }

}
      ADR =sum/c/pnt;

if ( pnt>0)
{
   doublehi = iHigh(NULL,PERIOD_D1,1);
   doublelo = iLow(NULL,PERIOD_D1,1);
   // string objtext = "ADR = " + DoubleToStr(sum/c/pnt,0) + "(" + DoubleToStr(c,0) + " days)";//   Yesterday = " + DoubleToStr((hi-lo)/pnt,0)
    string objtext = "日均幅度 = " + DoubleToStr(sum/c/pnt,0) + " point";//   Yesterday = " + DoubleToStr((hi-lo)/pnt,0)
    ObjectSet("ADRJG",OBJPROP_CORNER,3);
    ObjectSet("ADRJG",OBJPROP_XDISTANCE,20);
    ObjectSet("ADRJG",OBJPROP_YDISTANCE,20);
    ObjectSetText("ADRJG",objtext,9,"Arial Black",clrGold);
}
return(ADR);
   //return(0);
}

//-请帮我改下,只需加载一个窗口,下单时对所有订单扫描,没有的止损和止盈的单子,自动添加止损止盈。。
//-改好后传给我,在线等,谢谢了。QQ515521313 或者邮箱515521313@qq.com,万分感谢!!!

pengfajun 发表于 2020-2-14 12:20:56

我是来刷分的,嘿嘿

小名 发表于 2020-3-12 11:55:29

好好 学习了 确实不错

云山游客 发表于 2020-6-17 11:02:39

:lol不错

(_‵o′)凸 发表于 2020-7-4 10:06:02

谢谢楼主分享

相依相伴 发表于 2020-8-1 14:29:41

谢谢楼主分享

谢少 发表于 2020-8-26 13:48:05

谢谢楼主分享

抱着回忆到老 发表于 2020-9-3 16:25:56

帮你顶下哈!!

refuse 发表于 2020-11-7 14:06:20

{:1_179:}

fx369 发表于 2021-4-18 18:30:52

帮你你顶顶
页: [1] 2
查看完整版本: //-请帮我改下,只需加载一个窗口,下单时对所有订单扫描,没有的止损和止盈的单子...