////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // INDICATOR SF_HMAOUI // // DESCRIPTION This is an indicator that I got from the forex forum from a guy called HMAOUI. Very interesting approach // // http://www.forexfactory.com/showthread.php?t=278211 // // // // Author: lawrence_reid@bluewin.ch 23/03/2011 (Version date) // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Indicator SF_HMAOUI; input // Parameters for the chart G_Indicator_type(integer) = 2, // 1 SMA, 2 EMA, 3 WMA G_STOC_limit = 79.5, G_MA_direction_period(integer) = 3, AutoAlarms=false; draw LTF_xMA03_Indicator("xMA03", solid_line, yellow, 2), LTF_xMA05_Indicator("xMA05", solid_line, yellow, 1), LTF_xMA08_Indicator("xMA08", solid_line, yellow, 1), LTF_xMA10_Indicator("xMA10", solid_line, yellow, 1), LTF_xMA12_Indicator("xMA12", solid_line, yellow, 2), LTF_xMA15_Indicator("xMA15", solid_line, green, 3), HTF_xMA30_Indicator("xMA30", solid_line, cyan, 2), HTF_xMA35_Indicator("xMA35", solid_line, blue, 1), HTF_xMA40_Indicator("xMA40", solid_line, blue, 1), HTF_xMA45_Indicator("xMA45", solid_line, blue, 1), HTF_xMA50_Indicator("xMA50", solid_line, blue, 1), HTF_xMA55_Indicator("xMA55", solid_line, blue, 1), HTF_xMA60_Indicator("xMA60", solid_line, cyan, 2), HTF_xMA144_Indicator("xMA144", solid_line, brown, 3), ShowSentiment_short("Alert short", dash_line, red, 1), ShowSentiment_long("Alert long", dash_line, green, 1) ; Begin integer LTF_minutes, fst, lst, i; bool rule_ma_bullish_alignment, rule_ma_bearish_alignment, rule_ma_bullish_direction, rule_ma_bearish_direction, rule_ob_stoc, rule_os_stoc, DM_bearish, DM_bullish; lst := back(close); fst := front(close); // This calculates the number of minutes for the current chart LTF_minutes := int((timestamp[lst]-timestamp[lst-1])/60); // if ((LTF_minutes <> 5) and (LTF_minutes <> 1)) then return; // SMA if (G_Indicator_type = 1) then begin LTF_xMA03_Indicator := SMA(close,3); LTF_xMA05_Indicator := SMA(close,5); LTF_xMA08_Indicator := SMA(close,8); LTF_xMA10_Indicator := SMA(close,10); LTF_xMA12_Indicator := SMA(close,12); LTF_xMA15_Indicator := SMA(close,15); HTF_xMA30_Indicator := SMA(close,30); HTF_xMA35_Indicator := SMA(close,35); HTF_xMA40_Indicator := SMA(close,40); HTF_xMA45_Indicator := SMA(close,45); HTF_xMA50_Indicator := SMA(close,50); HTF_xMA55_Indicator := SMA(close,55); HTF_xMA60_Indicator := SMA(close,60); HTF_xMA144_Indicator := SMA(close,144); end; // EMA if (G_Indicator_type = 2) then begin LTF_xMA03_Indicator := EMA(close,3); LTF_xMA05_Indicator := EMA(close,5); LTF_xMA08_Indicator := EMA(close,8); LTF_xMA10_Indicator := EMA(close,10); LTF_xMA12_Indicator := EMA(close,12); LTF_xMA15_Indicator := EMA(close,15); HTF_xMA30_Indicator := EMA(close,30); HTF_xMA35_Indicator := EMA(close,35); HTF_xMA40_Indicator := EMA(close,40); HTF_xMA45_Indicator := EMA(close,45); HTF_xMA50_Indicator := EMA(close,50); HTF_xMA55_Indicator := EMA(close,55); HTF_xMA60_Indicator := EMA(close,60); HTF_xMA144_Indicator := EMA(close,144); end; // WMA if (G_Indicator_type = 3) then begin LTF_xMA03_Indicator := WMA(close,3); LTF_xMA05_Indicator := WMA(close,5); LTF_xMA08_Indicator := WMA(close,8); LTF_xMA10_Indicator := WMA(close,10); LTF_xMA12_Indicator := WMA(close,12); LTF_xMA15_Indicator := WMA(close,15); HTF_xMA30_Indicator := WMA(close,30); HTF_xMA35_Indicator := WMA(close,35); HTF_xMA40_Indicator := WMA(close,40); HTF_xMA45_Indicator := WMA(close,45); HTF_xMA50_Indicator := WMA(close,50); HTF_xMA55_Indicator := WMA(close,55); HTF_xMA60_Indicator := WMA(close,60); HTF_xMA144_Indicator := WMA(close,144); end; Slow_Stochastics( close, 5, 3, 3, G_STOC_limit, 100.0-G_STOC_limit); Directional_Movement(14); for i := front(Close)+G_MA_direction_period to back(close) do begin if (AutoAlarms) then begin // Sentiment check rule_ma_bullish_alignment:=false; rule_ma_bearish_alignment:=false; rule_ma_bullish_direction:=false; rule_ma_bearish_direction:=false; rule_ob_stoc:=false; rule_os_stoc:=false; DM_bearish:=false; DM_bullish:=false; // Check the directional movement if(Directional_Movement.line_minus[i] > Directional_Movement.line_plus[i]) then begin DM_bearish:=true; end; if(Directional_Movement.line_minus[i] < Directional_Movement.line_plus[i]) then begin DM_bullish:=true; end; // Check if the MAs are going up or down over the last x periods if( LTF_xMA15_Indicator[i] > LTF_xMA15_Indicator[i-G_MA_direction_period] and HTF_xMA30_Indicator[i] > HTF_xMA30_Indicator[i-G_MA_direction_period] and HTF_xMA60_Indicator[i] > HTF_xMA60_Indicator[i-G_MA_direction_period]) then begin rule_ma_bullish_direction:=true; end; if( LTF_xMA15_Indicator[i] < LTF_xMA15_Indicator[i-G_MA_direction_period] and HTF_xMA30_Indicator[i] < HTF_xMA30_Indicator[i-G_MA_direction_period] and HTF_xMA60_Indicator[i] < HTF_xMA60_Indicator[i-G_MA_direction_period]) then begin rule_ma_bearish_direction:=true; end; // CHeck if the MAs align up or down if(HTF_xMA60_Indicator[i] < HTF_xMA30_Indicator[i] and HTF_xMA30_Indicator[i] < LTF_xMA12_Indicator[i] ) then begin rule_ma_bullish_alignment:=true; end; if(HTF_xMA60_Indicator[i] > HTF_xMA30_Indicator[i] and HTF_xMA30_Indicator[i] > LTF_xMA12_Indicator[i] ) then begin rule_ma_bearish_alignment:=true; end; // Stoc check if ((Slow_Stochastics.line_k[i] > Slow_Stochastics.line_hi[i]) or (Slow_Stochastics.line_d[i] > Slow_Stochastics.line_hi[i])) then begin rule_ob_stoc:=true; end; if ((Slow_Stochastics.line_k[i] < Slow_Stochastics.line_lo[i]) or (Slow_Stochastics.line_d[i] < Slow_Stochastics.line_lo[i])) then begin rule_os_stoc:=true; end; if (rule_os_stoc and rule_ma_bullish_alignment and DM_bullish and rule_ma_bullish_direction) then begin ShowSentiment_long[i] := verticalline; end; if (rule_ob_stoc and rule_ma_bearish_alignment and DM_bearish and rule_ma_bearish_direction) then begin ShowSentiment_short[i] := verticalline; end; end;//ALarms end;// for end.