Farhadcrab1(使用了大量的指标,它们中的一些 MA,Stochastic,Macd,RSI

楼主  收藏   举报   帖子创建时间:  2019-05-05 04:58 回复:0 关注量:92
国外网站找的
//+-------------------------------------------------------------------------------------+
//|     FarhadCrab1.mq4                                                                 |
//|     Copyright ?2006, Farhad Farshad                                                |
//|     http://www.fxperz.com                                                           |
//|     http://farhadfarshad.com                                                        |
//|     This EA is optimized to work on                                                 |
//|     GBP/JPY & GBP/USD & EUR/USD M1  Timeframe ... if you want the optimized         |
//|     EA s for any currency pair please                                               |
//|     mail me at: info@farhadfarshad.com                                              |
//|     This is the first version of this EA. If                                        |
//|     you want the second edition ('FarhadCrab2.mq4')                                 |
//|     with considerably better performance mail me. 'FarhadMagic.mq4' and             |
//|     'Farhad2.mq4' are also available from this series.                              |
//|     (They are not free and they don't have trial version!)                          |
//|     Enjoy a better automatic investment:) with at least 100% a month.               |
//|     If you get money from this EA please donate some to poor people of your country.|
//+-------------------------------------------------------------------------------------+
#property copyright "Copyright ?2006, Farhad Farshad"
#property link      "http://www.fxperz.com"
//----
#include <stdlib.mqh>
//----
extern double lTakeProfit   =10;   // recomended  no more than 20
extern double sTakeProfit   =10;   // recomended  no more than 20
extern double takeProfit    =10;            // recomended  no more than 20
extern double stopLoss      =40;             // do not use s/l at all. Take it easy man. I'll guarantee your profit :)
extern int magicEA          =114;        // Magic EA identifier. Allows for several co-existing EA with different input values
extern double lTrailingStop =8;   // trail stop in points
extern double sTrailingStop =8;   // trail stop in points
extern color clOpenBuy      =Blue;  //Different colors for different positions
extern color clCloseBuy     =Aqua;  //Different colors for different positions
extern color clOpenSell     =Red;  //Different colors for different positions
extern color clCloseSell    =Violet;  //Different colors for different positions
extern color clModiBuy      =Blue;   //Different colors for different positions
extern color clModiSell     =Red;   //Different colors for different positions
extern int Slippage         =2;
extern double Lots          =0.05;// you can change the lot but be aware of margin. Its better to trade with 1/4 of your capital.
extern string nameEA        ="FarhadCrab1.mq4";// To "easy read" which EA place an specific order and remember me forever :)
extern double vVolume;
//----
double macdHistCurrent, macdHistPrevious, macdSignalCurrent, macdSignalPrevious, highCurrent, lowCurrent;
double stochHistCurrent, stochHistPrevious, stochSignalCurrent, stochSignalPrevious;
double sarCurrent, sarPrevious,  momCurrent, momPrevious;
double maLongCurrent, maShortCurrent, maLongPrevious, maShortPrevious, faRSICurrent;
double realTP, realSL, faMiddle, faHighest, faLowest, closeCurrent, closeCurrentD, closePreviousD;
int cnt, ticket;
bool isBuying=false, isSelling=false, isBuyClosing=false, isSellClosing=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void deinit()
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int start()
  {
   // *****This line is for some reason very important. you'd better settle all your account at the end of day.*****

   //System Stoploss based on LongTerm Moving Average (Fibo  55 day MA)
   //StopLoss For Buy Positions (Optional)
     if ((maLongCurrent>closeCurrentD) && (maLongPrevious<closePreviousD))
     {
      CloseBuyPositions();
      return(0);
     }
   //StopLoss For Sell Positions (Optional)
     if ((maLongCurrent<closeCurrentD) && (maLongPrevious>closePreviousD))
     {
      CloseSellPositions();
      return(0);
     }
   // Check for invalid bars and takeprofit
     if(Bars < 200)
     {
      Print("Not enough bars for this strategy - ", nameEA);
      return(0);
     }
      
   calculateIndicators();                      // Calculate indicators' value
   //Check for TakeProfit Conditions  
     if(lTakeProfit<10)
     {
      Print("TakeProfit less than 10 on this EA with Magic -", magicEA );
      return(0);
     }
     if(sTakeProfit<10)
     {
      Print("TakeProfit less than 10 on this EA with Magic -", magicEA);
      return(0);
     }
   //Introducing new expressions
   double faClose0           =iLow(NULL,0,0);
   double faMA1              =iMA(NULL,0,9,0,MODE_EMA,PRICE_TYPICAL,0);
   //double faMA2               = iMAonArray(faMA1,0,9,0,MODE_EMA,0);
   //double faMA4               = iMAonArray(faMA2,0,9,0,MODE_EMA,0);
   double faClose2           =iHigh(NULL,0,0);
   double faMA3              =iMA(NULL,0,9,0,MODE_SMA,PRICE_OPEN,0);
   double stochHistCurrent   =iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
   double sarCurrent         =iSAR(NULL,0,0.002,0.2,0);           // Parabolic Sar Current
   double sarPrevious        =iSAR(NULL,0,0.002,0.2,1);  //Parabolic Sar Previous
   double vVolume            =iVolume(NULL,0,0);   // Current Volume
   //double faMAvVolume         = iMAonArray(vVolume,0,9,0,MODE_SMA,0); //Simple Moving Average
   double faHighest          =Highest(NULL,PERIOD_H4,MODE_HIGH,30,0); // Highest High in an interval of time
   double faLowest           =Lowest(NULL,PERIOD_H4,MODE_LOW,30,0); //Lowest Low in an interval of time
   double faMiddle           =(faHighest+faLowest)/2; //...
   //Check Margin Requirement
     if(AccountFreeMargin()<(1000*Lots))
     {
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0);
     }
   //Buy Condition
     if (!takeBuyPositions())
     {
      //if ((faClose0>faMA1 && faBandWidth<faMABandWidth)){
        if ((faClose0>faMA1))
        {
         OpenBuy();
         //if (OrdersTotal()==1 && (faClose2<faMA3)) {OpenSell();}
         //if (OrdersTotal()==2 && (faClose2<faMA3)) {OpenSell();}
         //if (OrdersTotal()==3 && (faClose2<faMA3)) {OpenSell();}
         return(0);
        }
     }
   //Sell Condition
   //if ((faClose2<faMA3 && faBandWidth<faMABandWidth)){
     if (!takeSellPositions())
     {
        if ((faClose2<faMA3))
        {
         OpenSell();
         //if (OrdersTotal()==1 && (faClose0>faMA1)) {OpenBuy();}
         //if (OrdersTotal()==2 && (faClose0>faMA1)) {OpenBuy();}
         //if (OrdersTotal()==3 && (faClose0>faMA1)) {OpenBuy();}
         return(0);
        }
      //Close Buy Condition

     }
   //Trailing expressions
   TrailingPositionsBuy(lTrailingStop);
   TrailingPositionsSell(sTrailingStop);
   return(0);
  }
