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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Kagi Chart
  4. //  Author/Uploader: Graham Kavanagh 
  5. //  E-mail:          gkavanag@bigpond.net.au
  6. //  Date/Time Added: 2002-11-29 05:12:31
  7. //  Origin:          
  8. //  Keywords:        Kagi
  9. //  Level:           medium
  10. //  Flags:           system,indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=236
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=236
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Kagi swing chart with change based on share price. Swing ranges from 3 to
  17. //  5%.
  18. //
  19. //  Place in indicator builder.
  20. //
  21. //------------------------------------------------------------------------------
  22. //KAGI Chart (or Swing) for Amibroker Indicator window. 
  23. //Reverse swing is 3%.
  24. //Graham Kavanagh 16 Nov 2002
  25. SetBarsRequired(100000,100000);
  26. Close = IIf( C<10, round(C*10)/10, IIf( C>=10 AND C<50, int(C) + round(round(frac(C)*10)/5)*5/10, int(C)));
  27. Reverse = LastValue(IIf(C<50,0.05,IIf(C>=50 AND C<100,0.04,0.03)));
  28. EnableScript("jscript");
  29. <%
  30. Close = VBArray( AFL( "Close" ) ).toArray();
  31. KC = new Array();
  32. // initialize first element
  33. j = 0;
  34. KC[j] = Close[0];
  35. down = 1;    // By default the first bar is a down bar.
  36. up = 0;
  37. swap = 0;
  38. // perform the loop that produces Kagi Chart
  39. for( i = 1; i < Close.length; i++ )
  40. {
  41.  Reverse =AFL("Reverse");                        // percent reversal requirement
  42.  if( Close[i] <= KC[j] && down)         //continue down
  43.  {
  44.   KC[j] = Close[i];
  45.  }
  46.  else
  47.  {
  48.   if( Close[i] >= KC[j]*(1 + Reverse) && down)  //Change direction to up
  49.   {
  50.    j++;
  51.    swap = 1;
  52.    KC[j] = Close[i];
  53.   }
  54.  }
  55.  if( Close[i] >= KC[j] && up)         //Continue up
  56.  { 
  57.   KC[j] = Close[i];
  58.  }
  59.  else
  60.  {
  61.   if( Close[i] <= KC[j]*(1 - Reverse) && up)   //Change direction to down
  62.   {
  63.    j++;
  64.    KC[j] = Close[i];
  65.    swap = 1;
  66.   }
  67.  }
  68.  if( swap )
  69.  {
  70.   swap = 0;
  71.   if( up )
  72.   {
  73.    up = 0;
  74.    down = 1;
  75.   }
  76.   else
  77.   {
  78.    up = 1;
  79.    down = 0;
  80.   }
  81.  }
  82. }
  83. delta = Close.length - j-1;      //to get all of chart
  84. AFL.Var("KC") = KC;
  85. AFL.Var("delta") = delta;
  86. AFL.Var("Reverse") = Reverse;
  87.  
  88. %>
  89. KC = Ref( KC, -delta );
  90. C = KC;
  91. L = LLV(C,2);
  92. H = HHV(C,2);
  93. MyColor = 
  94. IIf(C>Ref(H,-2),colorBlue, 
  95. IIf(C<Ref(L,-2),colorRed,
  96. colorBlack));
  97. Graph0BarColor = MyColor;
  98. Graph0Style = 512+4096;
  99. GraphXSpace = 5;
  100. Graph0 = C;
  101. Graph0Name = "Kagi Chart";
  102. Graph1BarColor = 1;
  103. Graph1Style = 16+2048+4096;
  104. Graph1 = Reverse*100;
  105. Graph1Name = "Reverse %";