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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Darvas Box
  4. //  Author/Uploader: Stephane 
  5. //  E-mail:          s.carrasset@laposte.net
  6. //  Date/Time Added: 2004-12-06 14:06:18
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           basic
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=414
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=414
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  An explanation of the construction of the Darvas Box is available at:
  17. //
  18. //  1) <http://www.gerryco.com/tech/darvas.html>
  19. //
  20. //  2) <http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/editsystem?id=2814>
  21. //
  22. //------------------------------------------------------------------------------
  23. //////////begin/////////
  24. box1=0;
  25. box2=0;
  26. SetBarsRequired(10000,10000);
  27. procedure fillDarvas(start,end,swap,top, bottom )
  28. {
  29.    for ( j = start; j < end; j++)
  30.    {
  31.        if( box1[j] == swap)
  32.   box1[j]= top ;
  33. else
  34. box1[j]= bottom;
  35.        if(box2[j] == swap)
  36.   box2[j]= bottom ;
  37. else
  38. box2[j]= top;
  39.    }
  40. }
  41. BoxArr1 = 0;
  42. BoxArr2 = 0;
  43. StateArray = 0;
  44. DBuy = 0;
  45. DSell = 0;
  46. TopArray = 0;
  47. BotArray = 0;
  48. tick=0;
  49. BoxTop = High[0];
  50. BoxBot = Low[0];
  51. swap=0;
  52. state = 0;
  53. BoxStart = 0;
  54. for (i=0; i<BarCount; i++)
  55. {
  56.  if (state==5)
  57.  {
  58.   TopArray[i]=BoxTop;
  59.   BotArray[i]=BoxBot;
  60.   if (Low[i]<(BoxBot*(1-tick/100)) || High[i]>(BoxTop*(1+tick/100)))
  61.   {
  62. fillDarvas(BoxStart,i,swap,BoxTop,BoxBot);
  63.   state = 1;
  64.   swap =  !swap;
  65.   BoxTop = High[i];
  66.   BoxStart = i;
  67.   }
  68.  }
  69.  else
  70.  {
  71.   if (High[i]<BoxTop)
  72.   {
  73.       if ((state<3) || (Low[i]>BoxBot))
  74.       {
  75.    state++;
  76.    }
  77.       else
  78.    {
  79.       state=3;
  80.    }
  81.       if (state==3)
  82.       BoxBot=Low[i];
  83.   }
  84.   else
  85.   {
  86.       state=1;
  87.       BoxTop=High[i];
  88.   }
  89.  }
  90.  StateArray[i] = state;
  91. }
  92. fillDarvas(BoxStart,BarCount,swap,BoxTop,BoxBot);
  93. Plot(C,"",1,64);
  94. Plot( box1, "" , 1 + statearray, styleLine );
  95. Plot( box2, "" , 1 + statearray , styleLine );