//+------------------------------------------------------------------+
//|                           Copyright 2005, Gordago Software Corp. |
//|                                          http://www.gordago.com/ |
//|                                                      version 2.0 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2005, Gordago Software Corp."
#property link      "http://www.gordago.com"
#define MIN_STOPLOSS_POINT 10
#define MIN_TAKEPROFIT_POINT 10 
#define MAGIC 278158
extern string sNameExpert = "Generate from Gordago";
extern int nAccount =0;
extern double dBuyStopLossPoint = 0;
extern double dSellStopLossPoint = 0;
extern double dBuyTakeProfitPoint = 0;
extern double dSellTakeProfitPoint = 0;
extern double dBuyTrailingStopPoint = 0;
extern double dSellTrailingStopPoint = 0;
extern double dLots = 0.10; 
extern int nSlippage = 5;
extern bool lFlagUseHourTrade = False;
extern int nFromHourTrade = 0;
extern int nToHourTrade = 23;
extern bool lFlagUseSound = True;
extern string sSoundFileName = "alert.wav";
extern color colorOpenBuy = Blue;
extern color colorCloseBuy = Aqua;
extern color colorOpenSell = Red;
extern color colorCloseSell = Aqua;
extern int period = 13;
void deinit() {
   Comment("");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){
   if (lFlagUseHourTrade){
      if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
         Comment("Time for trade has not come else!");
         return(0);
      }
   }
   
   if(Bars < 100){
      Print("bars less than 100");
      return(0);
   }
   
   if (nAccount > 0 && nAccount != AccountNumber()){
      Comment("Trade on account :"+AccountNumber()+" FORBIDDEN!");
      return(0);
   }
   
   if((dBuyStopLossPoint > 0 && dBuyStopLossPoint < MIN_STOPLOSS_POINT) ||
      (dSellStopLossPoint > 0 && dSellStopLossPoint < MIN_STOPLOSS_POINT)){
      Print("StopLoss less than " + MIN_STOPLOSS_POINT);
      return(0);
   }
   if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint < MIN_TAKEPROFIT_POINT) ||
      (dSellTakeProfitPoint > 0 && dSellTakeProfitPoint < MIN_TAKEPROFIT_POINT)){
      Print("TakeProfit less than " + MIN_TAKEPROFIT_POINT);
      return(0);
   }
   double diRSI0=iRSI(NULL,0,period,PRICE_CLOSE,1);
