⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 [ea]divergencetrader_ron_mt4_v071.mq4

📁 智能交易系统
💻 MQ4
字号:
/*+--------+|Divergence Trader+--------+*/// variables declared here are GLOBAL in scope#property copyright "Ron Thompson"#property link      "http://www.lightpatch.com/forex"// user inputextern double Lots=0.01;              // how many lots to trade at a time extern int    Fast_Period=7;extern int    Slow_Period=88;extern double DVBuySell=0.0011;extern double DVStayOut=0.0073;extern double ProfitMade=20;          // how much money do you expect to makeextern double LossLimit=115;          // how much loss can you tolorateextern double TrailStop=9999;         // trailing stop (999=no trailing stop)extern int    PLBreakEven=9999;       // set break even when this many pips are made (999=off)extern int    BasketProfit=  10;      // if equity reaches this level, close tradesextern int    BasketLoss=9999;        // if equity reaches this negative level, close trades// externals that don't need to be external       int    Slippage=2;             // how many pips of slippage can you tolorate       bool   FileData=false;         // write to file exery tick?// naming and numberingint      MagicNumber  = 200601182020; // allows multiple experts to trade on same accountstring   TradeComment = "Divergence_07_";// Bar handlingdatetime bartime=0;                   // used to determine when a bar has movedint      bartick=0;                   // number of times bars have movedint      objtick=0;                   // used to draw objects on the chartint      tickcount=0;// Trade controlbool TradeAllowed=true;               // used to manage trades// Min/Max trackingdouble maxOrders;double maxEquity;double minEquity;//+-------------+//| Custom init |//|-------------+// Called ONCE when EA is added to chart or recompiledint init()  {   int    i;   string o;      //remove the old objects    for(i=0; i<Bars; i++)      {      o=DoubleToStr(i,0);      ObjectDelete("myx"+o);      ObjectDelete("myz"+o);     }   objtick=0;   ObjectDelete("Cmmt");   ObjectCreate( "Cmmt", OBJ_TEXT, 0, Time[20], High[20]+(5*Point) );   ObjectSetText("Cmmt","Divergence=X.XXXX",10,"Arial",White);   Print("Init happened ",CurTime());   Comment(" ");  }//+----------------+//| Custom DE-init |//+----------------+// Called ONCE when EA is removed from chartint deinit()  {   int    i;   string o;   //remove the old objects       for(i=0; i<Bars; i++)      {      o=DoubleToStr(i,0);      ObjectDelete("myx"+o);      ObjectDelete("myz"+o);     }   objtick=0;      Print("MAX number of orders ",maxOrders);   Print("MAX equity           ",maxEquity);   Print("MIN equity           ",minEquity);         Print("DE-Init happened ",CurTime());   Comment(" ");  }//+-----------+//| Main      |//+-----------+// Called EACH TICK and each Bar[]int start()  {   double p=Point;   double spread=Ask-Bid;   double spread2=(Ask-Bid)+2*Point; // for setting unattended stoploss and takeprofit      int      cnt=0;   int      gle=0;   int      OrdersPerSymbol=0;      int      iFileHandle;     // stoploss and takeprofit and close control   double SL=0;   double TP=0;   double CurrentProfit=0;   double CurrentBasket=0;      // direction control   bool BUYme=false;   bool SELLme=false;         // Trade stuff   double diverge;   double maF1, maS1;   // bar counting   if(bartime!=Time[0])      {      bartime=Time[0];      bartick++;       objtick++;      TradeAllowed=true;     }   OrdersPerSymbol=0;   for(cnt=OrdersTotal();cnt>=0;cnt--)     {      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);      if( OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)        {         OrdersPerSymbol++;        }     }   if(OrdersPerSymbol>maxOrders) maxOrders=OrdersPerSymbol;   //+-----------------------------+   //| Insert your indicator here  |   //| And set either BUYme or     |   //| SELLme true to place orders |   //+-----------------------------+   int    Fast_Price = PRICE_OPEN;   int    Fast_Mode  = MODE_EMA;   maF1=iMA(Symbol(),0,Fast_Period,0,Fast_Mode,Fast_Price,0);   int    Slow_Price = PRICE_OPEN;   int    Slow_Mode  = MODE_SMMA;   maS1=iMA(Symbol(),0,Slow_Period,0,Slow_Mode,Slow_Price,0);   diverge=(maF1-maS1);      ObjectDelete("Cmmt");   ObjectCreate("Cmmt", OBJ_TEXT, 0, Time[20], High[20]+(10*p));   ObjectSetText("Cmmt","Divergence="+DoubleToStr(diverge,4),10,"Arial",White);   if( diverge>= DVBuySell       && diverge<= DVStayOut       ) BUYme=true;   if( diverge<=(DVBuySell*(-1)) && diverge>=(DVStayOut*(-1)) ) SELLme=true;      if(FileData)     {      tickcount++;      iFileHandle = FileOpen("eaDivergence07", FILE_CSV|FILE_READ|FILE_WRITE, ",");      FileSeek(iFileHandle, 0, SEEK_END);      FileWrite(iFileHandle, bartick, " ", tickcount, " ", diverge);      FileFlush(iFileHandle);      FileClose(iFileHandle);     }   //+------------+   //| End Insert |   //+------------+   //ENTRY LONG (buy, Ask)    if(TradeAllowed && BUYme)      {       //Ask(buy, long)      if(LossLimit ==0) SL=0; else SL=Ask-( (LossLimit +7)*Point );      if(ProfitMade==0) TP=0; else TP=Ask+( (ProfitMade+7)*Point );      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,TradeComment,MagicNumber,White);      gle=GetLastError();      if(gle==0)        {         Print("BUY  Ask=",Ask," bartick=",bartick);         ObjectCreate("myx"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], High[0]+(5*p));         ObjectSetText("myx"+DoubleToStr(objtick,0),"B",15,"Arial",Red);         bartick=0;         TradeAllowed=false;        }         else         {         Print("-----ERROR----- BUY  Ask=",Ask," error=",gle," bartick=",bartick);        }     }           //ENTRY SHORT (sell, Bid)   if(TradeAllowed && SELLme)     {      //Bid (sell, short)      if(LossLimit ==0) SL=0; else SL=Bid+((LossLimit+7)*Point );      if(ProfitMade==0) TP=0; else TP=Bid-((ProfitMade+7)*Point );      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,TradeComment,MagicNumber,Red);      gle=GetLastError();      if(gle==0)        {         Print("SELL Bid=",Bid," bartick=",bartick);          ObjectCreate("myx"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], High[0]+(5*p));         ObjectSetText("myx"+DoubleToStr(objtick,0),"S",15,"Arial",Red);         bartick=0;         TradeAllowed=false;        }         else         {         Print("-----ERROR----- SELL Bid=",Bid," error=",gle," bartick=",bartick);        }     }        //Basket profit or loss   CurrentBasket=AccountEquity()-AccountBalance();      if(CurrentBasket>maxEquity) maxEquity=CurrentBasket;   if(CurrentBasket<minEquity) minEquity=CurrentBasket;      // actual basket closure   if( CurrentBasket>=BasketProfit || CurrentBasket<=(BasketLoss*(-1)) )     {      CloseEverything();     }    // CLOSE order if profit target made   for(cnt=OrdersTotal();cnt>=0;cnt--)     {      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);      if( OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber )        {                 if(OrderType()==OP_BUY)           {            CurrentProfit=Bid-OrderOpenPrice() ;            // modify for break even            if (CurrentProfit >= PLBreakEven*p && OrderOpenPrice()>OrderStopLoss())              {               SL=OrderOpenPrice()+(spread*2);               TP=OrderTakeProfit();               OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP, White);               gle=GetLastError();               if(gle==0)                 {                  Print("MODIFY BREAKEVEN BUY  Bid=",Bid," bartick=",bartick);                   ObjectCreate("myz"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], Low[0]-(7*p));                  ObjectSetText("myz"+DoubleToStr(objtick,0),"BE",15,"Arial",White);                 }                  else                  {                  Print("-----ERROR----- MODIFY BREAKEVEN BUY  Bid=",Bid," error=",gle," bartick=",bartick);                 }              }            // modify for trailing stop            if(CurrentProfit >= TrailStop*p )              {               SL=Bid-(TrailStop*p);               TP=OrderTakeProfit();               OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP, White);               gle=GetLastError();               if(gle==0)                 {                  Print ("MODIFY TRAILSTOP BUY  StopLoss=",SL,"  bartick=",bartick,"OrderTicket=",OrderTicket()," CurrProfit=",CurrentProfit);                   ObjectCreate("myz"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], Low[0]-(7*p));                  ObjectSetText("myz"+DoubleToStr(objtick,0),"TS",15,"Arial",White);                 }                  else                  {                  Print("-----ERROR----- MODIFY TRAILSTOP BUY  Bid=",Bid," error=",gle," bartick=",bartick);                 }              }            // did we make our desired BUY profit            // or did we hit the BUY LossLimit            if((ProfitMade>0 && CurrentProfit>=(ProfitMade*p)) || (LossLimit>0 && CurrentProfit<=((LossLimit*(-1))*p))  )              {               OrderClose(OrderTicket(),Lots,Bid,Slippage,White);               gle=GetLastError();               if(gle==0)                 {                  Print("CLOSE BUY  Bid=",Bid," bartick=",bartick);                   ObjectCreate("myz"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], Low[0]-(7*p));                  ObjectSetText("myz"+DoubleToStr(objtick,0),"C",15,"Arial",White);                 }                  else                  {                  Print("-----ERROR----- CLOSE BUY  Bid=",Bid," error=",gle," bartick=",bartick);                 }              }                         } // if BUY         if(OrderType()==OP_SELL)           {            CurrentProfit=OrderOpenPrice()-Ask;                        // modify for break even            if (CurrentProfit >= PLBreakEven*p && OrderOpenPrice()<OrderStopLoss())              {               SL=OrderOpenPrice()-(spread*2);               TP=OrderTakeProfit();               OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP, Red);               gle=GetLastError();               if(gle==0)                 {                  Print("MODIFY BREAKEVEN SELL Ask=",Ask," bartick=",bartick);                  ObjectCreate("myz"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], Low[0]-(7*p));                  ObjectSetText("myz"+DoubleToStr(objtick,0),"BE",15,"Arial",Red);                 }                  else                  {                  Print("-----ERROR----- MODIFY BREAKEVEN SELL Ask=",Ask," error=",gle," bartick=",bartick);                 }              }            // modify for trailing stop            if(CurrentProfit >= TrailStop*p)              {               SL=Ask+(TrailStop*p);               TP=OrderTakeProfit();               OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP, Red);               gle=GetLastError();               if(gle==0)                 {                  Print ("MODIFY TRAILSTOP SELL StopLoss=",SL,"  bartick=",bartick,"OrderTicket=",OrderTicket()," CurrProfit=",CurrentProfit);                   ObjectCreate("myz"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], Low[0]-(7*p));                  ObjectSetText("myz"+DoubleToStr(objtick,0),"TS",15,"Arial",Red);                 }                  else                  {                  Print("-----ERROR----- MODIFY TRAILSTOP SELL Ask=",Ask," error=",gle," bartick=",bartick);                 }              }            // did we make our desired SELL profit?            if( (ProfitMade>0 && CurrentProfit>=(ProfitMade*p)) || (LossLimit>0 && CurrentProfit<=((LossLimit*(-1))*p))  )              {               OrderClose(OrderTicket(),Lots,Ask,Slippage,Red);               gle=GetLastError();               if(gle==0)                 {                  Print("CLOSE SELL Ask=",Ask," bartick=",bartick);                  ObjectCreate("myz"+DoubleToStr(objtick,0), OBJ_TEXT, 0, Time[0], Low[0]-(7*p));                  ObjectSetText("myz"+DoubleToStr(objtick,0),"C",15,"Arial",Red);                 }                  else                  {                  Print("-----ERROR----- CLOSE SELL Ask=",Ask," error=",gle," bartick=",bartick);                 }                               }           } //if SELL                   } // if(OrderSymbol)             } // for  } // start()//+-----------------+//| CloseEverything |//+-----------------+// Closes all OPEN and PENDING ordersint CloseEverything()  {   double myAsk;   double myBid;   int    myTkt;   double myLot;   int    myTyp;   int i;   bool result = false;       for(i=OrdersTotal();i>=0;i--)     {      OrderSelect(i, SELECT_BY_POS);      myAsk=MarketInfo(OrderSymbol(),MODE_ASK);                  myBid=MarketInfo(OrderSymbol(),MODE_BID);                  myTkt=OrderTicket();      myLot=OrderLots();      myTyp=OrderType();                  switch( myTyp )        {         //Close opened long positions         case OP_BUY      :result = OrderClose(myTkt, myLot, myBid, Slippage, Red);         break;               //Close opened short positions         case OP_SELL     :result = OrderClose(myTkt, myLot, myAsk, Slippage, Red);         break;         //Close pending orders         case OP_BUYLIMIT :         case OP_BUYSTOP  :         case OP_SELLLIMIT:         case OP_SELLSTOP :result = OrderDelete( OrderTicket() );       }          if(result == false)        {         Alert("Order " , myTkt , " failed to close. Error:" , GetLastError() );         Print("Order " , myTkt , " failed to close. Error:" , GetLastError() );         Sleep(3000);        }        Sleep(1000);     } //for    } // closeeverything

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -