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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Parabolic SAR in JScript
  4. //  Author/Uploader: Tomasz Janeczko 
  5. //  E-mail:          tj@amibroker.com
  6. //  Date/Time Added: 2002-12-18 07:09:46
  7. //  Origin:          Welles Wilder
  8. //  Keywords:        
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=242
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=242
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  This sample code shows parabolic SAR re-implemented
  17. //
  18. //  in JScript. 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 ( "jscript" );
  25. psar = Low;
  26. <%
  27. AF = 0.02;                          //acceleration factor
  28. Max = 0.2;                          //max acceleration
  29. Close = VBArray ( AFL ( "close" ) ).toArray();
  30. High   = VBArray ( AFL ( "high" ) ).toArray();
  31. Low    = VBArray ( AFL ( "low" ) ).toArray();
  32. psar  =  VBArray ( AFL ( "psar" ) ).toArray();
  33. psar [ 0 ] = Close [ 0 ];           //initialize
  34. long = 1;                           //assume long for initial conditions
  35. af = AF;                            //init acelleration factor
  36. ep = Low[ 0 ];                      //init extreme point
  37. hp = High [ 0 ];
  38. lp = Low [ 0 ];
  39. for ( i=2; i<Close.length; i++ )
  40. {
  41.      if ( long )
  42.      {
  43.              psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] );
  44.      }
  45.      else
  46.      {
  47.              psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] );
  48.      }
  49.      reverse =  0;
  50.      //check for reversal
  51.      if ( long )
  52.      {
  53.          if ( Low [ i ] < psar [ i ]  )
  54.          {
  55.               long = 0;  reverse = 1;            //reverse position to short
  56.               psar [ i ] =  hp;                  //sar is high point in prev trade
  57.               lp = Low [ i ];
  58.               af = AF;
  59.          }
  60.      }
  61.      else
  62.      {
  63.          if ( High [ i ] > psar [ i ]  )
  64.          {
  65.               long = 1;    reverse = 1;        //reverse position to long
  66.               psar [ i ] =  lp;
  67.               hp = High [ i ];
  68.               af = AF;
  69.          }
  70.      }
  71.      if ( reverse == 0 )
  72.      {
  73.          if ( long )
  74.          {
  75.              if ( High [ i ] > hp ) { hp = High [ i ]; af += AF; af = Math.min ( af, Max ); }
  76.              psar [ i ] = Math.min ( psar [ i ], Low [ i - 1 ], Low[ i-2 ] );
  77.          }
  78.          else
  79.          {
  80.              if ( Low [ i ] < lp )  { lp = Low [ i ]; af = af + AF; af = Math.min ( af, Max ); }
  81.              psar [ i ] = Math.max ( psar [ i ], High [ i - 1 ], High[ i-2 ] );
  82.          }
  83.      }
  84. }
  85. AFL.Var ( "psar" ) = psar;
  86. %>
  87. Graph0 = Close;
  88. Graph0Style = 64 +32 ;
  89. //graph0Style = 128 +32 ;
  90. Graph0BarColor=1;
  91. Graph1 = psar;
  92. Graph1Style = 8 + 16 + 32;
  93. Graph1Color = 8;
  94. Title=Name() + " - sar = "+WriteVal(psar);
  95. /**********END Parabolic SAR Indicator****************/