double diRSI1=iRSI(NULL,0,period,PRICE_CLOSE,1);
double diRSI2=iRSI(NULL,0,period,PRICE_CLOSE,1);
double diRSI3=iRSI(NULL,0,period,PRICE_CLOSE,1);
int vol =iVolume(NULL,5,1);
   
   
   bool lFlagBuyOpen = false, lFlagSellOpen = false, lFlagBuyClose = false, lFlagSellClose = false;
   
   lFlagBuyOpen = (diRSI0<23.6&&vol>=0);
   lFlagSellOpen = (diRSI2>76.4&&vol>=0);
   lFlagBuyClose = (diRSI1>76.4);
   lFlagSellClose = (diRSI3<23.6);
   
   if (!ExistPositions()){
      if (lFlagBuyOpen){
         OpenBuy();
         return(0);
      }
      if (lFlagSellOpen){
         OpenSell();
         return(0);
      }
   }
   if (ExistPositions()){
      if(OrderType()==OP_BUY){
         if (lFlagBuyClose){
            bool flagCloseBuy = OrderClose(OrderTicket(), OrderLots(), Bid, nSlippage, colorCloseBuy); 
            if (flagCloseBuy && lFlagUseSound) 
               PlaySound(sSoundFileName); 
            return(0);
         }
      }
      if(OrderType()==OP_SELL){
         if (lFlagSellClose){
            bool flagCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, nSlippage, colorCloseSell); 
            if (flagCloseSell && lFlagUseSound) 
               PlaySound(sSoundFileName); 
            return(0);
         }
      }
      if(OrderType()==OP_SELLLIMIT){
         if (lFlagSellClose){
            bool flagDeleteSell = OrderDelete(OrderTicket(), colorCloseSell); 
            if (flagDeleteSell && lFlagUseSound) 
               PlaySound(sSoundFileName); 
            return(0);
         }
      }
      if(OrderType()==OP_BUYLIMIT){
         if (lFlagBuyClose){
            bool flagDeleteBuy = OrderDelete(OrderTicket(), colorCloseBuy); 
            if (flagDeleteBuy && lFlagUseSound) 
               PlaySound(sSoundFileName); 
            return(0);
         }
      }
   }
   
   if (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0){
      
      for (int i=0; i<OrdersTotal(); i++) { 
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
            bool lMagic = true;
            if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
               lMagic = false;
            
            if (OrderSymbol()==Symbol() && lMagic) { 
               if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0) { 
                  if (Bid-OrderOpenPrice() > dBuyTrailingStopPoint*Point) { 
                     if (OrderStopLoss()<Bid-dBuyTrailingStopPoint*Point) 
                        ModifyStopLoss(Bid-dBuyTrailingStopPoint*Point); 
                  } 
               } 
               if (OrderType()==OP_SELL) { 
                  if (OrderOpenPrice()-Ask>dSellTrailingStopPoint*Point) { 
                     if (OrderStopLoss()>Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0)  
                        ModifyStopLoss(Ask+dSellTrailingStopPoint*Point); 
                  } 
               } 
            } 
         } 
      } 
   }
   return (0);
}
bool ExistPositions() {
	for (int i=0; i<OrdersTotal(); i++) {
		if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         bool lMagic = true;
         
         if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
            lMagic = false;
			if (OrderSymbol()==Symbol() && lMagic) {
				return(True);
			}
		} 
	} 
	return(false);
}
void ModifyStopLoss(double ldStopLoss) { 
   bool lFlagModify = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE); 
   if (lFlagModify && lFlagUseSound) 
      PlaySound(sSoundFileName); 
} 
void OpenBuy() { 
   double dStopLoss = 0, dTakeProfit = 0;
   int numorder = OrderSend(Symbol(), OP_BUY, dLots, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy); 
   if (numorder > -1)
   int numorder1 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*2, Ask-0.0008, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder1 > -1)
   int numorder2 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*3, Ask-0.0013, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder2 > -1)
   int numorder3 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*6, Ask-0.0021, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder3 > -1)
   int numorder4 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*12, Ask-0.0034, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder4 > -1)
   int numorder5 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*24, Ask-0.0055, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder5 > -1)
   int numorder6 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*48, Ask-0.0089, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder6 > -1)
   int numorder7 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*96, Ask-0.0144, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder7 > -1)
   int numorder8 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*192, Ask-0.0233, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder8 > -1)
   int numorder9 = OrderSend(Symbol(), OP_BUYLIMIT, dLots*384, Ask-0.0377, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   
   if (numorder > -1 && lFlagUseSound) 
      PlaySound(sSoundFileName);
} 
void OpenSell() { 
   double dStopLoss = 0, dTakeProfit = 0;
   
   if (dSellStopLossPoint > 0)
      dStopLoss = Ask+dSellStopLossPoint*Point;
   
   if (dSellTakeProfitPoint > 0)
      dTakeProfit = Ask-dSellTakeProfitPoint*Point;
   
   int numorder = OrderSend(Symbol(),OP_SELL, dLots, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell); 
   if (numorder > -1)
   int numorder1 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*2, Bid+0.0008, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder1 > -1)
   int numorder2 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*3, Bid+0.0013, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder2 > -1)
   int numorder3 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*6, Bid+0.0021, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder3 > -1)
   int numorder4 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*12, Bid+0.0034, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder4 > -1)
   int numorder5 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*24, Bid+0.0055, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder5 > -1)
   int numorder6 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*48, Bid+0.0089, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder6 > -1)
   int numorder7 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*96, Bid+0.0144, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder7 > -1)
   int numorder8 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*192, Bid+0.0233, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder8 > -1)
   int numorder9 = OrderSend(Symbol(), OP_SELLLIMIT, dLots*384, Bid+0.0377, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
   if (numorder > -1 && lFlagUseSound) 
      PlaySound(sSoundFileName); 
} 
             
            
            
            
            
Comments