Elder Impulse Indicator V2.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:6k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Elder Impulse Indicator V2
  4. //  Author/Uploader: Lal 
  5. //  E-mail:          
  6. //  Date/Time Added: 2006-02-09 17:33:09
  7. //  Origin:          Elder's Come Into My Trading Room
  8. //  Keywords:        Elder Impulse
  9. //  Level:           medium
  10. //  Flags:           exploration,indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=585
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=585
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Elder's Impulse Indicator with exploration
  17. //
  18. //------------------------------------------------------------------------------
  19. _SECTION_BEGIN("Elder Impulse");
  20. /**************************************************************************
  21. Name : Elder Impulse Indicator
  22. Coded by : Lal
  23. Date : 28.10.2005
  24. Note :  Please refer to Elder's "Come Into my Trading Room"
  25. for full details 
  26. Update : 19.Jan.2006
  27. Added Option to allow bars to be Colored as per Impulse
  28. Added explorer section to display Impulse Status
  29. along with Weekly AND Monthly Trends.
  30. 20. Jan.2006
  31. Added ability to flexibly locate Weekly and Monthly 
  32. Ribbons
  33. 9.Feb.2006
  34. Added option for use of TEMA and JMA 
  35. Added option to allow standard MACD params 
  36. ******************************************************************************/
  37. EnableTextOutput(False);
  38. // User-defined parameter for EMA periods
  39. EMA_Type = Param("EMA-1, TEMA-2, JMA-3", 2, 1, 3, 1);
  40. EMA_prds  = Param("EMA_periods", 7, 1, 30, 1);
  41. Std_MACD = Param("Standard MACD? No-0, Yes-1", 1, 0, 1, 1);
  42. Plot_fashion = Param("Bar+Arrows-1, Impulse  Bars-2", 2, 1, 2, 1);
  43. // Allow user to define Weekly and Monthly Ribbon Location and Height
  44. WR_P1 = Param("Weekly Ribbon Location", -10.5, -1000, 1000, 0.1);
  45. WR_P2 = Param("Weekly Ribbon Height", 366.5, -0.001, 500, 0.1);
  46. MR_P1 = Param("Monthly Ribbon Location", 5.2, -1000, 1000, 0.1);
  47. MR_P2 = Param("Monthly Ribbon Height", 199, -0.001, 500, 0.1);
  48. // Compute EMA and MACD Histogram
  49. if(EMA_Type == 1)
  50. {
  51. DayEMA = EMA(Close, EMA_prds);
  52. }
  53. if (EMA_Type == 2)
  54. {
  55. DayEMA = TEMA(Close, EMA_prds);
  56. }
  57. if(EMA_Type == 3)
  58. {
  59. // Line below to be used with Jurik JMA
  60. // DayEMA = JurikJMA(C, EMA_Prds);
  61. }
  62. Histogram = MACD() - Signal();
  63. // Determine if we have an Impulse UP, DOWN or None
  64. Impulse_Up = DayEMA > Ref(DayEMA, -1) AND Histogram > Ref(Histogram, -1);
  65. Impulse_Down = DayEMA < Ref(DayEMA, -1) AND Histogram < Ref(Histogram, -1);   
  66. Impulse_None = (NOT Impulse_UP) AND (NOT Impulse_Down);
  67. // Compute Weekly MACD and determine whether rising or falling
  68. // Note: uses "non-standard"  parameters!
  69. TimeFrameSet(inWeekly);
  70. if (Std_MACD == 0)
  71. {
  72. MACD_val = MACD(5, 8);
  73. Signal_val = Signal(5, 8, 5);
  74. }
  75. else
  76. {
  77. MACD_val = MACD(12, 26);
  78. Signal_val = Signal(12, 26, 9);
  79. }
  80. Hist_in_w = MACD_val - Signal_val;
  81. wh_rising = Hist_in_w > Ref(Hist_in_w, -1);
  82. wh_falling = Hist_in_w < Ref(Hist_in_w, -1);
  83. TimeFrameRestore();
  84. // Now get Monthly MACD Histogram....
  85. TimeFrameSet(inMonthly);
  86. MACD_val = MACD(5, 8);
  87. Signal_val = Signal(5, 8, 5);
  88. Hist_in_m = MACD_val - Signal_val;
  89. mh_rising = Hist_in_m > Ref(Hist_in_m, -1);
  90. mh_falling = Hist_in_m < Ref(Hist_in_m, -1);
  91. TimeFrameRestore();
  92. wh_rising  = TimeFrameExpand( wh_rising, inWeekly, expandLast ); 
  93. wh_falling  = TimeFrameExpand( wh_falling, inWeekly, expandLast); 
  94. mh_rising  = TimeFrameExpand(mh_rising, inMonthly, expandLast);
  95. mh_falling  = TimeFrameExpand(mh_falling, inMonthly, expandLast);
  96. kol  = IIf( wh_rising, colorGreen,  IIf(wh_falling, colorRed, colorLightGrey));
  97. mkol  = IIf( mh_rising, colorBlue,  IIf(mh_falling, colorYellow, colorLightGrey));
  98. // Plot them all!
  99. if (Plot_fashion == 1)
  100. {
  101. Plot(Close, "Close", colorTeal, styleBar);
  102. PlotShapes(shapeUpArrow * Impulse_Up, colorBlue, 0, Low, -12);
  103. PlotShapes(shapeDownArrow * Impulse_Down, colorRed, 0, High, -12);
  104. PlotShapes(shapeSmallCircle * Impulse_None, colorWhite, 0, High, 5);
  105. }
  106. else
  107. {
  108. bar_kol = IIf(impulse_UP, colorBlue, IIf(impulse_Down, colorRed, colorWhite));
  109. Plot(C, "Close", bar_kol, styleBar);
  110. }
  111. Plot(10, "ribbon", kol, styleOwnScale|styleArea|styleNoLabel, WR_P1, WR_P2); // Weekly trend
  112. Plot(10, "ribbon", mkol, styleOwnScale|styleArea|styleNoLabel, MR_P1, MR_P2); // Monthly Trend
  113. // Explorer Section
  114. // Determine if Impulse status is bullish, neutral or bearish.  Display as Text Column.
  115. Impulse_State = WriteIf(Impulse_Up, "Bulllish", WriteIf(Impulse_Down, "Bearish", "Neutral"));
  116. // Set the background color for Impulse Status Column
  117. Impulse_Col = IIf(Impulse_Up, colorGreen, IIf(Impulse_Down, colorRed, colorLightGrey));
  118. // Determine Weekly Trend. Display as Text Column
  119. Weekly_Trend = WriteIf(wh_rising, "Rising", WriteIf(wh_falling, "Falling", "Flat!"));
  120. Weekly_Col = IIf(wh_rising, colorGreen, IIf(wh_falling, colorRed, colorLightGrey));
  121. // Determine Monthly Trend. Display as Text Column
  122. Monthly_Trend = WriteIf(mh_rising, "Rising", WriteIf(mh_falling, "Falling", "Flat!"));
  123. Monthly_Col = IIf(mh_rising, colorGreen, IIf(mh_falling, colorRed, colorLightGrey));
  124. // Determine how many bars has the current state existed
  125. bars_in_bull = Min(BarsSince(impulse_none), BarsSince(impulse_down));
  126. bars_in_bear = Min(BarsSince(impulse_up), BarsSince(impulse_none));
  127. bars_in_neut = Min(BarsSince(impulse_down), BarsSince(impulse_up));
  128. // Set a single variable to show number of bars in current state depending upon 
  129. // actual Impulse Status - Bullish, Bearish or Neutral
  130. bars_in_state = IIf(Impulse_Up, bars_in_bull, IIf(Impulse_down, bars_in_bear, bars_in_neut));
  131. // Columns for display in Explorer 
  132. AddTextColumn(Impulse_State, "Impulse Status", 1, colorWhite, Impulse_Col);
  133. AddColumn(bars_in_state, "Bars in this state", 1, colorWhite, Impulse_col);
  134. AddTextColumn(Weekly_Trend, "Weekly Trend", 1, colorWhite, Weekly_Col);
  135. AddTextColumn(Monthly_Trend, "Monthly Trend", 1, colorWhite, Monthly_Col);
  136. Filter = 1;
  137. _SECTION_END();