当价格越过该线时设置止损单-源码
当价格越过该线时设置止损单-源码
免费
  • 人气:577

当价格越过该线时设置止损单-源码

  

EA 在启动时会在图表上建立两条线:绿线(开始)和红线(停止)。
您可以使用鼠标将线移动到任意位置。同时,如果绿线位于红线上方,则我们计划在未来下达买入止损订单,如果绿线位于红线下方,则相应地下达卖出止损订单。

//+------------------------------------------------------------------+

//|                                               交易面板系统.mq4 |

//|                                 版权 © 2023-2025, AI编程zblog |

//|                                          http://www.eawalk.com |

//+------------------------------------------------------------------+

#property copyright"Copyright © 2024, AI编程zblog"

#property link     "http://www.eawalk.com"

#property version  "1.00"

#property strict

#property description "专家顾问启动时会在图表上绘制两条线:绿色(起始线)和红色(止损线)。"

#property description "这些线可以用鼠标任意拖动。如果绿色线高于红色线,后续将计划设置买入止损单;如果绿色线低于红色线,则计划设置卖出止损单。"

//+------------------------------------------------------------------+

extern double 订单手数     = 0.01;    // 订单手数

extern int    起始距离     = 25;      // 起始线到挂单的距离(单位:点)

extern int    止损距离     = 25;      // 止损线到止损的距离(单位:点)

extern int    魔法数字     = 123321;  // 魔法数字

//+------------------------------------------------------------------+

int OnInit()

{

  return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

   ObjectsDeleteAll(0,"cm");

}

//+------------------------------------------------------------------+

void OnTick()

{

   if(ObjectFind("cm start")==-1) 

   {

     drawline("cm start",clrGreen,iHigh(NULL,PERIOD_D1,0));

     drawtext("cm start ","起始线",iHigh(NULL,PERIOD_D1,0));

   }

   if(ObjectFind("cm stop")==-1) 

   {

     drawline("cm stop",clrRed,iLow(NULL,PERIOD_D1,0));

     drawtext("cm stop ","止损线",iLow(NULL,PERIOD_D1,0));

   }

   doublePriceStart  = ObjectGet("cm start",OBJPROP_PRICE1);

  ObjectSetDouble(0,"cm start ",OBJPROP_PRICE,PriceStart);

   doublePriceStop  = ObjectGet("cm stop",OBJPROP_PRICE1);

  ObjectSetDouble(0,"cm stop ",OBJPROP_PRICE,PriceStop);

   //---

   int tip,Ticket=0;

   for (int i=0;i<OrdersTotal(); i++)

   {    

      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

      { 

        if (OrderSymbol()==Symbol() && 魔法数字==OrderMagicNumber())

        { 

           tip = OrderType(); 

           Ticket=OrderTicket();

           if (tip>1) break;  

           Print("-----> 开仓成功并结束运行");

           SendNotification(WindowExpertName()+" 开仓成功并结束运行");

           ExpertRemove();

           break;

        }          

      }

   } 

   if(PriceStart>PriceStop)

   {

      if(Ticket==0)

      {

        if (Bid>=PriceStart)

           if (OrderSend(Symbol(),OP_BUYSTOP,订单手数,NormalizeDouble(PriceStart+起始距离*Point,Digits),0,NormalizeDouble(PriceStop-止损距离*Point,Digits),0,NULL,魔法数字,0,CLR_NONE)==-1) 

              Print("错误",GetLastError());

      }

      else

      {

        if (Bid<=PriceStop)

        {

           if (OrderDelete(Ticket))

           {

              Print("-----> 删除挂单并结束运行");

              SendNotification(WindowExpertName()+" 删除挂单并结束运行");

              ExpertRemove();

           }

        }

      }

   }

   else

   {

      if(Ticket==0)

      {

        if (Bid<=PriceStart)

           if (OrderSend(Symbol(),OP_SELLSTOP,订单手数,NormalizeDouble(PriceStart-起始距离*Point,Digits),0,NormalizeDouble(PriceStop+止损距离*Point,Digits),0,NULL,魔法数字,0,CLR_NONE)==-1) 

              Print("错误",GetLastError());

      }

      else

      {

        if (Bid>=PriceStop)

        {

           if (OrderDelete(Ticket))

           {

              Print("-----> 删除挂单并结束运行");

              SendNotification(WindowExpertName()+" 删除挂单并结束运行");

              ExpertRemove();

           }

        }

      }

   }

}

//+------------------------------------------------------------------+

void drawline(string NameL, colorcol, double Y1)

{

   ObjectCreate(NameL,OBJ_HLINE, 0,0,Y1,0,0);

   ObjectSet  (NameL, OBJPROP_COLOR, col);

   ObjectSet  (NameL, OBJPROP_STYLE, STYLE_SOLID);

   ObjectSet  (NameL, OBJPROP_WIDTH, 1);

   ObjectSet  (NameL, OBJPROP_BACK,  false);

   ObjectSet  (NameL, OBJPROP_SELECTED,true);

   ObjectSet  (NameL, OBJPROP_SELECTED,true);

}

//+------------------------------------------------------------------+

void drawtext(string Name, stringtxt, double Y1)

{

   ObjectDelete (Name);

   ObjectCreate (Name,OBJ_TEXT,0,Time[WindowFirstVisibleBar()-WindowFirstVisibleBar()/4],Y1,0,0,0,0);

   ObjectSetText(Name,txt ,8,"Arial");

   ObjectSet   (Name, OBJPROP_COLOR, ObjectGet(Name,OBJPROP_COLOR));

}

//+------------------------------------------------------------------+

 

 

11.png