Visualization of stoploses and profit in chart.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:9k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Visualization of stoploses and profit in chart
  4. //  Author/Uploader: Marcus Davidsson 
  5. //  E-mail:          davidsson_marcus@hotmail.com
  6. //  Date/Time Added: 2006-07-31 09:09:04
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           basic
  10. //  Flags:           system,exploration,indicator,commentary,function
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=660
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=660
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Clear visualization of stoplosses, ordinary entry/exit signals, profit and
  17. //  closing prices in the chart !!!
  18. //
  19. //  Takes the analytical part of the backtesting to an entire new level in my
  20. //  opion (reduces the importance of backtesting
  21. //
  22. //------------------------------------------------------------------------------
  23. // Visualization of Buy/Sell levels, profit and exitsignals( ie stoplossses) in the chart////////////
  24. // Takes the analytical part of the backtesting to an entire new level in my opion (reduces the importance of backtesting)!
  25. // The code is far from complete and perfect but I dont have the energy to do more. Maybe someone
  26. // could countineou developing the code to include for example:
  27. // 1) an option in the parameter window, to show Buy/Sell/Cover statistics only 
  28. // if one would place the mousepointer on each "buy shapes". ( GetCursorYPosition() GetCursorXPosition() ) 
  29. // The display becomes quite messy if you display a Low time resolution Chart (monthly, yearly) One alternative would also to use
  30. // the code for displaying digits based on the diffrent sell signal (shapeDigit1). Then it would be sufficient
  31. // to display the profit/loss for each trade. 
  32. // 2) Another drawback is the parameter hiracy. Each parameter 
  33. // subcategories should only be able to work if the user choose Yes on the main category question. 
  34. // Now you have to set all sub-parameters equal to zero instead of activative/deactivating the major ones. 
  35. // 3) Some overal statistics displayed on the lefthand side of the chart
  36. // (# of trades, # winning/lossing trades, total profit/loss etc)
  37. //The following code works best with a black background
  38. //would also like to take the opportunity to thank Marcin Gorzynski for his help with this one
  39. //////////////////////////////  BASIC STRATEGY AND PLOTS ////////////////////
  40. Buy = Cross( Close, MA(Close, 35) ); 
  41. Short= Cross( MA(Close, 35), Close ); 
  42. Sell=LinRegSlope( MA(Close,18), 2 )<0; 
  43. Cover=LinRegSlope( MA(Close,18), 2 )>0; 
  44. Plot( Close, "C", colorWhite, styleLine); 
  45. Plot( MA(Close,100), "MA-100", colorRed, styleLine); 
  46. // I am sceptical to if the original applystop functions (trailing etc) really works!? 
  47. //I have therefor coded my own stop functions below.
  48. ////////////////////////////// STOP LOSS PARAMETERS ////////////////////
  49. e = Equity(1,0);  /* Highly Important!!. "Removes all extra signals, evaluates 
  50. stops AND writes BACK signals to Sell/Cover arrays". As it should be!!*/
  51. Lprofit = e - ValueWhen( Buy, e); 
  52. Sprofit = e - ValueWhen( Short, e); 
  53. /////////////////////////////// TRAILING PROFIT STOP////////////////////////////
  54. TL=ParamToggle("FANCY A TRAILING STOP?" , "No|Yes",0);
  55. TLL= ParamToggle("           DO YOU WANT TO PLOT PROFIT + CRITICAL TRAILING LINE IN GRAPH?" , "No|Yes",0);
  56. x2=Param("           SET MAX ACCEPTED DECLINE OF PROFIT IN PERCENT ",1 ,0 ,100 ,1);
  57. //x3=Param("           SET MAX ACCEPTED DECLINE OF PROFIT IN POINTS ",1 ,0 ,100 ,1);
  58. ////////FOR LONG POSITION PERCENT////
  59. XXL=HighestSince( Buy==1, Lprofit, 1 ); //returns the highest profit since last buy signal. the basis for the trailing calculation. 
  60. XXXL= XXL*(1-(x2/100)); // if trailing turned on =ok otherwise =null
  61. ZL= ExRem( Cross(XXXL, Lprofit), Buy==1); // Just first signal counts. highly important!!!!!!!! Also calculates critical sell levels
  62. Sell= IIf(ZL==1 AND TL==True, 4, 0); // return a sell signal=4 if z1=1 and TL=true (yes)
  63. ////////FOR SHORT POSITION PERCENT////
  64. XXS=HighestSince( Short==1, Sprofit, 1 );  // same as above
  65. XXXS= XXS*(1-(x2/100));
  66. ZS= ExRem( Cross(XXXS, Lprofit), Short==1);
  67. Cover= IIf(ZS==1 AND TL==True, 4, 0);
  68. PlotShapes( Buy* shapeUpArrow , colorGreen, 0); 
  69. PlotShapes( Short* shapeDownArrow , colorGreen, 0);
  70. PlotShapes( Sell* shapeDigit1 , colorRed, 0);
  71. PlotShapes( Cover* shapeDigit2 , colorRed, 0);
  72. if(TLL==True AND TL=True) Plot(Lprofit,"L PROFIT",colorYellow,styleLeftAxisScale, styleLine) AND
  73. Plot(Sprofit,"S PROFIT",colorYellow,styleLeftAxisScale, styleLine) AND
  74. Plot(XXXL, "L TRAILING LEVEL",colorGreen,styleLeftAxisScale, styleLine) AND
  75.   Plot(XXXS, "S TRAILING LEVEL",colorGreen,styleLeftAxisScale, styleLine);
  76. //////////ABSOLUTE PROFIT STOP////////////////////////////
  77. ML=ParamToggle("FANCY A MAX STOP IN PERCENT?", "No|Yes",0);
  78. x1=Param( "          SET MAX ACCEPTED LOSS PER TRADE IN PERCENT", 1, 0 ,50 ,1);
  79. XS =ExRem(Cross (1-(x1/100),e), Buy==1);
  80. Sell=IIf( XS==1 AND ML==True, 2, 0); 
  81. //////////////////////////////  SETTINGS AND BASIC DEFINITIONS ////////////////////
  82. SetOption("MaxOpenPositions", 2 ); 
  83. PositionSize = 10000;
  84. GraphXSpace=10;   /*"adds 10% extra space above AND below the graph line." In order to fit the extra text
  85. "When GraphXSpace is NOT defined in the formula then default 2% is used."*/
  86. dist=200;
  87. bcolor=scolor=colorBlue;
  88. //////////////////////////////  EXIT AND ENTRY MARKERS DEFINED  ////////////////////
  89. PlotShapes( Buy* shapeUpArrow , bcolor, 0); 
  90. PlotShapes( Short* shapeDownArrow , scolor, 0); 
  91. sellshape = IIf( Sell == 1, shapeSquare + shapePositionAbove, 
  92.    IIf( Sell == 2, shapeSquare + shapePositionAbove, 
  93.    IIf( Sell == 3, shapeSquare + shapePositionAbove, 
  94. IIf( Sell == 4, shapeSquare + shapePositionAbove, 
  95. IIf( Sell == 5, shapeSquare + shapePositionAbove,0 ))))); 
  96. Covershape= IIf( Cover == 1, shapeSquare, 
  97.    IIf( Cover == 2, shapeSquare, 
  98.    IIf( Cover == 3, shapeSquare, 
  99. IIf( Cover == 4, shapeSquare, 
  100. IIf( Cover == 5, shapeSquare,0 ))))); 
  101. LColor= IIf(Lprofit>0, colorGreen, colorRed);
  102. Scolor=IIf(Sprofit>0, colorGreen, colorRed);
  103. PlotShapes( SellShape, Lcolor, 0, C);
  104. PlotShapes( covershape, Scolor, 0, C);
  105. //////////////////////////////  FOR LOOP FOR PLOTING ENTRY AND EXIT TEXT ////////////////////
  106. for( i = 0; i < BarCount; i++ ) 
  107. xx  = Sum(Buy,i ); // counting of long trades. xx will not get a higher value until a new long position is open
  108. // therefor if we only allow one long and one short position (Exrem() ) xx can also be used as an identification 
  109. // number for the diffrent positions. 
  110. yy  = Sum(Short,i);
  111. if( Buy[i]==1)  PlotText("LONG : " + xx[i] + "nBuyPrice: "+ BuyPrice[ i ], i, H[ i ]-dist, colorBlack, bcolor ); 
  112.    
  113. if( Sell[i]==1 ) PlotText( "LONG : " +xx[i]+ "nREGULAR EXITn"+ "Sell:     "+ SellPrice[ i ]+"nP/ L:     " 
  114. +Lprofit[ i ], i, H[ i ]+dist, colorBlack, Lcolor[i] ); 
  115. if( Sell[i]==2 ) PlotText( "LONG : " +xx[i]+ "nMAXIMUM LOSSn"+ "Sell:     "+ SellPrice[ i ] +"nP/ L:     " 
  116. +Lprofit[ i ], i, H[ i ]+dist, colorBlack, Lcolor[i] ); 
  117. if( Sell[i]==3 ) PlotText( "LONG : " +xx[i]+ "nPROFIT TARGETn"+ "Sell:    "+ SellPrice[ i ] +"nP/ L:     " 
  118. +Lprofit[ i ], i, H[ i ]+dist, colorBlack, Lcolor[i] ); 
  119. if( Sell[i]==4 ) PlotText( "LONG : " +xx[i]+ "nTRAILING STOPn"+ "Sell:    "+ SellPrice[ i ] +"nP/ L:     " 
  120. +Lprofit[ i ], i, H[ i ]+dist, colorBlack, Lcolor[i] ); 
  121. if( Sell[i]==5 ) PlotText( "LONG ; " +xx[i]+ "nNBAR STOPn"+ "Sell:        "+ SellPrice[ i ] +"nP/ L:     " 
  122. +Lprofit[ i ], i, H[ i ]+dist, colorBlack, Lcolor[i] ); 
  123. if( Short[i]==1 ) PlotText( "SHORT : "+ yy[i]+ "nShortprice: "+ ShortPrice[ i ], i, L[ i ]-dist, colorBlack, bcolor ); 
  124. if( Cover[i]==1 ) PlotText( "SHORT : " +yy[i]+ "nREGULAR EXITn"+ "Cover:    "+ CoverPrice[ i ]+"nP/ L:    " 
  125. +Sprofit[ i ], i, H[ i ]+dist, colorBlack, Scolor[i] ); 
  126. if( Cover[i]==2 ) PlotText( "SHORT : " +yy[i]+ "nMAXIMUM LOSSn"+ "Cover:    "+ CoverPrice[ i ]+"nP/ L:    " 
  127. +Sprofit[ i ], i, H[ i ]+dist, colorBlack, Scolor[i] ); 
  128. if( Cover[i]==3 ) PlotText( "SHORT : " +yy[i]+ "nPROFIT TARGETn"+ "Cover:   "+ CoverPrice[ i ]+"nP/ L:    " 
  129. +Sprofit[ i ], i, H[ i ]+dist, colorBlack, Scolor[i] ); 
  130. if( Cover[i]==4 ) PlotText( "SHORT : " +yy[i]+ "nTRAILING STOPn"+ "Cover:   "+ CoverPrice[ i ]+"nP/ L:    " 
  131. +Sprofit[ i ], i, H[ i ]+dist, colorBlack, Scolor[i] ); 
  132. if( Cover[i]==5 ) PlotText( "SHORT : " +yy[i]+ "nNBAR STOPn"+ "Cover:       "+ CoverPrice[ i ]+"nP/ L:    " 
  133. +Sprofit[ i ], i, H[ i ]+dist, colorBlack, Scolor[i] );