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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Modified Darvas Box
  4. //  Author/Uploader: davis 
  5. //  E-mail:          
  6. //  Date/Time Added: 2006-03-21 04:46:07
  7. //  Origin:          
  8. //  Keywords:        Darvas Box
  9. //  Level:           basic
  10. //  Flags:           system
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=608
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=608
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  After reference the Darvas Box code from Stephane, I added an additional
  17. //  rule of sell. So that the profit can increase a bit. The idea is the found
  18. //  the suitable selling point after we found the box top. When it meet the
  19. //  highest point and turn back, we sell if the different between the highest
  20. //  price and current close price is greater than a certain prestentage. Just
  21. //  like to share and hope can get comment from the others, since I am a
  22. //  beginner of TA.
  23. //
  24. //------------------------------------------------------------------------------
  25. //////////begin/////////
  26. box1=0;
  27. box2=0;
  28. SetBarsRequired(10000,10000);
  29. procedure fillDarvas(start,end,swap,top, bottom )
  30. {
  31.    for ( j = start; j < end; j++)
  32.    {
  33.        if( box1[j] == swap)
  34.   box1[j]= top ;
  35. else
  36. box1[j]= bottom;
  37.        if(box2[j] == swap)
  38.   box2[j]= bottom ;
  39. else
  40. box2[j]= top;
  41.    }
  42. }
  43. BoxArr1 = 0;
  44. BoxArr2 = 0;
  45. StateArray = 0;
  46. DBuy = 0;
  47. DSell = 0;
  48. TopArray = 0;
  49. BotArray = 0;
  50. tick=0;
  51. BoxTop = High[0];
  52. BoxBot = Low[0];
  53. swap=0;
  54. state = 0;
  55. BoxStart = 0;
  56. for (i=0; i<BarCount; i++)
  57. {
  58.  if (state==5)
  59.  {
  60.   TopArray[i]=BoxTop;
  61.   BotArray[i]=BoxBot;
  62.   if (Low[i]<(BoxBot*(1-tick/100)) || High[i]>(BoxTop*(1+tick/100)))
  63.   {
  64. fillDarvas(BoxStart,i,swap,BoxTop,BoxBot);
  65.   state = 1;
  66.   swap =  !swap;
  67.   BoxTop = High[i];
  68.   BoxStart = i;
  69.   }
  70.  }
  71.  else
  72.  {
  73.   if (High[i]<BoxTop)
  74.   {
  75.       if ((state<3) || (Low[i]>BoxBot))
  76.       {
  77.    state++;
  78.    }
  79.       else
  80.    {
  81.       state=3;
  82.    }
  83.       if (state==3)
  84.       BoxBot=Low[i];
  85.   }
  86.   else
  87.   {
  88.       state=1;
  89.       BoxTop=High[i];
  90.   }
  91.  }
  92.  StateArray[i] = state;
  93. }
  94. fillDarvas(BoxStart,BarCount,swap,BoxTop,BoxBot);
  95. Buyrule=H>Ref(box1,-1) AND H>Ref(box2,-1) AND Ref(statearray,-1)==5;
  96. Sellrule=L<Ref(box1,-1) AND L<Ref(box2,-1) AND Ref(statearray,-1)==5;
  97. _SECTION_BEGIN("Darvas box");
  98. Plot(C,"",1,64);
  99. Plot( box2, "" , 1 + statearray , styleLine );
  100. Plot( box1, " Status = "+WriteVal(statearray,1.0) , 1 + statearray, styleLine );
  101. _SECTION_END();
  102. Buy = Buyrule;
  103. statopt = Optimize("statopt var", 3, 1, 5, 1 ); 
  104. lossopt= Optimize("lossopt var", 5, 3, 10, 1 ); 
  105. //statopt=5;
  106. //lossopt=7;
  107. topvalue=IIf(box1>box2,box1,box2);
  108. Sellrule2 = (((topvalue-Close)*100/topvalue) > lossopt) AND (statearray == statopt);
  109. Sell = Sellrule OR Sellrule2;
  110. Short = Sell;
  111. Cover = Buy;