设为首页收藏本站

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

55日海龟实盘交易系统 [复制链接]

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
跳转到指定楼层
1#
发表于 2009-8-11 15:11:05 |只看该作者 |倒序浏览
TB上写公式,一般写两套,一套用来测试历史数据,一套用来实盘交易。今天写了个55日海龟实盘交易系统,下面几天打算拿过来放在10s bar 上面用模拟帐户测试一下。
这个公式的主要思想是这样:
首先,因为海龟交易系统在单一市场上最多持仓4个单位,所以第一步是判断目前的持仓状况。根据不同的持仓状况进行讨论。
第二,因为实盘交易的时候,监控的是实时的tick数据,因此,判断建仓或者平仓的时候,就直接根据Q_last即实时价格来判断。
第三,为了提高程序运行效率,用了很多return。
具体的代码如下,欢迎指正:
  1. Vars
  2.     Numeric Minpoint;
  3.         Numeric Qhold;
  4.         Numeric N;
  5.         Numeric TotalEquity;
  6.         Numeric TurtleUnits;
  7.         Numeric L20;
  8.         Numeric H20;
  9.         Numeric L55;
  10.         Numeric H55;
  11.         numeric rprice;
  12. Begin
  13.         MinPoint = MinMove*PriceScale;
  14.     N = AverageFC(TrueRange,20);
  15.     TotalEquity = CurrentCapital()+ Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio());
  16.     TurtleUnits = (TotalEquity/100) /(N * ContractUnit()*BigPointValue());
  17.     TurtleUnits = IntPart(TurtleUnits);
  18.     Qhold=A_TotalPosition/TurtleUnits;
  19.     Qhold=RoundUp(Qhold,0);
  20.         H55=HighestFC(High[1],55);
  21.         L55=LowestFC(low[1],55);
  22.         H20=HighestFC(High[1],20);
  23.         L20=LowestFC(Low[1],20);
  24.     rprice=A_orderfilledprice(0);


  25.    if (Qhold==-4)
  26.       {if(Q_last>rprice+2*N || Q_last>H20)
  27.          {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_AskPrice());
  28.                  Return;}
  29.                  Return;}
  30.    if (Qhold==-3)
  31.       {if (Q_last>rprice+2*N || Q_last>H20)
  32.           {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_AskPrice());
  33.                  Return;}
  34.        if (Q_last<rprice-0.5*N)
  35.           {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
  36.                   Return;}
  37.                   Return;}
  38.    if (Qhold==-2)
  39.       {if (Q_last>rprice+2*N || Q_last>H20)
  40.          {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_askprice());
  41.                   Return;}
  42.        if (Q_last<rprice-N)
  43.          {A_sendorder(enum_sell,enum_entry,2*TurtleUnits,Q_bidprice());
  44.                  Return;}
  45.        if (Q_last<rprice-0.5*N)
  46.                 {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
  47.                 Return;}
  48.                 Return;}
  49.    if (Qhold==-1)
  50.       {if (Q_last>rprice+2*N || Q_last>H20)
  51.          {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_askprice());
  52.                  Return;}
  53.        if (Q_last<rprice-1.5*N)
  54.          {A_sendorder(enum_sell,enum_entry,3*TurtleUnits,Q_bidprice());
  55.                  Return;}
  56.        if (Q_last<rprice-N)
  57.                  {A_sendorder(enum_sell,enum_entry,2*TurtleUnits,Q_bidprice());
  58.                  Return;}     
  59.        if (Q_last<rprice-0.5*N)
  60.          {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
  61.          Return;}
  62.          Return;}                 
  63.    if (Qhold==0)
  64.       {if (Q_last>H55+1.5*N)
  65.                  {A_sendorder(enum_buy,enum_entry,4*TurtleUnits,Q_askprice());
  66.                  Return;}
  67.            if (Q_last>H55+N)
  68.                  {A_sendorder(enum_buy,enum_entry,3*TurtleUnits,Q_askprice());
  69.                  Return;}
  70.       if (Q_last>H55+0.5*N)
  71.          {A_sendorder(enum_buy,enum_entry,2*TurtleUnits,Q_askprice());
  72.                   Return;}
  73.       if (Q_last>H55)
  74.          {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
  75.                  Return;}
  76.       if (Q_last <L55)
  77.          {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
  78.                  Return;}
  79.       if (Q_last<L55-0.5*N)
  80.          {A_sendorder(enum_sell,enum_entry,2*TurtleUnits,Q_bidprice());
  81.                  Return;}
  82.       if (Q_last<L55-N)
  83.          {A_sendorder(enum_sell,enum_entry,3*TurtleUnits,Q_bidprice());
  84.                  Return;}
  85.       if (Q_last<L55-1.5*N)
  86.          {A_sendorder(enum_sell,enum_entry,4*TurtleUnits,Q_bidprice());
  87.          Return;}
  88.              Return;}
  89.    if (Qhold==1)
  90.       {if (Q_last<rprice-2*N || Q_last<L20)
  91.          {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
  92.                  Return;}
  93.       if (Q_last>rprice+1.5*N)
  94.          {A_sendorder(enum_buy,enum_entry,3*TurtleUnits,Q_askprice());
  95.                  Return;}
  96.       if (Q_last>rprice+N)
  97.          {A_sendorder(enum_buy,enum_entry,2*TurtleUnits,Q_askprice());
  98.                  Return;}
  99.       if (Q_last>rprice+0.5*N)
  100.          {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
  101.                  Return;}
  102.                  Return;}
  103.    if (Qhold==2)
  104.       {if (Q_last<rprice-2*N || Q_last<L20)
  105.          {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
  106.                  Return;}
  107.       if (Q_last>rprice+N)
  108.          {A_sendorder(enum_buy,enum_entry,2*TurtleUnits,Q_askprice());
  109.                  Return;}
  110.       if (Q_last>rprice+0.5*N)
  111.          {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
  112.                  Return;}
  113.                  Return;}
  114.   if (Qhold==3)
  115.       {if (Q_last<rprice-2*N || Q_last<L20)
  116.          {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
  117.                  Return;}
  118.       if (Q_last>rprice+0.5*N)
  119.          {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
  120.                  Return;}
  121.                  Return;}
  122.   if (Qhold==4)
  123.       {if (Q_last<rprice-2*N || Q_last<L20)
  124.          {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
  125.                  Return;}
  126.                  Return;}
  127. End
