P&F Chart - HighLow prices Sept2003.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    P&F Chart - High/Low prices Sept2003
  4. //  Author/Uploader: Graham Kavanagh 
  5. //  E-mail:          gkavanagh@e-wire.net.au
  6. //  Date/Time Added: 2003-10-01 02:44:23
  7. //  Origin:          Australia
  8. //  Keywords:        
  9. //  Level:           semi-advanced
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=301
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=301
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Supersedes other P&F versions in this and yahoo files.
  17. //
  18. //  P&F chart for V4.40 and above. Based on close prices.
  19. //
  20. //  Problem resolved with boxes not being created at right prices due to the 9
  21. //  decimal place inaccuracies for numbers with decimals. This was causing a
  22. //  problem creating the rising and falling boxes with the Ceil and Floor
  23. //  functions.
  24. //
  25. //  Place in indicator builder. Chart is compacted to the right end of the
  26. //  chart space ending on last date bar.
  27. //
  28. //  Box sizes and reverse can be changed near the beginning of the afl code
  29. //  within the "Boxsize = IIF" statements.
  30. //
  31. //------------------------------------------------------------------------------
  32. //AFL P&F Chart for Amibroker Indicator window. Based on High/low prices.
  33. //Based on code in AB help files
  34. //Reverse is 3 boxes.
  35. //Graham Kavanagh 30 Sep 2003
  36. Version(4.40);
  37. SetBarsRequired(100000,100000);
  38. //Size for P&F boxes
  39. boxsize=IIf(C<0.05, 0.001,
  40. IIf(C>=0.05 AND C<0.1, 0.002,
  41. IIf(C>=0.1 AND C<0.5, 0.005,
  42. IIf(C>=0.5 AND C<2, 0.01,
  43. IIf(C>=2 AND C<5, 0.02,
  44. IIf(C>=5 AND C<10, 0.05,
  45. IIf(C>=10 AND C<50, 0.1,
  46. IIf(C>=50 AND C<100, 0.2,
  47. IIf(C>=100 AND C<200, 0.5,
  48. IIf(C>=200 AND C<500, 1,
  49. 2 ))))))))));
  50. Box = LastValue(boxsize);
  51. HX = round((H/box)*10)/10;
  52. LX = round((L/box)*10)/10;
  53. RH = floor(HX);
  54. FL = ceil(LX);
  55. // initialize first element
  56. j = 0;
  57. Reverse = 3;                      // reversal requirement
  58. PFC[j] = FL[0];
  59. PFO[j] = PFC[j] + 1;
  60. down = 1;                  // By default the first bar is a down bar.
  61. up = 0;
  62. swap = 0;
  63. // perform the loop that produces PF Chart
  64. for( i = 1; i < BarCount; i++ )
  65. {
  66.  if( FL[i] <= PFC[j]-1 && down)         //continue down
  67.  {
  68.   PFC[j] = FL[i];
  69.   PFO[j] = PFC[j] + 1;
  70.  }
  71.  else
  72.  {
  73.   if( RH[i] >= PFC[j] + Reverse && down)  //Change direction to up
  74.   {
  75.    j++;
  76.    swap = 1;
  77.    PFC[j] = RH[i];
  78.    PFO[j] = PFC[j]-1;
  79.   }
  80.  }
  81.  if( RH[i] >= PFC[j] + 1 && up)         //Continue up
  82.  {
  83.   PFC[j] = RH[i];
  84.   PFO[j] = PFC[j] - 1;
  85.  }
  86.  else
  87.  {
  88.   if( FL[i] <= PFC[j] - Reverse && up)   //Change direction to down
  89.   {
  90.    j++;
  91.    PFC[j] = FL[i];
  92.    PFO[j] = PFC[j] + 1;
  93.    swap = 1;
  94.   }
  95.  }
  96.  if( swap )
  97.  {
  98.   swap = 0;
  99.   if( up )
  100.   {
  101.    up = 0;
  102.    down = 1;
  103.   }
  104.   else
  105.   {
  106.    up = 1;
  107.    down = 0;
  108.   }
  109.  }
  110. }
  111. delta = BarCount - j-1;
  112. PFO = Ref( PFO, -delta );
  113. PFC = Ref( PFC, -delta );
  114. // High-Low range sets the height of the P&F bar
  115. H = IIf(Ref(PFC,-1)>Ref(PFO,-1),Ref(HHV(PFC,1),-1)-1,Max(PFO,PFC))*Box;
  116. L = IIf(Ref(PFC,-1)<Ref(PFO,-1),Ref(LLV(PFC,1),-1)+1,Min(PFO,PFC))*Box;
  117. O = IIf(Ref(PFC,-1)>Ref(PFO,-1),Ref(HHV(PFC,1),-1)-1,IIf(Ref(PFC,-1)<Ref(PFO,-1),Ref(LLV(PFC,1),-1)+1,PFO))*Box;
  118. // the difference between Open AND Close should be set to box size
  119. // the sign decides if X or O are plotted
  120. C = O + Box * IIf( PFC > PFO, 1,-1);
  121. GraphXSpace = 2;
  122. Title ="No Jscript  " + Name()+ "  PF HiLo, H: " + H+ ", L: " + L+", Box: "+ box + ", Reversal: " + reverse;
  123. Plot( C, "P&F Chart Close", IIf( PFC > PFO, colorBlue, colorRed ), styleCandle+styleNoLabel+stylePointAndFigure);