Navigation´╝ÜHome > Content >

CCIGrab_basket_Ron_MT4_v00.mq4

Time: 2011-12-05 | Download file:CCIGrab_basket_Ron_MT4_v00.mq4

+--------+
|CCIGrab |
+--------+

Theory of operation
===================
+-100 in 2 or 3 bars, then order in proper direction
small losslimit, large profitmade

TIME FRAME
==========
whatever works best

PAIRS
=====
EURUSD

ENTRY LONG
==========
CCI < -100 to CCI > +100

ENTRY SHORT
===========
CCI > +100 to CCI < -100

EXIT
====
ProfitMade (optimized by month)

MONEY MANAGEMENT
================
none

RISK MANAGEMENT
===============
none

FAILURE MANAGEMENT
==================
GetLastError on every transaction


VERSION HISTORY
===============
00    - initial concept
01    - 

*/


// variables declared here are GLOBAL in scope

#property copyright "Ron Thompson"
#property link      "http://www.lightpatch.com/forex"

// user input
extern double Lots=0.1;
extern int    Slippage=2;
extern double ProfitMade=24;
extern double LossLimit=89;
extern int    BasketLossLimit=750;

extern int    cciperiod=3;
extern int    cciprice=0; //open
extern int    ccilevel=8;

extern double TrailStop=999;
extern int    PLBreakEven=999;
extern int    StartHour=0;
extern int    StopHour=24;

// naming and numbering
int      MagicNumber  = 200601291336;
string   TradeComment = "CCIGrab_00_";

// Bar handling
datetime bartime=0;
int      bartick=0;
int      objtick=0;

// Trade control
bool TradeAllowed=true;


//+-------------+
//| Custom init |
//|-------------+
// Called ONCE when EA is added to chart or recompiled
int init()
  {
   int i;

   //remove the old objects 
   for(i=0; i=StartHour && Hour()<=StopHour)
        {
         TradeAllowed=true;
        }
     }


   OrdersPerSymbol=0;
   for(cnt=OrdersTotal();cnt>=0;cnt--)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if( OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
        {
         OrdersPerSymbol++;
         if(OrderType()==OP_BUY) {OrdersBUY++;}
         if(OrderType()==OP_SELL){OrdersSELL++;}
        }
     }


   // insert indicator here   
   cci1=iCCI(Symbol(),0,cciperiod,cciprice,0);
   cci2=iCCI(Symbol(),0,cciperiod,cciprice,1);
   cci3=iCCI(Symbol(),0,cciperiod,cciprice,2);
   
   if( cci1<(ccilevel*(-1)) && (cci2>ccilevel        || cci3>ccilevel) ) { BUYme=true;}
   if( cci1>ccilevel        && (cci2<(ccilevel*(-1)) || cci3<(ccilevel*(-1)) ) ) { SELLme=true;}

   if(TradeAllowed)
     {
      //ENTRY LONG (buy, Ask) 
      if(BUYme)
		  {
		   //Ask(buy, long)
         SL=Ask-((LossLimit+10)*p);
         TP=Ask+((ProfitMade+10)*p);
         OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,TradeComment,MagicNumber,White);
         gle=GetLastError();
         if(gle==0)
           {
            Print("BUY  Ask=",Ask," bartick=",bartick);
            bartick=0;
            TradeAllowed=false;
           }
            else 
           {
            Print("-----ERROR----- BUY  Ask=",Ask," error=",gle," bartick=",bartick);
           }
        }
        
      //ENTRY SHORT (sell, Bid)
      if(SELLme )
        {
         //Bid (sell, short)
         SL=Bid+((LossLimit+10)*p);
         TP=Bid-((ProfitMade+10)*p);
         OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,TradeComment,MagicNumber,Red);
         gle=GetLastError();
         if(gle==0)
           {
            Print("SELL Bid=",Bid," bartick=",bartick); 
            bartick=0;
            TradeAllowed=false;
           }
            else 
           {
            Print("-----ERROR----- SELL Bid=",Bid," error=",gle," bartick=",bartick);
           }

        }

     } //if allowed


   // CLOSE order if profit target made
   for(cnt=0;cnt= PLBreakEven*p && OrderOpenPrice()>OrderStopLoss())
              {
               SL=OrderOpenPrice()+((spread*2)*p);
               TP=OrderTakeProfit();
               OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP, White);
               gle=GetLastError();
               if(gle==0)
                 {
                  Print("MODIFY BREAKEVEN BUY  Bid=",Bid," bartick=",bartick); 
                 }
                  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); 
                 }
                  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(CurrentProfit>(ProfitMade*p) || CurrentProfit<(LossLimit*(-1))*p  )
              {
               OrderClose(OrderTicket(),Lots,Bid,Slippage,White);
               gle=GetLastError();
               if(gle==0)
                 {
                  Print("CLOSE BUY  Bid=",Bid," bartick=",bartick); 
                 }
                  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()        

Recommend