RahnAbbott





/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                   RahnAbbott.mq4 |
//|                           Copyright © 2006, Renato P. dos Santos |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Renato P. dos Santos"
#property link "mailto:renato@reniza.com"

extern double Lots=0.01;
extern int StopLoss=20; 
extern int TakeProfit=20;
extern int TrailingStop=20;
extern int MaxTrades=5;
extern bool UseSound=False;

color clOpenBuy=DodgerBlue;
color clModiBuy=Cyan;
color clCloseBuy=Cyan;
color clOpenSell=Red;
color clModiSell=Yellow;
color clCloseSell=Yellow;
color clDelete=White;
string Name_Expert="SureShot_v01";
string NameFileSound="expert.wav";


extern int FastMAPeriod=9;
extern int MediumMAPeriod=14;
extern int SlowMAPeriod=29;
extern int FastMAMode = PRICE_OPEN;
extern int MediumMAMode = PRICE_OPEN;
extern int SlowMAMode = PRICE_OPEN;
extern int EMA_OpenLevel=2;

double FastMA=0;
double MediumMA=0;
double SlowMA=0;


void deinit() {
   Comment("");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() {

   FastMA=iMA(NULL,0,FastMAPeriod,0,MODE_SMA,FastMAMode,0);
   MediumMA=iMA(NULL,0,FastMAPeriod,0,MODE_SMA,MediumMAMode,0);
   SlowMA=iMA(NULL,0,SlowMAPeriod,0,MODE_SMA,SlowMAMode,0);

   int dir1 = Crossed1(FastMA,MediumMA,EMA_OpenLevel*Point);
   int dir2 = Crossed2(MediumMA,SlowMA,EMA_OpenLevel*Point);

   if ( MyOrdersTotal()<MaxTrades ) {
      if ( BuyCondition(dir1+dir2) ) {
         OpenBuy(Ask);
         return(0);
      }
      if ( SellCondition(dir1+dir2) ) {
         OpenSell(Bid);
         return(0);
      }
   }

   TrailingPositionsBuy(dir1); 
   TrailingPositionsSell(dir1);

   return (0);
}

int Crossed1(double line1,double line2,double tolerance) {
   static int last_dir1 = 0;
   static int current_dir1 = 0;
   if ( line1-line2>tolerance ) current_dir1 = 1; //up
   if ( line2-line1>tolerance ) current_dir1 = -1; //down
   if ( current_dir1 != last_dir1 ) { //changed
       last_dir1 = current_dir1;
       return (last_dir1);
      }
   else {
         return(0);
      }
  }

int Crossed2(double line1,double line2,double tolerance) {
   static int last_dir2 = 0;
   static int current_dir2 = 0;
   if ( line1-line2>tolerance ) current_dir2 = 1; //up
   if ( line2-line1>tolerance ) current_dir2 = -1; //down
   if ( current_dir2 != last_dir2 ) { //changed
       last_dir2 = current_dir2;
       return (last_dir2);
      }
   else {
         return(0);
      }
  }

bool BuyCondition(int direction) {
   if ( direction>0 ) 
      return(True);
   else
      return(False);
}   

bool SellCondition(int direction) {
   if ( direction<0 ) 
      return(True);
   else
      return(False);
}   

void OpenBuy(double lPrice) { 
   if ( MathAbs(lPrice-Ask)>100*Point ) { Alert("invalid price in OpenBuy!"); return(NULL); }
   double ldLot=GetSizeLot();
   double lSlip=GetSpread();
   double ldStop=GetStopLossBuy(lPrice); 
   double ldTake=GetTakeProfitBuy(lPrice); 
   string lsComm=GetCommentForOrder(); 
   OrderSend(Symbol(),OP_BUY,ldLot,lPrice,lSlip,ldStop,ldTake,lsComm,0,0,clOpenBuy); 
   if (UseSound) PlaySound(NameFileSound);
} 

void OpenSell(double lPrice) { 
   double ldLot=GetSizeLot();
   double lSlip=GetSpread();
   double ldStop=GetStopLossSell(lPrice); 
   double ldTake=GetTakeProfitSell(lPrice); 
   string lsComm=GetCommentForOrder(); 
   if ( MathAbs(lPrice-Bid)>100*Point ) { Alert("invalid price in OpenSell!"); return(NULL); }
   OrderSend(Symbol(),OP_SELL,ldLot,lPrice,lSlip,ldStop,ldTake,lsComm,0,0,clOpenSell); 
   if (UseSound) PlaySound(NameFileSound); 
} 

void TrailingPositionsBuy(int direction) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
         if ( (OrderSymbol()==Symbol()) && (OrderComment()==GetCommentForOrder()) ) { 
            if (OrderType()==OP_BUY) { 
               if ( TrailingStop==0 ) { Alert("invalid TrailingStop in TrailingPositionsBuy!"); return(NULL); }
               if ( CloseBuyCondition(direction) ) {
                  OrderClose(OrderTicket(),OrderLots(),Bid,GetSpread(),clCloseBuy); continue; }
               if ( OrderOpenPrice()<Bid-(TrailingStop+GetSpread())*Point && OrderOpenPrice()>OrderStopLoss() ) 
                  ModifyStopLoss(OrderOpenPrice(),clModiBuy); 
               if ( OrderStopLoss()<Bid-(TrailingStop+GetSpread())*Point && OrderStopLoss()>=OrderOpenPrice() ) 
                  ModifyStopLoss(Bid-(TrailingStop+GetSpread())*Point,clModiBuy); 
//               if ( OrderTakeProfit()-Bid<TrailingStop*Point/2 ) 
//                  ModifyStopLoss(Bid-TrailingStop*Point/2,clModiBuy); 
            } 
         } 
      } 
   } 
} 

