设为首页收藏本站

 找回密码
 注册
查看: 50999|回复: 43
打印 上一主题 下一主题

(原创)原版海龟交易系统-源码 [复制链接]

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
跳转到指定楼层
1#
发表于 2013-6-3 17:21:09 |只看该作者 |倒序浏览
本帖最后由 米小兔 于 2013-6-28 22:29 编辑


tb自带的海龟交易系统有些问题,还比较严重,和海龟交易系统原版意思差得有点远.试着在tb自带的源码中修改,改来改去未达到效果,索性重写了一个.
在仔细阅读海龟交易系统的中文说明的时候,发现有些问题没有说清楚,例如首次开仓和后面三次加仓的仓位分别是多少.针对这一点,我理解为每次加仓都按照当时最新账户权益计算出标准头寸,也就意味着首次开仓和后面三次加仓的仓位都可能不一样,规律是后面开仓的手数可能会大于前面的,因为满足加仓的时候肯定是有盈利的.
附件的压缩包有两个版本的系统文件,V103在前一个版本基础上增加了手工判定多空趋势的参数,这也是应广大客户需求所加入进去,这样就可以加入人为的趋势判断进去了.Numeric Direction(0);     // 多空信号过滤条件,值为0不过滤,值为1只做多,值为1只做空;
如果有朋友需要源码,可以联系我.
版本:ITF_TurtleRules_V102
        关键变量的计算
        1) N值的计算
        每天开盘第一根k线计算前LengthAtr长度的平均真实波幅;
        2) 价值波动 = N*每点的价值(ContractUnit()*BigPointValue())
        3) 标准头寸计算
        根据每天开盘时计算的N和价值波动率计算最新标准头寸.
        标准单位头寸(TurtleUnits) = (k线开盘价计算的动态权益*风险比例)/价值波动率;
        首次入市条件
        1) LengthFast(20)长度的唐奇安通道突破;
        2) LengthSlow(55)长度的唐奇安通道突破;
        备注:前一次平仓是因为止损,随后的开仓需满足条件一入市.如果前一次平仓是一般离市,则随后的开仓需满足条件二入市;
        加仓
        1) 与最近一次开仓价格间隔1/2倍N增加仓位;
        止损
        1) 最近一次开仓价格反向2N;
        离市
        1) LengthExit(10)长度的唐奇安通道被方向突破;
        2) LengthAtr(20)长度的唐奇安通道被方向突破;
        参数说明
    Numeric RiskRatio(1);               // % Risk Per N ( 0 - 100)
    Numeric LengthAtr(20);              // 平均波动周期 ATR Length
    Numeric LengthFast(20);             // 短周期 BreakOut Length
    Numeric LengthSlow(55);            // 长周期 FailSafe Length
    Numeric LengthExit(10);             // 离市周期 Trailing Exit Length
Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件

        适用环境
        软体:TB V4.3.6
        K线图表:15分\30分
        品种:所有
        测试
        品种选择:RU\TA\RB\J
        本金:200万,每个品种按照100万初始资金计算仓位;
        时间:2009年1月1日-2013年6月3日
        净值曲线图:

        最大回撤比例:23.66%        回撤值:47.36万        发生时间:2011年9月22日
        最大回撤值:47.36万        回撤比例:23.66%        发生时间:2011年9月22日
        累计净利润:597万
        净值:3.99
版本:ITF_TurtleRules_V103
        改进
        1) 增加多空趋势判别参数Direction, 值为0不过滤,值为1只做多,值为-1只做空;

        参数
        Numeric Direction(0);                   // 多空信号过滤条件,值为0不过滤,值为1只做多,值为1只做空;
        Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
        Numeric LengthAtr(20);                  // 平均波动周期 ATR Length
        Numeric LengthFast(20);                 // 短周期 BreakOut Length
        Numeric LengthSlow(55);                 // 长周期 FailSafe Length
        Numeric LengthExit(10);                 // 离市周期 Trailing Exit Length
        Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件

        适用环境
        软体:TB V4.3.6
        K线图表:15分钟图
        品种:所有

        联系我们
        国贸期货上海营业部量化组
        电话:021-51969281
        邮箱:yuwy@itf.com.cn
        地址:上海张杨路620号东楼902室
        客服热线:4008888958
        网址:www.itf.com.cn
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 1

精华
0
UID
115339
积分
27
帖子
4
主题
3
阅读权限
10
注册时间
2013-2-4
最后登录
2015-9-22
2#
发表于 2013-6-5 16:54:17 |只看该作者
下下来看一下,谢谢楼主分享~

使用道具 举报

Rank: 1

精华
0
UID
120105
积分
26
帖子
4
主题
2
阅读权限
10
注册时间
2013-6-7
最后登录
2013-6-8
3#
发表于 2013-6-8 14:03:26 |只看该作者
怎么拿源码?

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
117799
积分
2341
帖子
151
主题
6
阅读权限
70
注册时间
2013-4-9
最后登录
2015-1-23
4#
发表于 2013-6-9 10:40:02 |只看该作者
我测试了一下15分钟的RU888,太差了吧!这样不是叫人去送死吗? 还是拿真实一一点的吧!要不把源码公开,让大家学习学习我觉的那才是群主大公无私的表现,要不太别有用心了?

l图如下所示:







附件: 你需要登录才可以下载或查看附件。没有帐号?注册
和大家一样也是一个期货爱好者,在前进的道路上也是伤疤累累!但并为自己的爱好奋斗着。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
117799
积分
2341
帖子
151
主题
6
阅读权限
70
注册时间
2013-4-9
最后登录
2015-1-23
5#
发表于 2013-6-9 10:45:49 |只看该作者
如果大家想学习的话,我给推荐一下群,238678663,都是来学习和真正交流的。没有有些人那样地别有用心啦!

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
6#
发表于 2013-6-18 14:28:42 |只看该作者
我们是期货公司的,希望和实盘做期货程序化交易的朋友交流,更希望客户能将资金放在我司交易.
tb的测试报告有很多错误显示的地方,我们一般用excel处理交易记录,得出一些关键绩效数据,不知道楼上的有没有发现.
有不少要源码的朋友,我就不一一发了,把源码贴上供大家交流指正.
  1. //------------------------------------------------------------------------
  2. // 简称: ITF_TurtleRules_V102
  3. // 名称: TurtleRules_V102
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.     Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
  10.     Numeric LengthAtr(20);                  // 平均波动周期 ATR Length
  11.     Numeric LengthFast(20);                 // 短周期 BreakOut Length
  12.     Numeric LengthSlow(55);                 // 长周期 FailSafe Length
  13.     Numeric LengthExit(10);                 // 离市周期 Trailing Exit Length
  14.     Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件
  15. Vars
  16.         Numeric MinPoint;                       // 最小变动单位
  17.     NumericSeries N;                        // N 值
  18.     NumericSeries TotalEquity;              // 按最新收盘价计算出的总资产
  19.     NumericSeries TurtleUnits;              // 交易单位
  20.     NumericSeries DonchianFastUpper;        // 短周期唐奇安通道上轨,长度LengthFast;
  21.     NumericSeries DonchianFastLower;        // 短周期唐奇安通道下轨,长度LengthFast;
  22.     NumericSeries DonchianSlowUpper;        // 长周期唐奇安通道上轨,长度LengthSlow;
  23.     NumericSeries DonchianSlowLower;        // 长周期唐奇安通道下轨,长度LengthSlow;
  24.     NumericSeries DonchianExitUpper;        // 离市时判断需要的N周期最高价,长度LengthExit;
  25.     NumericSeries DonchianExitLower;        // 离市时判断需要的N周期最低价,长度LengthExit;
  26.     NumericSeries MyPrice;             // 开仓价格
  27.     NumericSeries MyExitPrice;              // 平仓价格
  28.         BoolSeries PreBreakoutFailure(false);        // 前一次突破是否失败
  29.         Bool SendOrderThisBar(False);                  // 当前Bar有过交易
  30.         NumericSeries AtrAve;                   // 记录日线级别长度为lengthAtr的平均真实波幅;
  31.         NumericSeries DayHigh;                  // 一天中的最高价;
  32.         NumericSeries DayLow;                   // 一天中的最低价;
  33.         Numeric i;                              // 循环计算所需指针;
  34.         NumericSeries Atr(0);                   // 当天的ATR
  35.         Numeric AtrIndex(0);                    // 存储真实波幅的全局变量的环的索引值;
  36.         NumericSeries DayCount(0);              // 交易日数;
  37.         NumericSeries CloseD_1;                 // 上一个交易日收盘价,过度CloseD(1);
  38.         NumericSeries MyBarsSinceToday;         // 过度BarsSinceToday;
  39. Begin
  40.         MinPoint = MinMove*PriceScale;
  41.         MyBarsSinceToday = BarsSinceToday;
  42.         CloseD_1 = CloseD(1);
  43.        
  44.         if(BarsSinceToday==0)
  45.         {
  46.                 DayCount = DayCount + 1;  //记录交易日数;
  47.                 DayHigh = High;
  48.                 DayLow = Low;
  49.                
  50.                 //从第二个交易日开始记录;
  51.                 if(DayCount>=2)  
  52.                 {                       
  53.                         // 前一日真实波幅;
  54.                         Atr = max(max(Abs(DayHigh[1]-CloseD_1),Abs(DayLow[1]-CloseD_1)),DayHigh[1]-DayLow[1]);  
  55.                        
  56.                         // 存储前一天的Atr到全局变量环0-19;
  57.                         AtrIndex =  (DayCount-2)%LengthAtr;
  58.                         SetGlobalVar(AtrIndex,Atr[1]);
  59.                 }
  60.                
  61.                 // 从第LengthAtr+1个交易日开始计算;
  62.                 if(DayCount>=LengthAtr+1)  
  63.                 {
  64.                         // 计算日线级别长度为LengthAtr的平均真实波幅;
  65.                         AtrAve = 0 ;
  66.                         for i=0 to LengthAtr-1
  67.                         {
  68.                                 AtrAve = AtrAve +  getGlobalVar(i);
  69.                         }
  70.                         AtrAve = AtrAve/LengthAtr;
  71.                         N = IntPart(AtrAve);
  72.                        
  73.                         DonchianFastUpper = Highest(DayHigh[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  74.                         DonchianFastLower = Lowest(DayLow[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  75.                        
  76.                         DonchianSlowUpper = Highest(DayHigh[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  77.                         DonchianSlowLower = Lowest(DayLow[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  78.                        
  79.                         DonchianExitUpper = Highest(DayHigh[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  80.                         DonchianExitLower = Lowest(DayLow[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  81.                 }
  82.                
  83.                 //账户最新资产 = 按当前Bar开盘价计算的可用资金 + 持仓保证金 ;
  84.                 TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
  85.                 //标准单位头寸 = (本金*风险比例)/价值波动率
  86.                 TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
  87.                 TurtleUnits = IntPart(TurtleUnits); // 对小数取整
  88.                 // PlotString("Units","Units="+Text(TurtleUnits),High+(High-Low),white);
  89.                 // PlotString("N","N="+Text(N),Low-(High-Low)/2,white);
  90.         }
  91.         Else
  92.         {
  93.                 DayHigh = Max(DayHigh,High);
  94.                 DayLow = Min(DayLow,Low);
  95.         }

  96.         If(MarketPosition==0 and TurtleUnits>=1)
  97.         {
  98.                 // 首次入市1:带过滤条件的,如果过滤条件为真,则需要前一笔交易是否是突破失败;
  99.                 if(LastProfitableTradeFilter==false Or PreBreakoutFailure )
  100.                 {
  101.                         //开多1:突破短周期唐奇安通道上轨;
  102.                         If(High>DonchianFastUpper)
  103.                         {
  104.                                 MyPrice = Max(Open,DonchianFastUpper)+MinPoint;
  105.                                 Buy(TurtleUnits,MyPrice);
  106.                                 MyExitPrice = MyPrice - 2*N;
  107.                                 SendOrderThisBar = true;
  108.                         }
  109.                        
  110.                         //开空1:突破短周期唐奇安通道下轨;
  111.                         if(Low<DonchianFastLower)
  112.                         {
  113.                                 MyPrice = Min(Open,DonchianFastLower)-MinPoint;
  114.                                 SellShort(TurtleUnits,MyPrice);
  115.                                 MyExitPrice = MyPrice + 2*N;
  116.                                 SendOrderThisBar = true;
  117.                         }
  118.                 }
  119.                
  120.                 // 首次入市2:过滤条件之外的,长周期唐奇安通道突破开仓;
  121.                 //开多2:突破长周期唐奇安通道上轨;
  122.                 else
  123.                 {
  124.                         if(CrossOver(High,DonchianSlowUpper))
  125.                         {
  126.                                 MyPrice = Max(Open,DonchianSlowUpper)+MinPoint;
  127.                                 Buy(TurtleUnits,MyPrice);
  128.                                 MyExitPrice = MyPrice - 2*N;
  129.                                 SendOrderThisBar = true;
  130.                         }
  131.                         //开空2:突破长周期唐奇安通道下轨;
  132.                         if(CrossUnder(Low,DonchianSlowLower))
  133.                         {
  134.                                 MyPrice = Min(Open,DonchianSlowLower)+MinPoint;
  135.                                 SellShort(TurtleUnits,MyPrice);
  136.                                 MyExitPrice = MyPrice + 2*N;
  137.                                 SendOrderThisBar = true;
  138.                         }
  139.                 }
  140.         }
  141.        
  142.         // 当持有多单;
  143.         if(MarketPosition==1)
  144.         {
  145.                 //离市:价格反向穿越离市的唐奇安通道;
  146.                 if(CrossUnder(Low,DonchianExitLower))
  147.                 {
  148.                         MyPrice = Min(Open,DonchianExitLower)-MinPoint;
  149.                         Sell(0,MyPrice);
  150.                         PreBreakoutFailure = False;  //假突破值为假;
  151.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  152.                 }
  153.                 Else
  154.                 {
  155.                         //加仓:与最近一次开仓价间隔0.5*N开仓;
  156.                         if(High>LastEntryPrice+0.5*N and TurtleUnits>=1)
  157.                         {
  158.                                 MyPrice = Max(Open,LastEntryPrice+0.5*N)-MinPoint;
  159.                                 Buy(TurtleUnits,MyPrice);
  160.                                 SendOrderThisBar = true;
  161.                         }
  162.                        
  163.                         //止损:价格反向穿越最近一次开仓价格-2N;
  164.                         if(Low<LastEntryPrice-2*N)
  165.                         {
  166.                                 MyPrice = Min(Open,LastEntryPrice-2*N)-MinPoint;
  167.                                 Sell(0,MyPrice);
  168.                                 PreBreakoutFailure = True;  //假突破值为真;
  169.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  170.                         }
  171.                 }
  172.         }
  173.         // 当持有空单;
  174.         else if(MarketPosition==-1)
  175.         {
  176.                 // 离市:价格反向穿越离市的唐奇安通道;
  177.                 if(CrossOver(High,DonchianExitUpper))
  178.                 {
  179.                         MyPrice = Max(Open,DonchianExitUpper)+MinPoint;
  180.                         BuyToCover(0,MyPrice);
  181.                         PreBreakoutFailure = False;  //假突破值为假;
  182.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  183.                 }
  184.                 Else
  185.                 {
  186.                         // 加仓:与最近一次开仓价格间隔0.5*N开仓;
  187.                         if(Low<LastEntryPrice-0.5*N and TurtleUnits>=1)
  188.                         {
  189.                                 MyPrice = Min(Open,LastEntryPrice-0.5*N)-MinPoint;
  190.                                 SellShort(TurtleUnits,MyPrice);
  191.                                 SendOrderThisBar = true;
  192.                         }
  193.                        
  194.                         // 止损:价格反向穿越最近一次开仓价格+2N;
  195.                         if(High>LastEntryPrice+2*N)
  196.                         {
  197.                                 MyPrice = Max(Open,LastEntryPrice+2*N)+MinPoint;
  198.                                 BuyToCover(0,MyPrice);
  199.                                 PreBreakoutFailure = True;  //假突破值为真;
  200.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  201.                         }
  202.                 }
  203.         }
  204.        
  205.         PlotNumeric("DonchianFastUpper",DonchianFastUpper);
  206.         PlotNumeric("DonchianFastLower",DonchianFastLower);
  207.         PlotNumeric("DonchianSlowUpper",DonchianSlowUpper);
  208.         PlotNumeric("DonchianSlowLower",DonchianSlowLower);
  209.         PlotNumeric("DonchianExitUpper",DonchianExitUpper);
  210.         PlotNumeric("DonchianExitLower",DonchianExitLower);       
  211.        
  212.         // Commentary("点值="+Text(ContractUnit()*BigPointValue()));
  213.         Commentary("TotalEquity="+Text(TotalEquity));
  214.         Commentary("N="+Text(N));
  215.         Commentary("Units="+Text(TurtleUnits));
  216.         // Commentary("Atr="+Text(Atr));
  217.         // Commentary("AtrAve="+Text(AtrAve));
  218.         // PlotNumeric("AtrAve",AtrAve);
  219.         Commentary("DayCount="+Text(DayCount));
  220.         Commentary("MyBarsSinceToday="+Text(MyBarsSinceToday[1]+1));
  221.        
  222.         if(PreBreakoutFailure == True)
  223.         {
  224.                 Commentary("PreBreakoutFailure = True");
  225.         }Else
  226.         {
  227.                 Commentary("PreBreakoutFailure = false");
  228.         }
  229.        
  230.         if(LastProfitableTradeFilter==true)
  231.         {
  232.                 Commentary("LastProfitableTradeFilter = True");
  233.         }Else
  234.         {
  235.                 Commentary("LastProfitableTradeFilter = False");
  236.         }
  237.        
  238. End
  239. //------------------------------------------------------------------------
  240. // 编译版本        GS2010.12.08
  241. // 用户版本        2013/05/08 22:28
  242. // 版权所有        arowana
  243. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  244. //                        每一版本的TrabeBlazer公式修改和重写的权利
  245. //------------------------------------------------------------------------
复制代码

使用道具 举报

Rank: 2

精华
0
UID
1883
积分
81
帖子
16
主题
1
阅读权限
30
注册时间
2008-7-15
最后登录
2016-5-16
7#
发表于 2013-6-26 14:00:57 |只看该作者
楼上公式错的,测试没信号

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
8#
发表于 2013-6-26 22:33:16 |只看该作者
理信 发表于 2013-6-26 14:00
楼上公式错的,测试没信号

是你自己不会用.
全局交易设置里面的初始本金,允许加仓次数,允许最大持仓手数,保证金比例,都设置对了再试一下.

使用道具 举报

Rank: 1

精华
0
UID
114866
积分
49
帖子
18
主题
6
阅读权限
10
注册时间
2013-1-15
最后登录
2013-9-13
9#
发表于 2013-6-27 15:38:57 |只看该作者
这段时间自己弄的均线交易程序亏了很多,想换成海龟的
研究一下楼主的有啥不同

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
10#
发表于 2013-6-28 10:48:24 |只看该作者
星辰之辉 发表于 2013-6-27 15:38
这段时间自己弄的均线交易程序亏了很多,想换成海龟的
研究一下楼主的有啥不同 ...

我又修改了一下代码,随后帖子跟上来.

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-27 06:14

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部