Brainwashing _25231c





//+------------------------------------------------------------------+
//|                                             Brainwashing #1c.mq4 |
//|                                        code by Alex.Piech.FinGeR |
//|                                        http://www.forex-tsd.com  |
//|                           buletproofing open/close/modify orders |
//|                                  and code cleanup by Nick Bilak  |
//|                                                                  |
//| 01.11.2005  #1c - i_Trend add-on by Nick Bilak                   |
//| 20.10.2005  Brainwashing #1a by Alex.Piech.FinGeR                |
//| BIG Thanks newdigital by forex-tsd.com                           |  
//| look please last Line !!!!                                       |
//+------------------------------------------------------------------+
#include <stdlib.mqh>


#property copyright "Alex.Piech.FinGeR"
#property link      "http://www.forex-tsd.com"

extern int   MAGIC=20051021;

extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern int    SLIPPAGE       = 3; 
extern double Lots           = 0.1;    
extern int    StopLoss       = 10;     
extern int    TakeProfit     = 80;     

extern bool   OnlyEnterOnFullBars     = true;
extern bool   OnlyExitOnFullBars      = true;

extern bool UseHourTrade = True;
extern int  FromHourTrade = 9;
extern int  ToHourTrade = 21;

extern bool   useCloseTradeRules = False;

extern bool   useProfitTrailing = True;   
extern int    TrailingStop   = 20;   
extern int    TrailingStep   = 3;    
  

extern string PARAMETERS_INDICATOR_ONE  = "PriceChannel_Stop_v1";
extern int    ChannelPeriod       = 9;    
extern double Risk                = 0.3; 
extern int    Nbars               = 200;

extern string PARAMETERS_INDICATOR_TWO = "Price Channel";
extern int    ChannelPeriod2=14;
extern int    Shift=0;

extern string PARAMETERS_INDICATOR_3 = "i_Trend";
extern int Bands_Period=20;
extern int Bands_Deviation=2;
extern int Power_Period=13;
extern int CountBars=300;
extern bool ItrendFilter=true;
extern double ItrendLevel=0.0;  //iTrend line must be above this level

extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern bool   UseOneAccount = False;    
extern int    NumberAccount = 0815;   
extern string Name_Expert   = "Brainwashing #1c";
extern bool   UseSound      = False;         
extern string NameFileSound = "expert.wav"; 
extern color  clOpenBuy     = LightBlue;    
extern color  clOpenSell    = LightCoral;  
extern color  clModifyBuy   = Aqua;         
extern color  clModifySell  = Tomato;       
extern color  clCloseBuy    = Blue;         
extern color  clCloseSell   = Red;          

int prevBar,ttime; 
bool bx=False;
bool sx=False;

void SetArrow(datetime t, double p, int k, color c) {
   ObjectSet("Arrow", OBJPROP_TIME1 , t);
   ObjectSet("Arrow", OBJPROP_PRICE1 , p);
   ObjectSet("Arrow", OBJPROP_ARROWCODE, k);
   ObjectSet("Arrow", OBJPROP_COLOR , c);
}

void deinit()  {
  //Comment("");
}


void start() {

   //---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;

   SetArrow(Time[0],Low[0]-5*Point,241,Gold); 
 
   bx=False;
   sx=False;


   CheckForOpen();

   if (useCloseTradeRules) CheckForClose2();

   if (useProfitTrailing)  TrailingPositions();
}



void CheckForOpen() {
   bx=False;
   sx=False;

   double ldStop=0, ldTake=0;

   if (OnlyEnterOnFullBars) {
      if (Volume[0]>1) 
         return(0);
      else
       int  lookupidx= 1;  // look at the values of the previous bar (recently completed bar)
   }
   else {
      lookupidx= 0;
   }

   if (OnlyExitOnFullBars) {
      if (Volume[0]>1) 
         return(0);
      else
       int  lookupidx2= 1;  // look at the values of the previous bar (recently completed bar)
   }
   else {
      lookupidx2= 0;
   }
 
   double Buy=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,0,lookupidx);
   double Buy1=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,3,lookupidx);
   double Sell=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,1,lookupidx);
   double Sell1=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,2,lookupidx);

   double xBuy=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,0,lookupidx2);
   double xBuy1=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,3,lookupidx2);
   double xSell=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,1,lookupidx2);
   double xSell1=iCustom(NULL, 0, "PriceChannel_Stop_v1",ChannelPeriod,Risk,1,1,Nbars,2,lookupidx2);

   double iTredn1=iCustom(NULL,0,"i_Trend",0,0,0,Bands_Period,Bands_Deviation,Power_Period,300,0,lookupidx); //green
   double iTredn2=iCustom(NULL,0,"i_Trend",0,0,0,Bands_Period,Bands_Deviation,Power_Period,300,1,lookupidx); //red
   
   if (xSell==-1 && xSell1>-1
            && ((ItrendFilter && iTredn2>ItrendLevel && iTredn2>iTredn1) ||!ItrendFilter) //iTrend filter
      ) {
      Print("dgdfgdgsdgsdgsdgdgdfhgdfhgdfhgdfghdfhdfhdfghdfhdfhgs");
      sx=True;
      CheckForClose();
   }


   if (xBuy==-1 && xBuy1>-1
            && ((ItrendFilter && iTredn1>ItrendLevel && iTredn1>iTredn2) ||!ItrendFilter) //iTrend filter
      ) {
      Print("dgdfgdgsdgsdgsdgdgsghfhdfghdfhgdfhdfhdfhdfhdfhd");
      bx=True;
      CheckForClose();
   }

   if (!ExistPosition() && ttime!=Time[0]) {
      if (Sell==-1 && Sell1>-1 
            && ((ItrendFilter && iTredn1>ItrendLevel && iTredn1>iTredn2) ||!ItrendFilter) //iTrend filter
         ) {
         if (StopLoss!=0) ldStop=Sell1-StopLoss*Point;
         if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point;
         SetOrder(OP_BUY, Ask, ldStop, ldTake);
         ttime=Time[0];
      }
      if (Buy==-1 && Buy1>-1
            && ((ItrendFilter && iTredn2>ItrendLevel && iTredn2>iTredn1) ||!ItrendFilter) //iTrend filter
         ) {
         if (StopLoss!=0) ldStop=Buy1+StopLoss*Point;
         if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point;
         SetOrder(OP_SELL, Bid, ldStop, ldTake);
         ttime=Time[0];
      }
   }


}


