doji_arrows expert1





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

/* This Expert was mand from an indicator made by Chris (HyPip).
I do not know if it will place a trade, you will have to debug it yourself.
I made it to simply show everyone how easy it is to create an Expert.
Every week I hear "I am not a programmer please make this"
or "I do not know how"
The truth is I do not know how either, but I've made 40 or 50 experts in recent months
many from indicators just like this one. All I can tell you is CUT AND PASTE
Enjoy and debug.

bobammax*/


//+------------------------------------------------------------------+
//| Doji Arrows 
//| 
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""


#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Red
extern double TakeProfit = 25; 
extern double Lots=1;
extern double TrailingStop = 10;
extern double InitialStop = 20;

extern int slip = 0;//exits only
extern double lp = 300;
extern double sp = 30;
datetime BarTime;
//---- input parameters
//extern int RISK=3;
extern double thresholdB=0.0001;
extern double thresholdS=-0.0001;
extern int SSP=9;
extern int CountBars=2000;

//---- buffers
double val1[];
double val2[];
double val3[];
double val4[];
double red0,red1,red2;
double blue0,blue1,blue2;
double cci0,cci1,rsi0,dpo0,dpo1;
double plusdi,minusdi,main;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,234);
   
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,233);
   
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,253);
   
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,253);
   
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
   SetIndexBuffer(2,val3);
   SetIndexBuffer(3,val4);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Doji Arrows                                                   |
//+------------------------------------------------------------------+
int start()
  {   

   if(BarTime == Time[0]) {return(0);}
   //new bar, update bartime
   BarTime = Time[0];


SetIndexDrawBegin(0,Bars-CountBars+SSP+1);
   SetIndexDrawBegin(1,Bars-CountBars+SSP+1);
   int i,counted_bars=IndicatorCounted();
   int K;
   bool uptrend,downtrend,ExitBuy,ExitSell,old,old2,old3,old4;
      
//----
   if(Bars<=SSP+1) return(0);
//---- initial zero
   if(counted_bars<SSP+1)
   
   {
      for(i=1;i<=0;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=0;i++) val2[CountBars-i]=0.0;
      for(i=1;i<=0;i++) val3[CountBars-i]=0.0;
      for(i=1;i<=0;i++) val4[CountBars-i]=0.0;
   }
//----
   i=CountBars-SSP-1;

   while(i>=0)
     {
    
      //dpo1=iCustom(NULL,0,"DPO",7,800,0,i+1);
      
      val1[i]=0.0; 
      val2[i]=0.0; 
      val3[i]=0.0;
      val4[i]=0.0;
      
////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
     
   //buy signal
   if ((Close[i+2] == Open[i+2]) &&
      (Close[i+1]>High[i+2]) /*&&
      (iCCI(NULL,0,14,PRICE_CLOSE,i)>100)*/)
      uptrend=true; //else uptrend=false;
   if ((!(Close[i+2] == Open[i+2])) &&
      (!(Close[i+1]>High[i+2])))
      uptrend=false;
   if ((! uptrend==old) && (uptrend==true)) 
      {
      //PlaySound("alert.wav");
      val2[i]=Low[i]-5*Point;
      //Alert(TimeMonth(CurTime()),"/",TimeDay(CurTime())," at ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"   -   Possible buy on ",Symbol()," ", Period());
      }

/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////

   //sell signal
  if ((Close[i+2] == Open[i+2]) &&
      (Close[i+1]<Low[i+2]) /*&&
      (iCCI(NULL,0,14,PRICE_CLOSE,i)<-100)*/)
      downtrend=true; //else downtrend=false;
   if ((!(Close[i+2] == Open[i+2])) &&
      (!(Close[i+1]<Low[i+2])))
    downtrend=false;
   if ((! downtrend==old2) && (downtrend==true)) 
      {
      //PlaySound("alert.wav");
      val1[i]=High[i]+5*Point;
      //Alert(TimeMonth(CurTime()),"/",TimeDay(CurTime())," at ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"   -   Possible buy on ",Symbol()," ", Period());
      }
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

   old=uptrend;
   old2=downtrend;
   old3=ExitBuy;
   old4=ExitSell;
      
      i--;
      
      // order section//----------------------------
      
       int OrderForThisSymbol=0;
   for(int x=0;x<OrdersTotal();x++){
      OrderSelect(x, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol()) OrderForThisSymbol++;
      }//end for
   if( uptrend==true&& OrderForThisSymbol==0){
      Alert("Buy order triggered for "+Symbol()+" on the "+Period()+" minute chart.");
      int BuyOrderTicket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slip,Ask-(InitialStop*Point),Ask+(TakeProfit*Point),"Buy Order placed at "+CurTime(),0,0,Green);
			
      
      }
   if(downtrend==true && OrderForThisSymbol==0){ 
      Alert("Sell order triggered for "+Symbol()+" on the "+Period()+" minute chart.");
      int SellOrderTicket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slip,Bid+(InitialStop*Point),Bid-(TakeProfit*Point),"Sell Order placed at "+CurTime(),0,0,Red);
							
      }
      
   {
   }
   
      
      // ---------------- TRAILING STOP
if(TrailingStop>0)
{ 
     OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
     if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) && 
(OrderSymbol()==Symbol()))
         {
            if(TrailingStop>0) 
              {                
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- 
Point*TrailingStop,OrderTakeProfit(),0,Aqua);
                     return(0);
                    }
                 }
              }
          }
     if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) && 
(OrderSymbol()==Symbol()))
         {
            if(TrailingStop>0)  
              {                
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if(OrderStopLoss()==0.0 || 
                     OrderStopLoss()>(Ask+Point*TrailingStop))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice
(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Aqua);
                     return(0);
                    }
                 }
              }
          }
}   
} 
     }
   return(0);
  
  
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

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


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:

Commodity channel index


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

It issuies visual alerts to the screen

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 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 : EURUSD on H1

From 2009-12-01 to 2010-01-17 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 : EURUSD on H1

From 2009-08-01 to 2009-10-01 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 : 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

Request Backtest for doji_arrows expert1


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

Pair: Period: