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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    ParabXO
  4. //  Author/Uploader: Thomas Ludwig 
  5. //  E-mail:          Thomas.Ludwi@gmx.de
  6. //  Date/Time Added: 2005-03-21 15:19:39
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=448
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=448
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  This is an enhancement of the famous Parabolic SAR indicator by Welles
  17. //  Wilder. For more details see the remarks below.
  18. //
  19. //------------------------------------------------------------------------------
  20. /////////////////////////////////
  21. // ParabXO implemented in AFL.
  22. //
  23. // The code below relies heavily on the AFL code for the 
  24. // Parabolic SAR by Tomasz Janeczko in the AB library
  25. //
  26. // Application: Drag & Drop.
  27. //
  28. // Aside from making the Accelerator Factor and its maximum 
  29. // value changeable via the Param() function I made 2 enhancements 
  30. // by some simple additional coding that were introduced by 
  31. // Dennis Meyers in an article in the S&C 4/1995 issue:
  32. //
  33. // 1. The start value of the AF can be set independently; thus you 
  34. //    can make the indicator react considerably faster.
  35. // 2. The ParabXO does not reverse unless penetrated 
  36. //    by a specified amount (called "Crossover threshold in %" below) 
  37. //    thus preventing too many whipsaws. It can be set to 0 if 
  38. //    you don't want to use this modification. Please note that
  39. //    in Meyers' article he used an absolute number whereas a 
  40. //    percentage makes more sense in my humble opinion.
  41. // Written by: Thomas Ludwig
  42. acc=Param("Acceleration factor",0.02,0.01,0.05,0.01);
  43. af_start=Param("Starting AF value",0.02,0.01,0.05,0.01);
  44. af_max=Param("Maximum AF value",0.2,0.1,0.3,0.01);
  45. Ct=Param("Crossover threshold in %",1,0,3,0.5);
  46. Ct1=Ct/100;
  47. IAF = acc; 
  48. MaxAF = af_max;     // max acceleration
  49. psar = Close; // initialize
  50. long = 1;        // assume long for initial conditions
  51. af = af_start;   // starting value of the acelleration factor
  52. ep = Low[ 0 ];   // init extreme point
  53. hp = High [ 0 ];
  54. lp = Low [ 0 ];
  55. for( i = 2; i < BarCount; i++ )
  56. {
  57. if ( long )
  58. {
  59. psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] );
  60. }
  61. else
  62. {
  63. psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] );
  64. }
  65. reverse =  0;
  66. //check for reversal
  67. if ( long )
  68. {
  69. if ( Low [ i ] < psar [ i ] * (1-Ct1) )
  70. {
  71. long = 0; reverse = 1; // reverse position to Short
  72. psar [ i ] =  hp;       // SAR is High point in prev trade
  73. lp = Low [ i ];
  74. af = af_start;
  75. }
  76. }
  77. else
  78. {
  79. if ( High [ i ] > psar [ i ] * (1+Ct1) )
  80. {
  81. long = 1; reverse = 1;        //reverse position to long
  82. psar [ i ] =  lp;
  83. hp = High [ i ];
  84. af = af_start;
  85. }
  86. }
  87. if ( reverse == 0 )
  88. {
  89. if ( long )
  90. {
  91. if ( High [ i ] > hp ) 
  92. {
  93. hp = High [ i ]; 
  94. af = af + IAF; 
  95. if( af > MaxAF ) af = MaxAF; 
  96. }
  97.              
  98. if( Low[ i - 1 ] < psar[ i ] ) psar[ i ] = Low[ i - 1 ];
  99. if( Low[ i - 2 ] < psar[ i ] ) psar[ i ] = Low[ i - 2 ];
  100. }
  101.        else
  102. {
  103. if ( Low [ i ] < lp )  
  104. lp = Low [ i ]; 
  105. af = af + IAF; 
  106. if( af > MaxAF ) af = MaxAF; 
  107. }
  108. if( High[ i - 1 ] > psar[ i ] ) psar[ i ] = High[ i - 1 ];
  109. if( High[ i - 2 ] > psar[ i ] ) psar[ i ] = High[ i - 2 ];
  110. }
  111. }
  112. }
  113. //Plot( Close, "Price", colorBlack, styleCandle );
  114. Plot( psar, _DEFAULT_NAME(), ParamColor( "Color", colorRed ), styleDots | styleNoLine | styleThick );