Stops Implementation in AFS.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Stops Implementation in AFS
  4. //  Author/Uploader: Marek Chlopek 
  5. //  E-mail:          mchlopek@post.pl
  6. //  Date/Time Added: 2001-11-29 16:03:15
  7. //  Origin:          
  8. //  Keywords:        Stops, ApplyStop
  9. //  Level:           medium
  10. //  Flags:           system,exploration
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=136
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=136
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Please find attached afl script with stops implementation directly as a
  17. //
  18. //  afl code without using ApplyStop formula. This implementation gives
  19. //
  20. //  possibility to get arrows on the chart.
  21. //
  22. //  Also please note this stops have been split into two parts - for long
  23. //
  24. //  and short trades.
  25. //
  26. //  Also activation level is defined as a level when stop should be
  27. //
  28. //  activated. By multiplying stop code you can get (a) stop loss, (b)
  29. //
  30. //  static save profit stop (means: static stop activated when you start
  31. //
  32. //  getting profit and suddenly market turns around - this stop is used to
  33. //
  34. //  at least have money for brokerage fee) and (c) trailing stop.
  35. //
  36. //  The reason why I have started to think about stops is my message:
  37. //
  38. //  http://groups.yahoo.com/group/amibroker/message/6691
  39. //
  40. //  Please note this is draft version and should be still tested.
  41. //
  42. //  Any comments, bug reports or improvements are welcome.
  43. //
  44. //------------------------------------------------------------------------------
  45. // TEST.AFL v 0.03 28/11/2001
  46. // Testing Stops
  47. // Developed by Marek Chlopek
  48. // Coded Marek Chlopek, November 2001
  49. // Support from Tomasz Janeczko and Amibroker Mailing List members - THANKS!!!
  50. // ****************************************************************************************
  51. // STATIC EXPLORATION IN AMIBROKER 
  52. // ****************************************************************************************
  53. Filter = 1;
  54. NumColumns = 5;
  55. Column0 = O; Column0Name = "O"; Column0Format = 1.2;
  56. Column1 = H; Column1Name = "H"; Column1Format = 1.2;
  57. Column2 = L; Column2Name = "L"; Column2Format = 1.2;
  58. Column3 = C; Column3Name = "C"; Column3Format = 1.2;
  59. Column4 = V; Column4Name = "V"; Column4Format = 1.0;
  60. // END OF "STATIC EXPLORATION IN AMIBROKER" SECTION
  61. // ****************************************************************************************
  62. // TRADING SYSTEM GLOBAL ENTRY FORMULA
  63. // ****************************************************************************************
  64. Buy   = Cross(Close, 115);
  65. Short = Cross(150, Close);
  66. // END OF "TRADING SYSTEM GLOBAL ENTRY FORMULA" SECTION
  67. // ****************************************************************************************
  68. // TRADING SYSTEM LONG STOP FORMULA
  69. // ****************************************************************************************
  70. BuyStopLoss = 0; // 0 - not a stop loss formula, stop must be activated
  71.                  // 1 - stop is activated without checking ActiveLevel
  72. // How many bars ago was the last Buy signal?
  73. BuyBarsSince = BarsSince(Buy == 1);
  74. // Setting stop level
  75. // As an example BuyStopLevel depends directly on BuyPrice and a constant
  76. // Could be also: BuyPrice + ATR or any other dynamic formula
  77. BuyStopLevel = Ref(BuyPrice, -BuyBarsSince) + 3;
  78. // Setting the level to activate stop
  79. // BuyActivateLevel depends directly on BuyPrice and a constant
  80. // and I think this is how it should be - BuyActiveLevel should not be dynamically calculated
  81. // NOTE: When BuyStopLoss = 1, BuyActiveLevel is not important
  82. BuyActiveLevel = Ref(BuyPrice, -BuyBarsSince) + 22;
  83. // Active is triggered when the highest price since Buy is higher then BuyActiveLevel or
  84. // is always 1 (True) when BuyStopLoss = 1
  85. // NOTE: Cross() returns 0 when HHV = BuyActiveLevel 
  86. BuyActive = Cross(BuyActiveLevel, HHV(High, -BuyBarsSince)) OR BuyStopLoss;
  87. // BuyStop is triggered when Low of the session is lower than BuyStopLevel
  88. // NOTE: Cross() returns 0 when BuyStopLevel = Low
  89. BuyStop = Cross(Low, BuyStopLevel);
  90. // BuyActive will be 1 (True) till BuyStop is triggered
  91. // therefore we will know if BuyStop is activated and should be executed
  92. BuyActive = Flip(BuyActive, BuyStop);
  93. // When gap on open - use Open otherwise use BuyStopLevel as a SellPrice
  94. SellPrice = Min(Open, BuyStopLevel);
  95. // Exploration in Amibroker
  96. AddColumn(BuyStopLoss,    "BuyStopLoss",    format=1.0);
  97. AddColumn(BuyBarsSince,   "BuyBarsSince",   format=1.0);
  98. AddColumn(BuyStopLevel,   "BuyStopLevel",   format=1.2);
  99. AddColumn(BuyActiveLevel, "BuyActiveLevel", format=1.2);
  100. AddColumn(BuyStop,        "BuyStop",        format=1.0);
  101. AddColumn(BuyActive,      "BuyActive",      format=1.0);
  102. // END OF "TRADING SYSTEM LONG STOP FORMULA" SECTION
  103. // ****************************************************************************************
  104. // TRADING SYSTEM SHORT STOP FORMULA
  105. // ****************************************************************************************
  106. ShortStopLoss = 0; // 0 - not a stop loss formula, stop must be activated
  107.                    // 1 - stop is activated without checking ActiveLevel
  108. // How many bars ago was the last Short signal?
  109. ShortBarsSince = BarsSince(Short == 1);
  110. // Setting stop level
  111. // As an example ShortStopLevel depends directly on ShortPrice and a constant
  112. // Could be also: ShortPrice - ATR or any other dynamic formula
  113. ShortStopLevel = Ref(ShortPrice, -ShortBarsSince) - 3;
  114. // Setting the level to activate stop
  115. // ShortActivateLevel depends directly on ShortPrice and a constant
  116. // and I think this is how it should be - ShortActiveLevel should not be dynamically calculated
  117. // NOTE: When ShortStopLoss = 1, ShortActiveLevel is not important
  118. ShortActiveLevel = Ref(ShortPrice, -ShortBarsSince) - 22;
  119. // Active is triggered when the lowest price since Short is lower then ShortActiveLevel or
  120. // is always 1 (True) when ShortStopLoss = 1
  121. // NOTE: Cross() returns 0 when LLV = ShortActiveLevel 
  122. ShortActive = Cross(ShortActiveLevel, LLV(Low, -ShortBarsSince)) OR ShortStopLoss;
  123. // ShortStop is triggered when High of the session is higher than ShortStopLevel
  124. // NOTE: Cross() returns 0 when ShortStopLevel = High
  125. ShortStop = Cross(High, ShortStopLevel);
  126. // ShortActive will be 1 (True) till ShortStop is triggered
  127. // therefore we will know if ShortStop is activated and should be executed
  128. ShortActive = Flip(ShortActive, ShortStop);
  129. // When gap on open - use Open otherwise use ShortStopLevel as a CoverPrice
  130. CoverPrice = Max(Open, ShortStopLevel);
  131. // Exploration in Amibroker
  132. AddColumn(ShortStopLoss,    "ShortStopLoss",    format=1.0);
  133. AddColumn(ShortBarsSince,   "ShortBarsSince",   format=1.0);
  134. AddColumn(ShortStopLevel,   "ShortStopLevel",   format=1.2);
  135. AddColumn(ShortActiveLevel, "ShortActiveLevel", format=1.2);
  136. AddColumn(ShortStop,        "ShortStop",        format=1.0);
  137. AddColumn(ShortActive,      "ShortActive",      format=1.0);
  138. // END OF "TRADING SYSTEM SHORT STOP FORMULA" SECTION
  139. // ****************************************************************************************
  140. // TRADING SYSTEM GLOBAL EXIT FORMULA
  141. // ****************************************************************************************
  142. Sell  = BuyStop OR Short;
  143. Cover = ShortStop OR Buy;
  144. // Exploration in Amibroker
  145. AddColumn(Buy,        "Buy",        format=1.0);
  146. AddColumn(Short,      "Short",      format=1.0);
  147. AddColumn(Sell,       "Sell",       format=1.0);
  148. AddColumn(Cover,      "Cover",      format=1.0);
  149. AddColumn(BuyPrice,   "BuyPrice",   format=1.2);
  150. AddColumn(ShortPrice, "ShortPrice", format=1.2);
  151. AddColumn(SellPrice,  "SellPrice",  format=1.2);
  152. AddColumn(CoverPrice, "CoverPrice", format=1.2);
  153. // END OF "TRADING SYSTEM GLOBAL EXIT FORMULA" SECTION
  154. // ****************************************************************************************
  155. // GRAPHIC PRESENTATION IN AMIBROKER
  156. // ****************************************************************************************
  157. // [code for graphic presentation]
  158. // END OF "GRAPHIC PRESENTATION IN AMIBROKER" SECTION
  159. // ****************************************************************************************
  160. // END OF CODE (TEST.AFL)
  161. // ****************************************************************************************
  162. /* old style comment - to avoid parser bug */