Trend Detection.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Trend Detection
  4. //  Author/Uploader: Graham Kavanagh 
  5. //  E-mail:          gkavanagh@e-wire.net.au
  6. //  Date/Time Added: 2005-01-10 18:55:44
  7. //  Origin:          
  8. //  Keywords:        Trends
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=418
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=418
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Plots coloured bars for direction of current trend, green for rising, red
  17. //  for falling. Exploration included to find first bar of new direction.
  18. //
  19. //  Param included to vary the number of periods for detecting small to long
  20. //  term trends.
  21. //
  22. //  I am using beta version 4.66.2, but believe this will work with last
  23. //  offical version.
  24. //
  25. //------------------------------------------------------------------------------
  26. // Trend Detection
  27. // Graham Kavanagh 11 Jan 05
  28. // I am using version 4.66.2, but believe this will work with last offical version.
  29. function Rise( Pd, perd, Pl, perl )
  30. {
  31.  MAD = DEMA(Pd,perd);
  32.  MAL = LinearReg(Pl,perl);
  33.  CondR = ROC(MAD,1)>0 AND ROC(MAL,1)>0;
  34.  CondF = ROC(MAD,1)<0 AND ROC(MAL,1)<0; 
  35.  R[0] = C[0]>(H[0]+L[0])/2;
  36.  for(i=1;i<BarCount;i++)
  37.  {
  38.   if( CondR[i] )
  39.   {
  40.    R[i] = 1;
  41.   }
  42.   else
  43.   {
  44.    if( CondF[i] )
  45.    {
  46.     R[i] = 0;
  47.    }
  48.    else
  49.    {
  50.     R[i] = R[i-1];
  51.    }
  52.   }
  53.  }
  54.  return R;
  55. PrD = C;
  56. PrL = H/2+L/2;
  57. PrdD = PrdL = PrdM = Param("Prd",12,2,40,1);
  58. permax = Max(prdd,prdl);
  59. Rs = IIf( BarIndex()<permax, 0, Rise(PrD, PrdD, PrL, PrdL) );
  60. Fs = IIf( BarIndex()<permax, 0, 1-Rs );
  61. Confirm = MA(C,prdm);
  62. function DirBar( dr, df )
  63. {
  64. B[0] = 0;
  65. for(i=1;i<BarCount;i++)
  66. {
  67.  if( dr[i-1] && df[i]  )
  68.  {
  69.   B[i] = 1;
  70.  }
  71.  else
  72.  {
  73.   if( df[i-1] && dr[i] )
  74.   {
  75.    B[i] = 1;
  76.   }
  77.   else
  78.   {
  79.    B[i] = B[i-1] + 1;
  80.   }
  81.  }
  82. }
  83. return B;
  84. }
  85. Bs = DirBar( Rs, Fs );
  86. Direction = ROC(Confirm,1) > 0 AND ROC(Confirm,5) > 0;
  87. Downward = ROC(Confirm,1) < 0 AND ROC(Confirm,5) < 0;
  88. Select = Rs AND Ref(Fs,-1);
  89. Caution = Fs AND Ref(Rs,-1);
  90. Change = IIf( Rs, H/ValueWhen(Fs,L)*100, L/ValueWhen(Rs,H)*100 );
  91. Plot( C, "close", IIf( Rs, colorGreen, IIf( Fs, colorRed, colorBlack )), styleBar);
  92. PlotShapes( shapeSmallCircle* select, colorDarkGreen, 0, H, 5 );
  93. PlotShapes( shapeSmallCircle* Caution, colorDarkRed, 0, L, -5 );
  94. GraphXSpace=10;
  95. _N( Title = "{{NAME}} - {{INTERVAL}} {{DATE}} Trend Plot - "+prdd+" Day" );
  96. Filter = Select OR Caution;
  97. AddColumn( Select, "UpTurn", 1 );
  98. AddColumn( Caution, "DownTurn", 1 );
  99. // ---indicator end---
  100. "Rise = " + Rs;
  101. "Fall = " + Fs;
  102. "Current Trend Bars = " + Bs;
  103. "Trend Move = " + Change + " %";