复制代码

Rank: 3Rank: 3

精华
0
UID
4625
积分
163
帖子
30
主题
13
阅读权限
40
注册时间
2009-6-12
最后登录
2019-3-24
2#
发表于 2009-8-11 22:11:23 |只看该作者
靠,怎么这么长啊!看得头晕

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
3#
发表于 2009-8-12 09:49:50 |只看该作者
今天开始测试,用橡胶1001进行模拟盘测试,周期为10s的k线图,初始资金475000记录测试过程和发现的问题。
9:05开始插入交易指令,并设置为下单不需要用户确认,9点10分发出卖空委托,系统提示资金不足。查原因,发现是因为由于10秒钟的N比较小,算出的海龟单位太大所致。因此,将原代码中
TurtleUnits = (TotalEquity/100) /(N * ContractUnit()*BigPointValue());的100改为1000.
从9点10分到9点49分,中间已经出现了5次行情没有更新的情况,不知道什么原因????

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
4#
发表于 2009-8-12 10:01:44 |只看该作者
9:55分,行情正常更新。但是TB上行情的时间是9:46(实际时间是9:55),TB上的行情时间到达9:51的时候橡胶快速冲高,海龟发出买入指令,没有成交,可能是由于行情更新太快的原因。

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
5#
发表于 2009-8-12 10:09:02 |只看该作者
中间有几笔单子,都是止损出局。
10:06分,橡胶行情又停止更新,到10:09分才恢复,

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
6#
发表于 2009-8-12 10:10:53 |只看该作者
10:09分,行情恢复,又是快速补充前面缺失的行情数据,导致委托发出但是无法成交。

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
7#
发表于 2009-8-12 11:00:29 |只看该作者
11:00,平仓亏损12100,手续费4978. 目前的结论是,海龟系统不适合10s的日内交易
10s的N一般在10-15之间,N太小了,小小的波动就会止损出局。

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
8#
发表于 2009-8-12 13:01:00 |只看该作者
11:00开始,在tick上交易,到11:30,半个小时又亏掉一万块钱,现在的平仓亏损为24075,手续费8721.
下午放在1分钟线上试试看

使用道具 举报

Rank: 4

精华
0
UID
5004
积分
290
帖子
69
主题
18
阅读权限
50
注册时间
2009-8-3
最后登录
2019-3-24
9#
发表于 2009-8-12 15:02:09 |只看该作者
14:56平仓
下午1分钟线上表现不错。
做了两次,一次小亏,一次大赚。目前账户情况为,平仓亏损13225,手续费9329。
交易明细见附件:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 1

精华
0
UID
22149
积分
21
帖子
10
主题
1
阅读权限
10
注册时间
2010-12-23
最后登录
2013-11-1
10#
发表于 2013-5-5 19:17:38 |只看该作者
:o:o:o:o

使用道具 举报

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

bottom

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

GMT+8, 2024-5-24 02:27

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部