void TrailingPositionsSell(int direction) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
         if ( (OrderSymbol()==Symbol()) && (OrderComment()==GetCommentForOrder()) ) { 
            if (OrderType()==OP_SELL) { 
               if ( TrailingStop==0 ) { Alert("invalid TrailingStop in TrailingPositionsSell!"); return(NULL); }
               if ( CloseSellCondition(direction) ) {
                  OrderClose(OrderTicket(),OrderLots(),Ask,GetSpread(),clCloseSell); continue; }
               if ( OrderOpenPrice()>Ask+(TrailingStop+GetSpread())*Point && OrderOpenPrice()<OrderStopLoss() ) 
                  ModifyStopLoss(OrderOpenPrice(),clModiBuy); 
               if ( OrderStopLoss()>Ask+(TrailingStop+GetSpread())*Point && OrderStopLoss()<=OrderOpenPrice() ) 
                  ModifyStopLoss(Ask+(TrailingStop+GetSpread())*Point,clModiBuy); 
//               if ( Ask-OrderTakeProfit()<TrailingStop*Point/2 ) 
//                  ModifyStopLoss(Ask+TrailingStop*Point/2,clModiSell); 
            } 
         } 
      } 
   } 
} 

void ModifyStopLoss(double ldStopLoss, double clModi) { 
   bool fm;
   fm=OrderModify(OrderTicket(),OrderOpenPrice(),
        ldStopLoss,OrderTakeProfit(),OrderExpiration(),clModi); 
   if (fm && UseSound) PlaySound(NameFileSound); 
} 

bool CloseBuyCondition(int direction) {
   if ( direction<0 )
      return(True);
   else
      return(False);
}   

bool CloseSellCondition(int direction) {
   if ( direction>0 )
      return(True);
   else
      return(False);
}   

int MyOrdersTotal() { 
   int Mytotal=0; 
   for (int i=0; i<OrdersTotal(); i++) { 
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
       if ( (OrderSymbol()==Symbol()) && (OrderComment()==GetCommentForOrder()) ) 
          Mytotal++; 
   }  
   return(Mytotal); 
} 

string GetCommentForOrder() { return(Name_Expert); } 
double GetSizeLot() { return (Lots); } 
double GetSpread() { return((Ask-Bid)/Point); }
double GetStopLossBuy(double BuyPrice) { if (StopLoss==0) return(0); else return(BuyPrice-StopLoss*Point); } 
double GetStopLossSell(double SellPrice) { if (StopLoss==0) return(0); else return(SellPrice+StopLoss*Point); } 
double GetTakeProfitBuy(double BuyPrice) { if (TakeProfit==0) return(0); else return(BuyPrice+TakeProfit*Point); } 
double GetTakeProfitSell(double SellPrice) { if (TakeProfit==0) return(0); else return(SellPrice-TakeProfit*Point); } 





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached

It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy

Other Features:

It issuies visual alerts to the screen
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-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-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 RahnAbbott


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

Pair: Period: