Thread: Cci_ea
View Single Post
  #7 (permalink)  
Old 02-21-2006, 07:09 PM
newdigital newdigital is online now
Administrator
 
Join Date: Sep 2005
Posts: 16,259
Blog Entries: 105
newdigital has much to be proud ofnewdigital has much to be proud ofnewdigital has much to be proud ofnewdigital has much to be proud ofnewdigital has much to be proud ofnewdigital has much to be proud ofnewdigital has much to be proud ofnewdigital has much to be proud of
BrunoFX,

I can not attach it now so I am posting the code.
I hope that there are no any bugs.


Code:
//+--------------------------------------------------------------------------+
//|                                                      CCI_ea.mq4          |
//|                                        code by Newdigital                |
//|                                        http://www.forex-tsd.com          |
//|                                           using Gordago software         |
//|                                          http://www.gordago.com          |
//|                                                                          |
//| 21.02.2006  CCI_ea by idea of BrunoFX                                    |
//| (see the thread                                                          |
//| http://www.forex-tsd.com/suggestions-trading-systems/1089-cci_ea.html    |
//|                                                                          |
//+--------------------------------------------------------------------------+

#property copyright "BrunoFX and newdigital"
#property link      "http://www.forex-tsd.com"

extern int MAGIC = 976714;

extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern double Lots = 0.10;
extern int Slippage = 4;
extern double lStopLoss = 20;
extern double sStopLoss = 20;
extern double lTakeProfit = 200;
extern double sTakeProfit = 200;
extern double lTrailingStop = 6;
extern double sTrailingStop = 6;

extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "CCI_ea";

extern string PARAMETERS_ALARM = "PARAMETERS ALARM";
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";

extern string PARAMETERS_HOURS = "TRADING HOURS";
extern bool UseHourTrade = True;  
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;

extern string PARAMETERS_INDICATOR_ONE  = "CCI";
extern int CCIPeriod=14;




void deinit() {
   Comment("");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){
   if (UseHourTrade){
      if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
         Comment("Time for trade has not come else!");
         return(0);
      } else Comment("");
   }else Comment("");
   if(Bars<100){
      Print("bars less than 100");
      return(0);
   }
   if(lStopLoss<10){
      Print("StopLoss less than 10");
      return(0);
   }
   if(lTakeProfit<10){
      Print("TakeProfit less than 10");
      return(0);
   }
   if(sStopLoss<10){
      Print("StopLoss less than 10");
      return(0);
   }
   if(sTakeProfit<10){
      Print("TakeProfit less than 10");
      return(0);
   }

   double diCCI0=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
   double diCCI1=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double diCCI2=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double d3=(0);
   double diCCI4=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
   double diCCI5=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double diCCI6=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double d7=(0);
   double diCCI8=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
   double diCCI9=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double diCCI10=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double d11=(0);
   double diCCI12=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
   double diCCI13=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double diCCI14=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
   double d15=(0);

   if(AccountFreeMargin()<(1000*Lots)){
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0);
   }
   if (!ExistPositions()){

      if ((diCCI0<diCCI1 && diCCI2>=d3)){
         OpenBuy();
         return(0);
      }

      if ((diCCI4>diCCI5 && diCCI6<=d7)){
         OpenSell();
         return(0);
      }
   }
   if (ExistPositions()){
      if(OrderType()==OP_BUY){

         if ((diCCI8>diCCI9 && diCCI10<=d11)){
            CloseBuy();
            return(0);
         }
      }
      if(OrderType()==OP_SELL){

         if ((diCCI12<diCCI13 && diCCI14>=d15)){
            CloseSell();
            return(0);
         }
      }
   }
   TrailingPositionsBuy(lTrailingStop);
   TrailingPositionsSell(sTrailingStop);
   return (0);
}

bool ExistPositions() {
	for (int i=0; i<OrdersTotal(); i++) {
		if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
			if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
				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()==MAGIC) { 
            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()==MAGIC) { 
            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); 
   if (fm && UseSound) PlaySound(NameFileSound); 
} 

void CloseBuy() { 
   bool fc; 
   fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); 
   if (fc && UseSound) PlaySound(NameFileSound); 
} 
void CloseSell() { 
   bool fc; 
   fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); 
   if (fc && UseSound) PlaySound(NameFileSound); 
} 
void OpenBuy() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossBuy(); 
   ldTake = GetTakeProfitBuy(); 
   lsComm = GetCommentForOrder(); 
   OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy); 
   if (UseSound) PlaySound(NameFileSound); 
} 
void OpenSell() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 

   ldLot = GetSizeLot(); 
   ldStop = GetStopLossSell(); 
   ldTake = GetTakeProfitSell(); 
   lsComm = GetCommentForOrder(); 
   OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell); 
   if (UseSound) PlaySound(NameFileSound); 
} 
string GetCommentForOrder() { 	return(Name_Expert); } 
double GetSizeLot() { 	return(Lots); } 
double GetStopLossBuy() { 	return (Bid-lStopLoss*Point);} 
double GetStopLossSell() { 	return(Ask+sStopLoss*Point); } 
double GetTakeProfitBuy() { 	return(Ask+lTakeProfit*Point); } 
double GetTakeProfitSell() { 	return(Bid-sTakeProfit*Point); }
Reply With Quote