Parabolic SAR in native AFL (v.4.31.1 required).afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Parabolic SAR in native AFL (v.4.31.1 required)
  4. //  Author/Uploader: Tomasz Janeczko 
  5. //  E-mail:          
  6. //  Date/Time Added: 2003-04-13 10:42:45
  7. //  Origin:          Welles Wilder
  8. //  Keywords:        
  9. //  Level:           semi-advanced
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=268
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=268
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Here is a sample code that shows how to use for/if/else control statements
  17. //  introduced in AmiBroker 4.31.x BETA.
  18. //
  19. //  The code re-implements Parabolic Stop-And-Reverse system/indicator.
  20. //
  21. //  The code is quite similar to JScript version.
  22. //
  23. //------------------------------------------------------------------------------
  24. /////////////////////////////////
  25. // Parabolic SAR re-implemented in
  26. // native AFL.
  27. //
  28. // Example of for/if/else control statements
  29. //
  30. // Requires:
  31. // AmiBroker 4.31.1 
  32. // 
  33. // Written by: Tomasz Janeczko
  34. IAF = 0.02;       // acceleration factor
  35. MaxAF = 0.2;     // max acceleration
  36. psar = Close; // initialize
  37. long = 1;        // assume long for initial conditions
  38. af = IAF;         // init acelleration factor
  39. ep = Low[ 0 ];   // init extreme point
  40. hp = High [ 0 ];
  41. lp = Low [ 0 ];
  42. for( i = 2; i < BarCount; i++ )
  43. {
  44. if ( long )
  45. {
  46. psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] );
  47. }
  48. else
  49. {
  50. psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] );
  51. }
  52. reverse =  0;
  53. //check for reversal
  54. if ( long )
  55. {
  56. if ( Low [ i ] < psar [ i ]  )
  57. {
  58. long = 0; reverse = 1; // reverse position to Short
  59. psar [ i ] =  hp;       // SAR is High point in prev trade
  60. lp = Low [ i ];
  61. af = IAF;
  62. }
  63. }
  64. else
  65. {
  66. if ( High [ i ] > psar [ i ]  )
  67. {
  68. long = 1; reverse = 1;        //reverse position to long
  69. psar [ i ] =  lp;
  70. hp = High [ i ];
  71. af = IAF;
  72. }
  73. }
  74. if ( reverse == 0 )
  75. {
  76. if ( long )
  77. {
  78. if ( High [ i ] > hp ) 
  79. {
  80. hp = High [ i ]; 
  81. af = af + IAF; 
  82. if( af > MaxAF ) af = MaxAF; 
  83. }
  84.              
  85. if( Low[ i - 1 ] < psar[ i ] ) psar[ i ] = Low[ i - 1 ];
  86. if( Low[ i - 2 ] < psar[ i ] ) psar[ i ] = Low[ i - 2 ];
  87. }
  88.        else
  89. {
  90. if ( Low [ i ] < lp )  
  91. lp = Low [ i ]; 
  92. af = af + IAF; 
  93. if( af > MaxAF ) af = MaxAF; 
  94. }
  95. if( High[ i - 1 ] > psar[ i ] ) psar[ i ] = High[ i - 1 ];
  96. if( High[ i - 2 ] > psar[ i ] ) psar[ i ] = High[ i - 2 ];
  97. }
  98. }
  99. }
  100. Plot( Close, "Price", colorBlack, styleCandle );
  101. Plot( psar, "SAR", colorRed, styleDots | styleNoLine | styleThick );