void CheckForClose() {
  bool bres;
  int total=OrdersTotal();

  for (int i=0; i<total; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        
        if (OrderType()==OP_BUY  && bx ) {
          bres=false;
          while (!bres) {
            RefreshRates();
            bres=OrderClose(OrderTicket(), Lots, Bid, SLIPPAGE, Aqua);
            Sleep(6000);
	         if (!bres) Print("Error closing order : ",ErrorDescription(GetLastError()));
	       }
          return;
        }
      
        if (OrderType()==OP_SELL && sx) {
          bres=false;
          while (!bres) {
            RefreshRates();
            bres=OrderClose(OrderTicket(), Lots, Ask, SLIPPAGE, Violet);
            Sleep(6000);
	         if (!bres) Print("Error closing order : ",ErrorDescription(GetLastError()));
	       }
          return;
        }
      }
    }
  }
}





//+------------------------------------------------------------------+
//| is MAGIC trade open ?                                            | 
//+------------------------------------------------------------------+
bool ExistPosition() {
  bool Exist=False;
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) Exist=True;
    }
  }
  return(Exist);
}




void SetOrder(int op, double pp, double ldStop, double ldTake) {

   if ( UseHourTrade && (Hour()<FromHourTrade || Hour()>ToHourTrade) ) return;

   int res; double prc;
   color  clOpen;
   string lsComm=GetCommentForOrder();
   if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
   res=0;
   while (res<=0) {
      RefreshRates();
      if (op==OP_BUY) prc=Ask; 
      if (op==OP_SELL) prc=Bid; 
      res=OrderSend(Symbol(),op,Lots,prc,SLIPPAGE,ldStop,ldTake,lsComm,MAGIC,0,clOpen);
      Sleep(6000);
	   if (res<0) Print("Error opening order : "+op+" - ",ErrorDescription(GetLastError()));
	}
   if (UseSound) PlaySound(NameFileSound);
}





string GetCommentForOrder() {
  return(Name_Expert);
}

void TrailingPositions() {
   int total=OrdersTotal();
  for (int i=0; i<total; 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+TrailingStep-1)*Point) {
                  RefreshRates();
                  ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (OrderOpenPrice()-Ask>TrailingStop*Point) {
              if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
                  RefreshRates();
                  ModifyStopLoss(Ask+TrailingStop*Point, clModifySell);
              }
            }
          }
       }
    }
  }
}


void CheckForClose2() {
   bool fs=False;  
   bool fs1=False;
   bool bres;

   double high=iCustom(NULL, 0, "Price Channel",ChannelPeriod2,Shift,0,0);
   double low=iCustom(NULL, 0, "Price Channel",ChannelPeriod2,Shift,1,0);
  
   if (Close[0]==low) fs1 = True;
   if (Close[0]==high) fs =  True;
 
   int total=OrdersTotal();
   for (int i=0; i<total; i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
         if (OrderType()==OP_BUY && fs) {
            bres=false;
            while (!bres) {
               RefreshRates();
               bres=OrderClose(OrderTicket(), Lots, Bid, SLIPPAGE, Aqua);
               Sleep(6000);
	            if (!bres) Print("Error closing order : ",ErrorDescription(GetLastError()));
            }
            return;
         }
         if (OrderType()==OP_SELL && fs1) {
            bres=false;
            while (!bres) {
               RefreshRates();
               bres=OrderClose(OrderTicket(), Lots, Ask, SLIPPAGE, Violet);
               Sleep(6000);
	            if (!bres) Print("Error closing order : ",ErrorDescription(GetLastError()));
	         }
            return;
         }
       }
     }
   }
}



void ModifyStopLoss(double ldStop, color clModify) {

   bool   bres;
   double ldOpen=OrderOpenPrice();
   double ldTake=OrderTakeProfit();

   bres=OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify);
   if (!bres) Print("Error closing order : ",ErrorDescription(GetLastError()));
 
   if (bres && UseSound) PlaySound(NameFileSound);
}

// BIG Thanks KimIV by russia alpari - code Stencil :)
// BIG Thanks newdigital by forex-tsd.com Idea  :)
// BIG Thanks MFX by forex-tsd.com Idea  :)
// BIG Thanks all russia FX Community's  :)

// Regards  
// Alex.Piech.FinGeR :)

// look please last Line !!!!


















































































































































// BIG Thanks all for PAYPAL Donation - regnif@gmx.net - :) 
// The Money only use for FX Project's 









Sample





Analysis



Market Information Used:

Series array that contains the lowest prices of each bar
Series array that contains open time of each bar
Series array that contains tick volumes of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:




Custom Indicators Used:
PriceChannel_Stop_v1
i_Trend
Price Channel

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

It plays sound alerts

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for Brainwashing _25231c


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: