//+------------------------------------------------------------------+ //| Trend Manager Open2 | //| Copyright © 2000-2007, MetaQuotes Software Corp. | //| http://www.metaquotes.ru | //+------------------------------------------------------------------+ // Look & Feel based on indicator sold at traderstradingsystem.com // No representation it is identical. // This file is licensed under the terms of the GNU General Public License V2. // (c) 2006 Matt Kennel (mbkennel@gmail.com) #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Blue //---- extern int TM_Period_1=7; extern int TM_Shift_1=2; extern int TM_Period_2=13; extern int TM_Shift_2=1; //---- int Max_Period; int Max_Shift; //---- double SpanA_Buffer[]; double SpanB_Buffer[]; int a_begin; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { Max_Shift=MathMax(TM_Shift_1,TM_Shift_2); Max_Period=MathMax(TM_Period_1,TM_Period_2); int b_begin=Max_Period+Max_Shift-1; //---- SetIndexStyle(1,DRAW_LINE,STYLE_SOLID); SetIndexBuffer(1,SpanB_Buffer); SetIndexDrawBegin(1,b_begin); SetIndexLabel(1,"TM_Period+"); // SetIndexStyle(0,DRAW_LINE,STYLE_SOLID); SetIndexBuffer(0,SpanA_Buffer); SetIndexDrawBegin(0,b_begin); SetIndexLabel(0,"TM_Period"); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i,k; int counted_bars=IndicatorCounted(); double high,low,price; //---- if(Bars<=Max_Period) return(0); if(counted_bars<1) { for(i=1;i<=Max_Period;i++) { SpanA_Buffer[Bars-i]=0; SpanB_Buffer[Bars-i]=0; } } i=Bars-Max_Period; if(counted_bars>Max_Period) i=Bars-counted_bars-1; while(i>=0) { double M1, M1b; double M2, M2b; // M1=MiddlePrice(TM_Period_1,i); M1b=MiddlePrice(TM_Period_1,i+TM_Shift_1); M2=MiddlePrice(TM_Period_2,i); M2b=MiddlePrice(TM_Period_2,i+TM_Shift_2); // double diff1=(M1-M1b); // up or down on short term; double diff2=(M2-M2b); // up or down on longer term. // each has three choices, hence six possibilities. if (diff1*diff2<=0.0) { // opposite signs SpanA_Buffer[i]=(M1+M2)*0.5; SpanB_Buffer[i]= SpanA_Buffer[i]; //Blue bars } else { SpanA_Buffer[i]=(M1+M2)*0.5; SpanB_Buffer[i]=(M1b+M2b)*0.5; } // Comment(SpanB_Buffer[i],"\n",SpanA_Buffer[i] ); i--; } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double MiddlePrice(int nback, int shift) { double H=High[Highest(NULL,0,MODE_HIGH,nback,shift)]; double L=Low[Lowest(NULL,0,MODE_LOW,nback,shift)]; //---- return( 0.5*(H+L)); } //+------------------------------------------------------------------+