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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Parabolic SAR in VBScript
  4. //  Author/Uploader: Tomasz Janeczko 
  5. //  E-mail:          tj@amibroker.com
  6. //  Date/Time Added: 2002-12-18 07:09:00
  7. //  Origin:          Welles Wilder
  8. //  Keywords:        SAR
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=241
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=241
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  This sample code shows parabolic SAR re-implemented
  17. //
  18. //  in VBScript. Note that SAR is built-in function in AFL and
  19. //
  20. //  this code is provided as an example of AmiBroker scripting capabilities.
  21. //
  22. //------------------------------------------------------------------------------
  23. // *BEGIN Parabolic SAR Indicator
  24. EnableScript ( "vbscript" );
  25. psar = Low;
  26. <%
  27. Function Min( x, y, z )
  28. If x < y Then
  29.  Min = x
  30. Else
  31.  Min = y
  32. End If
  33. If z < Min Then
  34.    Min = z
  35. End If
  36. End Function
  37. Function Max( x, y, z )
  38. If x > y Then
  39.  Max = x
  40. Else
  41.  Max = y
  42. End If
  43. If z > Max Then
  44.    Max = z
  45. End If
  46. End Function
  47. StartAF = 0.02  '                           //acceleration factor
  48. MaxAF = 0.2  '                          //max acceleration
  49. Close = AFL ( "close" )
  50. High   = AFL ( "high" )
  51. Low    = AFL ( "low" )
  52. psar  =  AFL ( "psar" )
  53. psar( 0 ) = Close( 0 )      ' initialize
  54. LongPos = 1                    ' assume long for initial conditions
  55. af = StartAF               ' init acelleration factor
  56. ep = Low( 0 )                 ' init extreme point
  57. hp = High( 0 )
  58. lp = Low( 0 )
  59. For i = 2 To UBound( Close )
  60.      If LongPos Then
  61.         psar( i ) = psar( i-1 ) + af * ( hp - psar( i-1 ) )
  62.      Else
  63.        psar( i ) = psar( i-1 ) + af * ( lp - psar ( i-1 ) )
  64.      End If
  65.      reverse =  0
  66.      ' check for reversal
  67.      
  68.      If LongPos Then
  69.        If  Low( i ) < psar ( i ) Then 
  70.               LongPos = 0
  71.    reverse = 1 '            //reverse position to short
  72.               psar( i ) =  hp '                        //sar is high point in prev trade
  73.               lp = Low( i )
  74.               af = StartAF
  75.        End If
  76.      
  77.      Else
  78.      
  79.          If High( i ) > psar( i ) Then
  80.               LongPos = 1    
  81.               reverse = 1 '        //reverse position to long
  82.               psar( i ) =  lp 
  83.               hp = High( i ) 
  84.               af = StartAF
  85.          End If  
  86.      End If
  87.      If reverse = 0 Then
  88.          If LongPos Then
  89.              If High( i ) > hp Then
  90.                   hp = High( i )
  91.                   af = af + StartAF 
  92.                   af = Min ( af, MaxAF, MaxAF )
  93.              End If
  94.                   
  95.              psar( i ) = Min ( psar( i ), Low( i - 1 ), Low ( i-2 ) )
  96.          Else
  97.          
  98.              If  Low( i ) < lp Then
  99.                 lp = Low( i )
  100.                 af = af + StartAF 
  101.                 af = Min ( af, MaxAF, MaxAF ) 
  102.              End If
  103.              psar( i ) = Max ( psar( i ), High( i - 1 ), High( i-2 ) )
  104.          End If
  105.      End If
  106. Next
  107. AFL( "psar" ) = psar
  108. %>
  109. Graph0 = Close;
  110. Graph0Style = 64 +32 ;
  111. //graph0Style = 128 +32 ;
  112. Graph0BarColor=1;
  113. Graph1 = psar;
  114. Graph1Style = 8 + 16 + 32;
  115. Graph1Color = 8;
  116. Title=Name() + " - Custom PSAR = "+WriteVal(psar);