HLCrossSig for WPR





//+------------------------------------------------------------------+
//|                                      HL Cross Signal for WPR.mq4 |
//|                                 Copyright © 2008, Bigeev Rustem. |
//|                                             http://www.parch.ru/ |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 6

//---- input parameters
extern int CountBars=1500;   // Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà èíäèêàòîðà
extern int P=6;              // Ïàðàìåòð ïðîáèâàåìîãî äèàïàçîíà, ÷åì áîëüøå çíà÷åíèå, òåì áîëåå ïîçäíèå ñèãíàëû è ðåæå.
extern int PMA=21;           // Ïàðàìåòð äëÿ "Heiken Ashi variable" - ñëóæèò â êà÷åñòâå äîï. ôèëüòðà.
extern int Risk=0;           // Ìàêñèìàëüíûé ðèñê â ïèïñàõ äëÿ ðàñ÷åòà óðîâíÿ âõîäà èñõîäÿ èç óðîâíÿ áëèæàéøåãî MAX/MIN
extern int ATR_P=120;        // Ïàðàìåòð äëÿ ÀÒR ñëóæèò äëÿ ðàñ÷åòà óðîâíÿ âîëàòèëüíîñòè.
extern double Q=0.7;         // Ïàðàìåòð äëÿ ïîñòàíîâêè Òåéêà. - Äîëÿ îò ðàçìåðà Ñòîïà. åñëè =1, Òåéê = Ñòîïó.
extern int Period_WPR=12;    // Ïàðàìåòðû äëÿ "WPR" - ñëóæèò â êà÷åñòâå äîï. ôèëüòðà.
extern int HLine=-38;        // Âåðõíÿÿ ñèãíàëüíàÿ ëèíèÿ äëÿ WPR
extern int LLine=-62;        // Íèæíÿÿ ñèãíàëüíàÿ ëèíèÿ äëÿ WPR

//---- buffers
double val1[];
double val2[];
double val3[];
double val4[];
double val5[];
double val6[];
double HAClose, HAOpen, HAClose1, HAOpen1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(6);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
   SetIndexBuffer(2,val3);
   SetIndexBuffer(3,val4);
   SetIndexBuffer(4,val5);
   SetIndexBuffer(5,val6);
   
   SetIndexStyle(0,DRAW_ARROW,EMPTY,1,Red);
   SetIndexArrow(0,234);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,1,Blue);
   SetIndexArrow(1,233); 
   SetIndexStyle(2,DRAW_ARROW,EMPTY,1,DarkOrange);
   SetIndexArrow(2,251); 
   SetIndexStyle(3,DRAW_ARROW,EMPTY,1,Yellow);
   SetIndexArrow(3,158); 
   SetIndexStyle(4,DRAW_ARROW,EMPTY,1,Magenta);
   SetIndexArrow(4,4); 
   SetIndexStyle(5,DRAW_ARROW,EMPTY,1,Magenta);
   SetIndexArrow(5,4); 

   SetIndexDrawBegin(0,Bars-CountBars);
   SetIndexDrawBegin(1,Bars-CountBars);
   SetIndexDrawBegin(2,Bars-CountBars);
   SetIndexDrawBegin(3,Bars-CountBars);
   SetIndexDrawBegin(4,Bars-CountBars);
   SetIndexDrawBegin(5,Bars-CountBars);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| HA Cross Signal
//+------------------------------------------------------------------+
int start()
  {      
   if (CountBars>=Bars) CountBars=Bars;

   int i,shift,counted_bars=IndicatorCounted();
   static int Flag=1;
   double LHigh,LLow,ATR,WPR_Filter,Median;
      //---- check for possible errors
   if(counted_bars<0) return(-1);

   //---- initial zero
   if(counted_bars<1)
     {
      for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;
      for(i=1;i<=CountBars;i++) val3[CountBars-i]=0.0;
      for(i=1;i<=CountBars;i++) val4[CountBars-i]=0.0;
     } 
 for (shift = CountBars; shift>=0; shift--) 
 { 
	HAOpen=iMA(NULL,0,PMA,0,MODE_SMA,PRICE_MEDIAN,shift);
   Median=iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,shift);
   LHigh=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,P,shift+1));
   LLow=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,P,shift+1));
   WPR_Filter=iWPR(NULL,0,Period_WPR,shift);
   ATR=iATR(NULL,0,ATR_P,shift);

	// Óñëîâèå ñèãíàëà íà ïîêóïêó
	if ((High[shift] >= LHigh && Close[shift] > Median && Close[shift] > HAOpen && High[shift] > HAOpen  && WPR_Filter >=HLine && Flag<0)|| 
	    (Close[shift] >= val3[shift+1] && High[shift] > LHigh && Flag<0))  
	    //|| (Median > HAClose && Median > (HAClose-HAOpen)/2 && HAClose < HAOpen && WPR_Filter >= -50 && Flag <0)) //||
	
   {
     val2[shift]= MathMin(Close[shift],(LLow+2*ATR));
     if (Risk != 0 && val2[shift]-LLow > Risk*Point) val2[shift]=LLow+Risk*10*Point; //Q=Q/2;
	  if (Close[shift] < LLow + Risk*10*Point) val2[shift]= Close[shift];
	  Flag=1;
   }    
   if (Flag>0) {val3[shift]=LLow-(Ask-Bid)*2; val4[shift]=LHigh+(Ask-Bid)*3;}  // Óðîâåíü ïîñòàíîâêè Òðåéëèíã Ñòîïà
      val5[shift]=val2[shift]+(val2[shift]-val3[shift])*Q;               


   // Óñëîâèå ñèãíàëà íà ïðîäàæó
   if ((Low[shift] <= LLow && Close[shift] < Median && Close[shift] < HAOpen && Low[shift] < HAOpen  && WPR_Filter <=LLine && Flag>0) || 
       (Close[shift] <= val3[shift+1] && Low[shift] < LLow && Flag>0)) 
       // ||(Median < HAClose && Median > (HAOpen-HAClose)/2 && HAClose > HAOpen && WPR_Filter <= -50 && Flag >0)) // || 

   {
     val1[shift]= MathMax(Close[shift],(LHigh-2*ATR));
     if (Risk != 0 && LHigh-val1[shift] > Risk*Point) val1[shift]=LHigh-Risk*10*Point; //Q=Q/2;
     if (Close[shift] > LHigh - Risk*10*Point) val1[shift]= Close[shift];
	  Flag=-1;
	}
   if (Flag<0) {val3[shift]=LHigh+(Ask-Bid)*3; val4[shift]=LLow-(Ask-Bid)*2;} // Óðîâåíü ïîñòàíîâêè Òðåéëèíã Ñòîïà
       val6[shift]=val1[shift]-(val3[shift]-val1[shift])*Q+(Ask-Bid);               
 }  
 
 return(0);
}
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

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


Indicator Curves created:


Implements a curve of type DRAW_ARROW

Indicators Used:

Moving average indicator
Larry William percent range indicator
Indicator of the average true range


Custom Indicators Used:

Order Management characteristics:

Other Features: