MACD and histogram divergence detection.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:21k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    MACD and histogram divergence detection
  4. //  Author/Uploader: Paul Moore 
  5. //  E-mail:          paul.moore@pandora.be
  6. //  Date/Time Added: 2005-09-28 18:14:02
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           medium
  10. //  Flags:           exploration,indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=562
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=562
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  This indicator and exploration detects MACD line divergences and
  17. //  crossovers, and also detects MACD divergences.
  18. //
  19. //------------------------------------------------------------------------------
  20. _SECTION_BEGIN("MACD Divergence");
  21. //
  22. // MACD divergence system
  23. //
  24. // This system detects MACD and MACD-H positive and negative divergences, and 
  25. // crossovers.  
  26. // This indicator/expansion is based completely on indicators/explorations written
  27. // by other AFL contributors, all of them much cleverer than me. There is very 
  28. // little original work here.
  29. // As an indicator, it displays the usual MACD and MACD-H indicators. It also 
  30. // displays a shape indicating where a divergence or crossover occurs.
  31. // As an exploration, simply select n = 1, define the stock universe to be
  32. // examined, and press the "Explore" button. The detected stocks are listed
  33. // together with a red/green color-coded indication of the divergence or
  34. // crossover
  35. // Several parameters can be configured, including the minimum divergence and 
  36. // histogram widths. Configure to suit your own requirements.
  37. // This is still a work in progress, so if you have any suggestions or improvements,
  38. // please let me know via the forum.
  39. //----------------------------------------------------------------------------------
  40. //------
  41. // Setup
  42. //------
  43. // Parameters
  44. PeriodEMA = 13;
  45. MACDIndicatorRange = 50;
  46. // Volume filter
  47. VolumeFilter = Param( "Volume MA filter", 100000, 50000, 500000, 100000 );
  48. Timeframe = Interval(2);
  49. // Adjust for weekly if necessary
  50. if( Timeframe == "5-day" || Timeframe == "Weekly" ) {
  51.   VolumeFilter  = VolumeFilter * 5;
  52. }
  53. else if( Timeframe == "Monthly") {
  54.   VolumeFilter = VolumeFilter * 20;
  55. }
  56. else if( Timeframe != "Daily" ) {
  57.   VolumeFilter = 0;
  58. }
  59. // Minimum number of bars required to form a divergence pattern. For a
  60. // positive divergence, this is the number of falling bars in the context
  61. // of a rising MACD or MACD-H pattern. Vice versa for negative divergence
  62. MACDDivMinWidth = Param("Divergence min width", 4, 1, 10, 1 ); 
  63. // Minimum width of negative projecting wave between two positive MACD-H waves, 
  64. // otherwise two positive waves will be considered as one single wave. This
  65. // minimises invalid divergences, to ensure that "back of bears is broken".
  66. // The same applies for a positive wave between two negative waves.
  67. HistMinWidth = Param("Histogram min width", 4, 1, 10, 1 ); 
  68. PeriodEMA = Optimize( "PeriodEMA ", 13, 5, 23, 1 );
  69. // Other parameters
  70. OpenPositions = 10;
  71. ATRPeriod = 5;
  72. InitialCapital = 100000;
  73. PeriodFast = Param( "Fast EMA", 12, 2, 200, 1 );
  74. PeriodSlow = Param( "Slow EMA", 26, 2, 200, 1 );
  75. PeriodSignal = Param( "Signal EMA", 9, 2, 200, 1 );
  76. MACDInd = MACD(PeriodFast, PeriodSlow );
  77. SigInd = Signal(PeriodFast, PeriodSlow , PeriodSignal );
  78. HistInd = MACDInd - SigInd ;
  79. _N( macdStr = WriteVal( PeriodFast, 1.0 )+","+WriteVal( PeriodSlow , 1.0 ) );
  80. _N( sigStr = macdStr + ","+WriteVal( PeriodSignal , 1.0 ) );
  81. // Get displayed min and max value of MACD and MACD-H, to rescale it for better visibility
  82. scMACDMax = LastValue(HHV(Max(MACDInd, sigInd), 
  83.                   BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) ))); 
  84. scMACDMin = LastValue(LLV(Min(MACDInd, sigInd), 
  85.                   BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) ))); 
  86. scaleMACD = Max( abs(scMACDMax), abs(scMACDMin) ); 
  87. scHistMax = LastValue(HHV(HistInd, 
  88.             BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) ))); 
  89. scHistMin = LastValue(LLV(HistInd, 
  90.             BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) ))); 
  91. scaleHist = Max( abs(scHistMax), abs(scHistMin) ); 
  92. Plot( HistInd, "", colorLightBlue, styleHistogram  | styleOwnScale | styleThick , 
  93.       -scaleHist * 1.2, scaleHist * 1.2);
  94. Plot( MACDInd, "", colorGreen);
  95. Plot( SigInd , "", colorRed);
  96. Plot( scaleMACD * 1.2,"",colorRed,styleNoDraw);
  97. Plot( -scaleMACD* 1.2 ,"",colorRed,styleNoDraw); 
  98. GraphXSpace = 0;
  99. Title = EncodeColor(colorBlue) + Name() + " - MACD: M(" + macdStr + ") = " 
  100.         + WriteVal(MACDInd,1.3) + ", S(" + sigStr + ") = " 
  101.         + WriteVal(SigInd,1.3) + ", H = " + WriteVal(HistInd,1.3);
  102. // If current symbol is NOT an index, compare volume MA to filter limit
  103. VolumeMA = MA( V, 50 );
  104. if( IsIndex() ) {
  105.   VolumeMABool = True;
  106. }
  107. else {
  108.   VolumeMABool = IsTrue( VolumeMA > VolumeFilter );
  109. }
  110. // Get MACD-H, EMA, Stochastics and RSI arrays
  111. DayHist = MACD( PeriodFast, PeriodSlow ) - 
  112.           Signal( PeriodFast, PeriodSlow, PeriodSignal );
  113. DayEMA = EMA( Close, PeriodEMA );
  114. DaySTO = StochK( 14 );
  115. DayRSI = RSI( 14 );
  116. DayBuyBool = IsTrue( 
  117.                 ( // DayEMA > Ref(DayEMA,-1)  // EMA rising
  118.                   DaySTO < 70                 // STO not overbought
  119.                   // AND DayRSI > Ref(DayRSI,-1) // RSI rising
  120.                   AND MACD( PeriodFast, PeriodSlow ) < 0 )
  121.                 OR Timeframe == "5-day" OR Timeframe == "Weekly"
  122.               );
  123. DaySellBool = IsTrue( 
  124.                 ( // DayEMA < Ref(DayEMA,-1)  // EMA falling
  125.                   DaySTO > 30                 // STO not oversold
  126.                   // AND DayRSI < Ref(DayRSI,-1) // RSI falling
  127.                   AND MACD( PeriodFast, PeriodSlow ) > 0 )
  128.                 OR Timeframe == "5-day" OR Timeframe == "Weekly"
  129.               );
  130. //--------------------------
  131. // Positive MACD divergences
  132. //--------------------------
  133. // Get array containing for each element, when the MACD's lowest
  134. // value occur, within the specified number of bars
  135. MACDLowBars = LLVBars( MACDInd, MACDDivMinWidth );
  136. // Get array defining if the MACD's previous bar was the 
  137. // minimum, AND if that MACD value < 0
  138. MACDMinCond = MACDLowBars > 0 AND 
  139.         Ref(MACDLowBars,-1) == 0 AND 
  140.         Ref(MACDInd,-1) < 0;
  141. // Get array containing MACD low bar values where lows
  142. // occured, all other bars filled with 0
  143. MACDLowVal = IIf( MACDMinCond , Ref(MACDInd,-1), 0 );
  144. // Get array containing MACD low bar value at bar where MACD 
  145. // low occured, all other bars filled with preceding MACD 
  146. // low value (chandelier)
  147. MACDLowSteps = ValueWhen( Ref(MACDMinCond,0), 
  148.                           Ref(MACDInd,-1), 1 );
  149. // Get array containing price low bar values where lows
  150. // occured, all other bars filled with huge number
  151. PriceMACDLowVal = IIf( MACDMinCond, 
  152.                        Ref(LLV(L,MACDDivMinWidth ),-1), 
  153.                        2000000 );
  154. // Get array containing local price low bar value at bar 
  155. // where MACD low occured, all other bars filled with preceding 
  156. // price low value (chandelier)
  157. PriceMACDLowSteps = ValueWhen( Ref(MACDMinCond ,0), 
  158.                                LLV(L,MACDDivMinWidth ) );
  159. // Get array containing differences in MACD low bar values
  160. MACDLowDiffs = MACDLowSteps - Ref(MACDLowSteps,-1); 
  161. // Get array containing differences in price low bar values
  162. PriceMACDLowDiffs = PriceMACDLowSteps - Ref(PriceMACDLowSteps,-1);
  163. // Get array defining positive divergences
  164. MACDLowBarDiffs = Ref( BarsSince(MACDMinCond ), -1 );
  165. // Divergence signal
  166. MACDPosDivergence = // MACDLowDiffs > 0 AND 
  167.          MACDLowVal < 0 
  168.          AND MACDLowVal > LLV(MACDLowVal, MACDIndicatorRange ) 
  169.          AND PriceMACDLowVal < LLV(Ref(PriceMACDLowVal,-1), MACDIndicatorRange ) 
  170.          AND PriceMACDLowDiffs < 0 
  171.          AND MACDLowBarDiffs < MACDIndicatorRange  
  172.          AND VolumeMABool 
  173.          AND C > 1.0
  174.          // AND WeekBuyBool
  175.          ;
  176. //--------------------------
  177. // Negative MACD divergences
  178. //--------------------------
  179. // Get array containing for each element, when the MACD's highest
  180. // value occur, within the specified number of bars
  181. MACDHighBars = HHVBars( MACDInd, MACDDivMinWidth );
  182. // Get array defining if the MACD's previous bar was the 
  183. // maximum, AND if that MACD value > 0
  184. MACDMaxCond = MACDHighBars > 0 AND 
  185.          Ref(MACDHighBars,-1) == 0 AND 
  186.          Ref(MACDInd,-1) > 0;
  187. // Get array containing MACD high bar values where highs
  188. // occured, all other bars filled with 0
  189. MACDHighVal = IIf( MACDMaxCond, 
  190.                    Ref(MACDInd,-1), 0);
  191. // Get array containing MACD high bar value at bar where MACD 
  192. // high occured, all other bars filled with preceding MACD 
  193. // high value (chandelier)
  194. MACDHighSteps = ValueWhen( Ref(MACDMaxCond,0), 
  195.                            Ref(MACDInd,-1), 1 );
  196. // Get array containing MACD high bar values where highs
  197. // occured, all other bars filled with 0
  198. PriceMACDHighVal = IIf( MACDMaxCond, 
  199.                         Ref(HHV(H,MACDDivMinWidth),-1), 
  200.                         0);
  201. // Get array containing local price high bar value at bar 
  202. // where MACD high occured, all other bars filled with preceeding 
  203. // price high value (chandelier)
  204. PriceMACDHighSteps = ValueWhen( Ref(MACDMaxCond,0), 
  205.                                 HHV(H,MACDDivMinWidth) );
  206. // Get array containing differences in MACD high bar values
  207. MACDHighDiffs = MACDHighSteps - Ref(MACDHighSteps,-1);
  208. // Get array containing differences in price high bar values
  209. PriceMACDHighDiffs = PriceMACDHighSteps - Ref(PriceMACDHighSteps,-1);
  210. // Get array defining negative divergences
  211. MACDHighBarDiffs = Ref( BarsSince(MACDMaxCond), -1 );
  212. // Divergence signal
  213. MACDNegDivergence = // MACDHighDiffs < 0 AND 
  214.          MACDHighVal > 0 
  215.          AND PriceMACDHighVal > HHV( Ref(PriceMACDHighVal,-1), MACDIndicatorRange ) 
  216.          AND MACDHighVal < HHV( MACDHighVal, MACDIndicatorRange ) 
  217.          AND PriceMACDHighDiffs > 0 
  218.          AND MACDHighBarDiffs < MACDIndicatorRange 
  219.          AND VolumeMABool 
  220.          AND C > 1.0
  221.          // AND WeekBuyBool
  222.          ;
  223. //------------------------------------
  224. // Positive MACD Histogram divergences
  225. //------------------------------------
  226. // Get array containing when positive and negative and positive 
  227. // crossovers occured
  228. HistPosCrossover = Cross( HistInd, 0 ) ;
  229. HistNegCrossover = Cross( 0, HistInd ) ;
  230. BarsSinceNegCross = BarsSince( HistNegCrossover );
  231. BarsSincePosCross = BarsSince( HistPosCrossover );
  232. // Get arrays containing for each element, when the MACD-H lowest
  233. // values occur, within the specified number of bars
  234. HistLowBars = LLVBars( HistInd, MACDDivMinWidth );
  235. // Get array defining if the MACD-H previous bar was the minimum
  236. // AND if that MACD-H value was < 0 or > 0
  237. HistMinCond = HistLowBars > 0 AND 
  238.         BarsSinceNegCross >= HistLowBars AND
  239.         Ref(HistLowBars,-1) == 0 AND 
  240.         Ref(HistInd,-1) < 0;
  241. // Get array containing MACD-H  low bar values where lows
  242. // occured, all other bars filled with 0
  243. HistLowVal = IIf( HistMinCond , Ref(HistInd,-1), 0 );
  244. // Get array containing MACD-H  low bar value at bar where MACD-H  
  245. // low occured, all other bars filled with preceding MACD-H  
  246. // low value (chandelier)
  247. HistLowSteps =  ValueWhen( Ref(HistMinCond,0), Ref(HistInd,-1), 1 );
  248. // Get array containing differences between MACD-H low bar value and the value
  249. // at previous MACD-H zero positive crossing
  250. // HistLowDiffs = HistLowSteps - ValueWhen( HistPosCrossover, HistLowSteps, 1 );
  251. HistLowDiffs = HistLowSteps - Ref(HistLowSteps,-1); 
  252. // Get array containing MACD-H min value when MACD-H < 0, all other
  253. // bars filled with 0
  254. BarsSincePrevNegCross = ValueWhen( HistNegCrossover, 
  255.                                    Ref(BarsSinceNegCross ,-1), 1 );
  256. BarsSinceWideNegCross = IIf( HistInd < 0 AND 
  257.                              BarsSincePosCross - BarsSinceNegCross < 
  258.                                  HistMinWidth,                             
  259.                              BarsSincePrevNegCross + BarsSinceNegCross + 1,
  260.                              BarsSinceNegCross  );
  261. HistMinSteps = IIf( !BarsSinceWideNegCross,
  262.                     HistInd, 
  263.                     LLV( HistInd , BarsSinceWideNegCross + 1) );                   
  264. // Get array containing differences in MACD-H max bar values
  265. HistMinDiffs = IIf( HistInd < 0, 
  266.                     HistMinSteps - Ref(HistMinSteps,-1),
  267.                     0);
  268. // Get minumum from previous MACD-H negative wave
  269. // Plot( ValueWhen( HistNegCrossover, Ref(HistMinSteps,-1), 1 ),"PrevHistMinSteps-1", colorGreen );
  270. // Plot( ValueWhen( HistNegCrossover, Ref(HistMinSteps,-1), 2 ),"PrevHistMinSteps-1", colorGreen );
  271. PrevHistMinSteps = IIf( HistInd < 0 AND 
  272.                         BarsSincePosCross - BarsSinceNegCross < 
  273.                             HistMinWidth,
  274.                         ValueWhen( HistNegCrossover, 
  275.                                    Ref(HistMinSteps,-1), 2 ),
  276.                         ValueWhen( HistNegCrossover, 
  277.                                    Ref(HistMinSteps,-1), 1 ) );
  278. // Get array containing price low bar values where lows
  279. // occured, all other bars filled with huge number
  280. PriceHistLowVal = IIf( HistMinCond, 
  281.                        Ref(LLV(L,MACDDivMinWidth),-1), 
  282.                        2000000 );
  283. // Get array containing local price low bar value at bar 
  284. // where MACD-H low occured, all other bars filled with preceding 
  285. // price low value (chandelier)
  286. PriceHistLowSteps = ValueWhen( Ref(HistMinCond ,0), 
  287.                                LLV(L,MACDDivMinWidth) );
  288. // Get array containing differences in price low bar values
  289. PriceHistLowDiffs = PriceHistLowSteps - Ref(PriceHistLowSteps,-1);
  290. // Get array containing price low minimum value when MACD-H < 0, 
  291. // all other bars filled with 0
  292. PriceHistMinSteps = IIf( !BarsSinceNegCross, 
  293.                           L, 
  294.                           LLV( L , BarsSinceNegCross) );
  295. // Get minimum from previous MACD-H negative wave
  296. PrevPriceHistMinSteps = IIf( BarsSincePosCross - BarsSinceNegCross < 
  297.                                 HistMinWidth,
  298.                              ValueWhen( HistNegCrossover, 
  299.                                         Ref(PriceHistMinSteps,-1), 2 ),
  300.                              ValueWhen( HistNegCrossover, 
  301.                                         Ref(PriceHistMinSteps,-1), 1 ) );
  302. // Divergence signal
  303. HistPosDivergence = // HistLowDiffs > 0 AND 
  304.          // AND PriceHistLowDiffs < 0 
  305.          HistMinSteps > PrevHistMinSteps 
  306.          AND PriceHistMinSteps < PrevPriceHistMinSteps 
  307.          AND HistLowVal < 0 
  308.          AND VolumeMABool 
  309.          AND C > 1.0
  310.          ;
  311. //------------------------------------
  312. // Negative MACD Histogram divergences
  313. //------------------------------------
  314. // Get arrays containing for each element, when the MACD-H highest values 
  315. // occur, within the specified number of bars
  316. HistHighBars = HHVBars( HistInd, MACDDivMinWidth );
  317. // Get array defining if the MACD-H previous bar was the maximum, 
  318. // AND if that MACD-H value was < 0 OR > 0
  319. HistMaxCond = HistHighBars > 0 
  320.          AND BarsSincePosCross >=  HistHighBars 
  321.          AND Ref(HistHighBars,-1) == 0 
  322.          AND Ref(HistInd,-1) > 0
  323.          ;
  324. // Get array containing MACD-H high bar values where highs
  325. // occured, all other bars filled with 0
  326. HistHighVal = IIf( HistMaxCond, Ref(HistInd,-1), 0);
  327. // Get array containing MACD-H high bar value at bar where MACD-H 
  328. // high occured, all other bars filled with preceding MACD-H 
  329. // high value (chandelier)
  330. HistHighSteps = ValueWhen( Ref(HistMaxCond,0), 
  331.                            Ref(HistInd,-1), 1 );
  332. // Get array containing differences in MACD-H high bar values
  333. HistHighDiffs = HistHighSteps - Ref(HistHighSteps,-1);
  334. // Get array containing MACD-H max value when MACD-H > 0, all other
  335. // bars filled with 0
  336. BarsSincePrevPosCross = ValueWhen( HistPosCrossover, 
  337.                                    Ref(BarsSincePosCross ,-1), 1 );
  338. BarsSincePrevNegCross = ValueWhen( HistNegCrossover, 
  339.                                    Ref(BarsSinceNegCross ,-1), 1 );
  340. BarsSinceWidePosCross = IIf( HistInd > 0 AND 
  341.                              BarsSinceNegCross - BarsSincePosCross < 
  342.                                 HistMinWidth,                             
  343.                              BarsSincePrevPosCross + BarsSincePosCross + 1,
  344.                              BarsSincePosCross  );
  345. HistMaxSteps = IIf( !BarsSinceWidePosCross,
  346.                     HistInd, 
  347.                     HHV( HistInd , BarsSinceWidePosCross + 1) );
  348. // Get array containing differences in MACD-H max bar values
  349. HistMaxDiffs = IIf( HistInd > 0, 
  350.                     HistMaxSteps - Ref(HistMaxSteps,-1),
  351.                     0);
  352. // Get high from pevious MACD-H positive wave
  353. PrevHistMaxSteps = IIf( HistInd > 0 AND 
  354.                         BarsSinceNegCross - BarsSincePosCross < 
  355.                             HistMinWidth,
  356.                         ValueWhen( HistPosCrossover, 
  357.                                    Ref(HistMaxSteps,-1), 2 ),
  358.                         ValueWhen( HistPosCrossover, 
  359.                                    Ref(HistMaxSteps,-1), 1 ) );
  360. // Get array containing MACD-H high bar values where highs
  361. // occured, all other bars filled with 0
  362. PriceHistHighVal = IIf( HistMaxCond, 
  363.                         Ref(HHV(H,MACDDivMinWidth),-1), 
  364.                         0);
  365. // Get array containing local price high bar value at bar 
  366. // where MACD-H high occured, all other bars filled with preceeding 
  367. // price high value (chandelier)
  368. PriceHistHighSteps = ValueWhen( Ref(HistMaxCond,0), 
  369.                                 HHV(H,MACDDivMinWidth) );
  370. // Get array containing differences in price high bar values
  371. PriceHistHighDiffs = PriceHistHighSteps - Ref(PriceHistHighSteps,-1);
  372. // Get array containing MACD-H max value when MACD-H > 0, all other
  373. // bars filled with 0
  374. PriceHistMaxSteps = IIf( !BarsSincePosCross, 
  375.                          H, 
  376.                          HHV( H , BarsSincePosCross) );
  377. // Get high from pevious MACD-H positive wave
  378. PrevPriceHistMaxSteps = IIf( BarsSinceNegCross - BarsSincePosCross < 
  379.                                  HistMinWidth,
  380.                              ValueWhen( HistPosCrossover, 
  381.                                         Ref(PriceHistMaxSteps,-1), 2 ),
  382.                              ValueWhen( HistPosCrossover, 
  383.                                         Ref(PriceHistMaxSteps,-1), 1 ) );
  384. // Divergence signal
  385. HistNegDivergence = // HistHighDiffs < 0 AND 
  386.          // AND PriceHistHighDiffs > 0 
  387.          HistMaxSteps < PrevHistMaxSteps 
  388.          AND PriceHistMaxSteps > PrevPriceHistMaxSteps 
  389.          AND HistHighVal > 0 
  390.          AND VolumeMABool 
  391.          AND C > 1.0
  392.          ;
  393. //-----------------------
  394. // MACD crossover signals
  395. //-----------------------
  396. PosCrossover = Cross( DayHist, 0 ) 
  397.         AND DayBuyBool
  398.         AND VolumeMABool
  399.         AND C > 1.0
  400.         ;
  401. NegCrossover = Cross( 0, DayHist ) 
  402.         AND DaySellBool
  403.         AND VolumeMABool
  404.         AND C > 1.0
  405.         ;
  406. // Plot signals
  407. PlotShapes( IIf( HistPosDivergence , shapeSmallUpTriangle, shapeNone ),
  408.             colorBlue, 0, 0 , -12  );
  409. PlotShapes( IIf( HistNegDivergence , shapeSmallDownTriangle, shapeNone ),
  410.             colorBlue, 0, 0, -12  );
  411. PlotShapes( IIf( MACDPosDivergence , shapeUpArrow , shapeNone ),
  412.             colorBlue, 0, Graph1, -12 );
  413. PlotShapes( IIf( MACDNegDivergence , shapeDownArrow, shapeNone ),
  414.             colorBlue, 0, Graph1, -12 );
  415. PlotShapes( IIf( PosCrossover , shapeSmallCircle, shapeNone ),
  416.             colorBlue, 0, Graph1 , 0  );
  417. PlotShapes( IIf( NegCrossover , shapeSmallCircle, shapeNone ),
  418.             colorBlue, 0, Graph1 , 0  );
  419. Filter = HistPosDivergence 
  420.          OR HistNegDivergence 
  421.          OR PosCrossover 
  422.          OR NegCrossover 
  423.          OR MACDPosDivergence 
  424.          OR MACDNegDivergence 
  425.          ;
  426. if( Sector = SectorID( 0 ) >= 0 )
  427. {
  428.   Sector = SectorID( 1 );
  429.   Industry = IndustryID( 1 );
  430. }
  431. else
  432. {
  433.   Sector = "MG";
  434.   Industry = "MG";
  435. }
  436. AddColumn( 32, "H-PD", formatChar, colorDefault,
  437.            IIf(Filter && HistPosDivergence,colorBrightGreen,colorDefault) );
  438. AddColumn( 32, "M-PD", formatChar, colorDefault,
  439.            IIf(Filter && MACDPosDivergence,colorBrightGreen,colorDefault)  );
  440. AddColumn( 32, "M-PC", formatChar, colorDefault,
  441.            IIf(Filter && PosCrossover,colorBrightGreen,colorDefault) );
  442. AddColumn( 32, "H-ND", formatChar, colorDefault,
  443.            IIf(Filter && HistNegDivergence,colorRed,colorDefault)  );
  444. AddColumn( 32, "M-ND", formatChar, colorDefault,
  445.            IIf(Filter && MACDNegDivergence,colorRed,colorDefault)  );
  446. AddColumn( 32, "M-NC", formatChar, colorDefault,
  447.            IIf(Filter && NegCrossover,colorRed,colorDefault)  );
  448. AddTextColumn( Sector , "Sector" );
  449. AddTextColumn( Industry , "Industry" );
  450. _SECTION_END();