PF Chart - Close - April 2004.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:5k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    PF Chart - Close - April 2004
  4. //  Author/Uploader: Graham Kavanagh 
  5. //  E-mail:          gkavanagh@e-wire.net.au
  6. //  Date/Time Added: 2004-04-19 09:03:31
  7. //  Origin:          Previous PF Sep 2003
  8. //  Keywords:        P&F Point Figure PF PnF
  9. //  Level:           semi-advanced
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=348
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=348
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  P&F chart based on closing price.
  17. //
  18. //  Dates and bar numbers added for reference when the columns started and
  19. //  ended. Load file into IB.
  20. //
  21. //  Box size based on ATR of close price. Reverse = 3.
  22. //
  23. //------------------------------------------------------------------------------
  24. // P&F chart based on closing price
  25. // Date & Bar Number of start & end of columns
  26. // Graham Kavanagh  17 Apr 2004
  27. // Interpretation window data included
  28. // 1:1 Line drawn when column selected with slope=boxsize
  29. // Box size based on ATR of closing price 
  30. Version(4.53);
  31. SetBarsRequired(100000,100000);
  32. range = Min(260,BarCount/2);
  33. box = LastValue( round(ATR(range)*100)/100 );
  34. Reverse = 3  ;      // reversal requirement
  35. CX = round(C/box);
  36. CF = ceil(Cx);
  37. CR = floor(Cx);
  38. Bar = BarIndex();
  39. BarDate = DateNum();
  40. BarTurn = 0;
  41. BarEnd = 0;
  42. // initialize first element
  43. j = 0;
  44. PFC[j] = CF[0];
  45. PFO[j] = CF[0]+1;
  46. down = 1;                  // By default the first bar is a down bar.
  47. up = 0;
  48. // perform the loop that produces PF Chart
  49. for( i = 1; i < BarCount; i++ )
  50. {
  51.  if( CF[i] <= PFC[j]-1 && down)         //continue down
  52.  {
  53.   PFC[j] = CF[i];
  54.   PFO[j] = CF[i]+1;
  55.   BarEnd[j] = Bar[i];
  56.  }
  57.  else
  58.  {
  59.   if( CR[i] >= PFC[j] + Reverse && down)  //Change direction to up
  60.   {
  61.    j++;
  62.    up = 1;
  63.    down = 0;
  64.    PFC[j] = CR[i];
  65.    PFO[j] = CR[i] - 1;
  66.    BarTurn[j] = Bar[i];
  67.    BarEnd[j] = Bar[i];
  68.   }
  69.  }
  70.  if( CR[i] >= PFC[j] + 1 && up)         //Continue up
  71.  {
  72.   PFC[j] = CR[i];
  73.   PFO[j] = CR[i] - 1;
  74.   BarEnd[j] = Bar[i];
  75.  }
  76.  else
  77.  {
  78.   if( CF[i] <= PFC[j] - Reverse && up)   //Change direction to down
  79.   {
  80.    j++;
  81.    up = 0;
  82.    down = 1;
  83.    PFC[j] = CR[i];
  84.    PFO[j] = CR[i]+1;
  85.    BarTurn[j] = Bar[i];
  86.    BarEnd[j] = Bar[i];
  87.   }
  88.  }
  89. }
  90. delta = BarCount-1 - j;
  91. BarTurns = Ref( BarTurn, -delta);
  92. BarEnds = Ref( BarEnd, -delta);
  93. PFO = Ref( PFO, -delta );
  94. PFC = Ref( PFC, -delta );
  95. H = IIf( Ref(PFC,-1)>Ref(PFO,-1), Ref(HHV(PFC,1),-1)-1, Max(PFO,PFC) )*box + box/2;
  96. L = IIf( Ref(PFC,-1)<Ref(PFO,-1), Ref(LLV(PFC,1),-1)+1, Min(PFO,PFC) )*box - box/2;
  97. 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;
  98. // the difference between Open AND Close is set to box size
  99. // the sign decides if X or O are plotted
  100. C = O + box * IIf( PFC > PFO, 1, -1 );
  101. top = H - box/2;
  102. bot = L + box/2;
  103. GraphXSpace = 5;
  104. _N( 
  105. Title = Name() + " " + Date() + ": PF System, H: $" + Top + ", L: $" + Bot + ", Box $" + Box + " Reversal " + Reverse + "n" + "NewCol bar " + BarTurns + " date " + WriteVal( ValueWhen(BarIndex()==SelectedValue(BarTurns),DateTime()),formatDateTime)  + " ColEnd bar " + BarEnds + " date " + WriteVal( ValueWhen(BarIndex()==SelectedValue(BarEnds),DateTime()),formatDateTime) 
  106.   );
  107. Plot(C, "P&F Close", IIf( PFC > PFO, colorBlue, colorRed ), styleCandle + stylePointAndFigure);
  108. LineUp = LineArray( SelectedValue(BarIndex()), SelectedValue(L), SelectedValue(BarIndex())+1, SelectedValue(L)+box, 1, 0 );
  109. Linedown = LineArray( SelectedValue(BarIndex()), SelectedValue(H), SelectedValue(BarIndex())+1, SelectedValue(H)-box, 1, 0 );
  110. Plot(IIf(SelectedValue(PFC<PFO),Lineup,Null), "Line", colorGreen, styleLine + styleNoLabel + styleNoRescale);
  111. Plot(IIf(SelectedValue(PFC>PFO),Linedown,Null), "Line", colorBrown, styleLine + styleNoLabel + styleNoRescale);
  112. //--Indicator-End-- 
  113. Name() +", "+FullName();
  114. "";
  115. "Direction  = " + WriteIf(pfc>pfo,"Up","Down");
  116. "Move Today = " + WriteIf(BarIndex()==SelectedValue(BarEnds),"Yes" + WriteIf(BarIndex()==SelectedValue(BarTurns),", New Column", ", Continuation"),"No");
  117. "";
  118. "Column Start n   BarIndex() = " + BarTurns + "n   Date() = " + WriteVal( ValueWhen(BarIndex()==SelectedValue(BarTurns), DateTime()), formatDateTime) ;
  119. "Column End n   BarIndex() = " + BarEnds + "n   Date() = " + WriteVal( ValueWhen(BarIndex()==SelectedValue(BarEnds),DateTime()),formatDateTime)   ;