//Number of Buy Positions
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  bool takeBuyPositions()
  {
   int j ;
   if ((OrdersTotal()==0)) {j=0;}
     if (maLongCurrent<closeCurrent)
     {
      if ((CurTime()-OrderOpenTime()>300) && (sarCurrent<lowCurrent)) {j=1;}
      if ((CurTime()-OrderOpenTime()>600) && (sarCurrent<lowCurrent)) {j=2;}
      if ((CurTime()-OrderOpenTime()>900) && (sarCurrent<lowCurrent)) {j=3;}
      if ((CurTime()-OrderOpenTime()>1200) && (sarCurrent<lowCurrent)) {j=4;}
      if ((CurTime()-OrderOpenTime()>1500) && (sarCurrent<lowCurrent)) {j=5;}
      if ((CurTime()-OrderOpenTime()>1800) && (sarCurrent<lowCurrent)) {j=6;}
      if ((CurTime()-OrderOpenTime()>2100) && (sarCurrent<lowCurrent)) {j=7;}
      if ((CurTime()-OrderOpenTime()>2400) && (sarCurrent<lowCurrent)) {j=8;}
      if ((CurTime()-OrderOpenTime()>2700) && (sarCurrent<lowCurrent)) {j=9;}
      if ((CurTime()-OrderOpenTime()>3000) && (sarCurrent<lowCurrent)) {j=10;}
      if ((CurTime()-OrderOpenTime()>3300) && (sarCurrent<lowCurrent)) {j=11;}
      if ((CurTime()-OrderOpenTime()>3600) && (sarCurrent<lowCurrent)) {j=12;}
      if ((CurTime()-OrderOpenTime()>3900) && (sarCurrent<lowCurrent)) {j=13;}
      if ((CurTime()-OrderOpenTime()>4200) && (sarCurrent<lowCurrent)) {j=14;}
      if ((CurTime()-OrderOpenTime()>4500) && (sarCurrent<lowCurrent)) {j=15;}
      if ((CurTime()-OrderOpenTime()>4800) && (sarCurrent<lowCurrent)) {j=16;}
      if ((CurTime()-OrderOpenTime()>5100) && (sarCurrent<lowCurrent)) {j=17;}
      if ((CurTime()-OrderOpenTime()>5400) && (sarCurrent<lowCurrent)) {j=18;}
      if ((CurTime()-OrderOpenTime()>5700) && (sarCurrent<lowCurrent)) {j=19;}
        for(int i=j; i<OrdersTotal(); i++)
        {
           if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
              if (OrderSymbol()==Symbol() && OrderMagicNumber()==magicEA)
              {
               return(True);
              }
           }
        }
     }
   return(false);
  }
