《TradeBlazer 交易开拓者实现海龟交易系统源代码》由会员分享,可在线阅读,更多相关《TradeBlazer 交易开拓者实现海龟交易系统源代码(5页珍藏版)》请在金锄头文库上搜索。
1、TradeBlazer 交易开拓者实现海龟交易系统源代码相信大家没有不知道海龟法则的,这是用 TradeBlazer 实现海龟法则的源代码! 1. Params2. Numeric RiskRatio(1); / % Risk Per N ( 0 - 100)3. Numeric ATRLength(20); / 平均波动周期 ATR Length4. Numeric boLength(20); / 短周期 BreakOut Length5. Numeric fsLength(55); / 长周期 FailSafe Length6. Numeric teLength(10); / 离市周期 T
2、railing Exit Length7. Bool LastProfitableTradeFilter(True); / 使用入市过滤条件8. Vars9. Numeric MinPoint; / 最小变动单位10. Numeric N; / N 值11. Numeric TotalEquity; / 按最新收盘价计算出的总资产12. Numeric TurtleUnits; / 交易单位13. NumericSeries DonchianHi; / 唐奇安通道上轨,延后 1 个 Bar14. NumericSeries DonchianLo; / 唐奇安通道下轨,延后 1 个 Bar15.
3、 NumericSeries fsDonchianHi; / 唐奇安通道上轨,延后 1 个 Bar,长周期16. NumericSeries fsDonchianLo; / 唐奇安通道下轨,延后 1 个 Bar,长周期17. Numeric ExitHighestPrice; / 离市时判断需要的 N 周期最高价18. Numeric ExitLowestPrice; / 离市时判断需要的 N 周期最低价19. Numeric myEntryPrice; / 开仓价格20. Numeric myExitPrice; / 平仓价格21. Bool SendOrderThisBar(False);
4、 / 当前 Bar 有过交易22. NumericSeries preEntryPrice(0); / 前一次开仓的价格,存放到全局变量 0 号位置23. BoolSeries PreBreakoutFailure(false); / 前一次突破是否失败24. Begin25. If(BarStatus = 0)26. 27. preEntryPrice = InvalidNumeric;28. PreBreakoutFailure = false;29. Else30. 31. preEntryPrice = preEntryPrice1;32. PreBreakoutFailure = P
5、reBreakoutFailure1;33. 34. 35. MinPoint = MinMove*PriceScale;36. N = AverageFC(TrueRange,ATRLength);37. TotalEquity = CurrentCapital()+ Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio();38. TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue();39. Tur
6、tleUnits = IntPart(TurtleUnits); / 对小数取整40. 41. DonchianHi = HighestFC(High1,boLength);42. DonchianLo = LowestFC(Low1,boLength);43. 44. fsDonchianHi = HighestFC(High1,fsLength);45. fsDonchianLo = LowestFC(Low1,fsLength);46. 47. Commentary(N=+Text(N);48. Commentary(preEntryPrice=+Text(preEntryPrice);
7、49. Commentary(PreBreakoutFailure=+IIFString(PreBreakoutFailure,True,False);50. 51. / 当不使用过滤条件,或者使用过滤条件并且条件为 PreBreakoutFailure 为 True 进行后续操作52. If(MarketPosition = 0 & (!LastProfitableTradeFilter) Or (PreBreakoutFailure)53. 54. / 突破开仓55. If(CrossOver(High,DonchianHi) & TurtleUnits = 1)56. 57. / 开仓价
8、格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交58. myEntryPrice = min(high,DonchianHi + MinPoint);59. myEntryPrice = IIF(myEntryPrice = 1)67. 68. / 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交69. myEntryPrice = max(low,DonchianLo - MinPoint);70. myEntryPrice = IIF(myEntryPrice Open, Open,myEntryPrice); /
9、大跳空的时候用开盘价代替71. preEntryPrice = myEntryPrice;72. SendOrderThisBar = True;73. SellShort(TurtleUnits,myEntryPrice);74. SendOrderThisBar = True;75. PreBreakoutFailure = False;76. 77. 78. 79. / 长周期突破开仓 Failsafe Breakout point80. If(MarketPosition = 0)81. 82. If(CrossOver(High,fsDonchianHi) & TurtleUnits
10、 = 1)83. 84. / 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交85. myEntryPrice = min(high,fsDonchianHi + MinPoint);86. myEntryPrice = IIF(myEntryPrice = 1)94. 95. / 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交96. myEntryPrice = max(low,fsDonchianLo - MinPoint);97. myEntryPrice = IIF(myEntryPrice Open,
11、Open,myEntryPrice); / 大跳空的时候用开盘价代替98. preEntryPrice = myEntryPrice;99. SellShort(TurtleUnits,myEntryPrice);100. SendOrderThisBar = True;101. PreBreakoutFailure = False;102. 103. 104. 105. If(MarketPosition = 1) / 有多仓的情况106. 107. / 求出持多仓时离市的条件比较值108. ExitLowestPrice = Lowest(Low1,teLength);109. Comme
12、ntary(ExitLowestPrice=+Text(ExitLowestPrice);110. If(Low Open, Open,myEntryPrice); / 大跳空的时候用开盘价代替114. Sell(0,myExitPrice); / 数量用 0 的情况下将全部平仓115. Else116. 117. If(preEntryPrice!=InvalidNumeric & TurtleUnits = 1)118. 119. If(Open = preEntryPrice + 0.5*N) / 如果开盘就超过设定的 1/2N,则直接用开盘价增仓。120. 121. myEntryPrice = Open;122. preEntryPrice = myEntryPrice;123. Buy(TurtleUnits,myEntryPrice);124.