//Number of Sell Positions
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  bool takeSellPositions()
  {
   int j ;
   if ((OrdersTotal()==0)) {j=0;}
     if (maLongCurrent>closeCurrent)
     {
      if ((CurTime()-OrderOpenTime()>300) && (sarCurrent>highCurrent)) {j=1;}
      if ((CurTime()-OrderOpenTime()>600) && (sarCurrent>highCurrent)) {j=2;}
      if ((CurTime()-OrderOpenTime()>900) && (sarCurrent>highCurrent)) {j=3;}
      if ((CurTime()-OrderOpenTime()>1200) && (sarCurrent>highCurrent)) {j=4;}
      if ((CurTime()-OrderOpenTime()>1500) && (sarCurrent>highCurrent)) {j=5;}
      if ((CurTime()-OrderOpenTime()>1800) && (sarCurrent>highCurrent)) {j=6;}
      if ((CurTime()-OrderOpenTime()>2100) && (sarCurrent>highCurrent)) {j=7;}
      if ((CurTime()-OrderOpenTime()>2400) && (sarCurrent>highCurrent)) {j=8;}
      if ((CurTime()-OrderOpenTime()>2700) && (sarCurrent>highCurrent)) {j=9;}
      if ((CurTime()-OrderOpenTime()>3000) && (sarCurrent>highCurrent)) {j=10;}
      if ((CurTime()-OrderOpenTime()>3300) && (sarCurrent>highCurrent)) {j=11;}
      if ((CurTime()-OrderOpenTime()>3600) && (sarCurrent>highCurrent)) {j=12;}
      if ((CurTime()-OrderOpenTime()>3900) && (sarCurrent>highCurrent)) {j=13;}
      if ((CurTime()-OrderOpenTime()>4200) && (sarCurrent>highCurrent)) {j=14;}
      if ((CurTime()-OrderOpenTime()>4500) && (sarCurrent>highCurrent)) {j=15;}
      if ((CurTime()-OrderOpenTime()>4800) && (sarCurrent>highCurrent)) {j=16;}
      if ((CurTime()-OrderOpenTime()>5100) && (sarCurrent>highCurrent)) {j=17;}
      if ((CurTime()-OrderOpenTime()>5400) && (sarCurrent>highCurrent)) {j=18;}
      if ((CurTime()-OrderOpenTime()>5700) && (sarCurrent>highCurrent)) {j=19;}
        for(int i=j; i<OrdersTotal(); i++)
        {
           if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
              if (OrderSymbol()==Symbol() && OrderMagicNumber()==magicEA)
              {
               return(True);
              }
           }
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void TrailingPositionsBuy(int trailingStop)
  {
     for(int i=0; i<OrdersTotal(); i++)
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol()==Symbol() && OrderMagicNumber()==magicEA)
           {
              if (OrderType()==OP_BUY)
              {
                 if (Bid-OrderOpenPrice()>trailingStop*Point)
                 {
                  if (OrderStopLoss()<Bid-trailingStop*Point)
                     ModifyStopLoss(Bid-trailingStop*Point);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void TrailingPositionsSell(int trailingStop)
  {
     for(int i=0; i<OrdersTotal(); i++)
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol()==Symbol() && OrderMagicNumber()==magicEA)
           {
              if (OrderType()==OP_SELL)
              {
                 if (OrderOpenPrice()-Ask>trailingStop*Point)
                 {
                  if (OrderStopLoss()>Ask+trailingStop*Point ||
OrderStopLoss()==0)
                     ModifyStopLoss(Ask+trailingStop*Point);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void ModifyStopLoss(double ldStopLoss)
  {
   bool fm;
   fm=OrderModify(OrderTicket(),OrderOpenPrice
   (),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void OpenBuy()
  {
   double ldLot, ldStop, ldTake;
   string lsComm;
   ldLot=GetSizeLot();
   ldStop=0;
   ldTake=GetTakeProfitBuy();
   lsComm=GetCommentForOrder();
   OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,ldStop,ldTake,nameEA,magicEA,0,clOpenBuy);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void OpenSell()
  {
   double ldLot, ldStop, ldTake;
   string lsComm;
//----
   ldLot=GetSizeLot();
   ldStop=0;
   ldTake=GetTakeProfitSell();
   lsComm=GetCommentForOrder();
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,ldStop,ldTake,nameEA,magicEA,0,clOpenSell);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetCommentForOrder() { return(nameEA); }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetSizeLot() { return(Lots); }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void calculateIndicators()
  {
   // Calculate indicators' value   
   macdHistCurrent    =iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_MAIN,0);
   macdHistPrevious   =iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_MAIN,1);
   macdSignalCurrent  =iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_SIGNAL,0);
   macdSignalPrevious =iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_SIGNAL,1);
   stochHistCurrent   =iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
   stochHistPrevious  =iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
   stochSignalCurrent =iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
   stochSignalPrevious=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);
   sarCurrent         =iSAR(NULL,0,0.009,0.2,0);           // Parabolic Sar Current
   sarPrevious        =iSAR(NULL,0,0.009,0.2,1);  //Parabolic Sar Previous
   momCurrent         =iMomentum(NULL,0,14,PRICE_OPEN,0); // Momentum Current
   momPrevious        =iMomentum(NULL,0,14,PRICE_OPEN,1); // Momentum Previous
   highCurrent        =iHigh(NULL,0,0);     //High price Current
   lowCurrent         =iLow(NULL,0,0);      //Low Price Current
   closeCurrent       =iClose(NULL,PERIOD_H4,0);  //Close Price Current for H4 Timeframe
   closeCurrentD      =iClose(NULL,PERIOD_D1,0); //Close Price Current for D1 Timeframe
   closePreviousD     =iClose(NULL,PERIOD_D1,1); //Close Price Previous for D1 Timeframe
   maLongCurrent      =iMA(NULL,PERIOD_D1,55,1,MODE_SMMA,PRICE_TYPICAL,0); //Current Long Term Moving Average
   maLongPrevious     =iMA(NULL,PERIOD_D1,55,1,MODE_SMMA,PRICE_TYPICAL,1); //Previous Long Term Moving Average
   maShortCurrent     =iMA(NULL,0,2,1,MODE_SMMA,PRICE_TYPICAL,0);  //Current Short Term Moving Average
   maShortPrevious    =iMA(NULL,0,2,1,MODE_SMMA,PRICE_TYPICAL,1);  //Previous Long Term Moving Average
   faRSICurrent       =iRSI(NULL,0,14,PRICE_TYPICAL,0); //Current RSI
   // Check for BUY, SELL, and CLOSE signal
   isBuying =false;
   isSelling=false;
   isBuyClosing=false;
   isSellClosing=false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void CloseBuyPositions()
  {
     for(int i=0; i<OrdersTotal(); i++)
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol()==Symbol() && OrderMagicNumber()==magicEA)
           {
            if (OrderType()==OP_BUY) OrderClose(OrderTicket(),Lots,Bid,Slippage);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void CloseSellPositions()
  {
     for(int i=0; i<OrdersTotal(); i++)
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol()==Symbol() && OrderMagicNumber()==magicEA)
           {
            if (OrderType()==OP_SELL) OrderClose(OrderTicket(),Lots,Ask,Slippage);
           }
        }
     }
  }
//+------------------------------------------------------------------+

打赏