设为首页收藏本站

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

一点一点消化“海龟” [复制链接]

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
跳转到指定楼层
1#
发表于 2007-10-6 19:36:24 |显示全部楼层 |倒序浏览
系列疑问求助
1、
我将海龟置顶帖中84楼[ 本帖最后由 nopain 于 2007-9-23 09:17 编辑 ]
http://www.tradeblazer.net/forum/thread-154-6-1.html
的代码复制后,新建交易指令,为什么在IF0712上5分钟周期上有信号显示,超过5分钟以上周期后均都无一个信号?

2、
在有信号的5分钟图表上,离市的信号看不懂:





3、
由于对Highest   Lowest暂时还存有疑问或者说还没有理解透彻,我可否把

DonchianHi = Highest(Close[1],boLength);
DonchianLo = Lowest(Close[1],boLength);

用HHV  LLV变通表示?


4、
If(CrossOver(High,DonchianHi) && TurtleUnits >= 1)
中的CrossOver可否变通为用> 、 < 、 >=  、〈=、!= 等数学符号表示?


5、
为什么        if(Close <=llv(close,Length) && Condition1 ) 中去掉小于号后就不能通过校验,并且提示


[ 本帖最后由 东方 于 2007-10-8 07:32 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
2#
发表于 2007-10-6 21:03:57 |显示全部楼层
谢谢。

“1、在30min上有,15min及其他周期好像没有。这应该是公式本身没有信号产生。您可以把样本数设置到500,1000看看,这样就有了。”
一个月的15MIN、30MIN、1H和5个多月的DAY数据应该都足以可以有信号了啊?
“2、平仓的原因是因为您开了仓以后,保证金出现不足的情况。然后强行平仓了。TB不是按照每日结算,是实时结算,保证金不足就会强行平仓。”
海龟里没有仓位限制吗?因为随着时间的推移,可以开仓的量是一个变量啊,这样子的强制平仓感觉不太妥当。

“4、您的意思不用CrossOver,用>=?”
CrossOver(High,DonchianHi)的意思是High大于DonchianHi 吗?如果是的话,直接为   
DonchianHi=hhv(c[1],19);
High>DonchianHi;  或者  High>hhv(c[1],19);可以吗?


“5、您不用<=,那要用==而不是=。”
Close =llv(close,Length)是我的本意,但是只能用Close <=llv(close,Length)来表示,且可以校验通过,不明白为什么 = 不可以通过校验,而<=却可以通过校验?
另外,==是什么意思? !=又是什么意思?

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
3#
发表于 2007-10-7 07:06:03 |显示全部楼层
5、==是判断是否相等,= 是赋值。!=是不等于。建议看看:
http://www.tradeblazer.net/forum/thread-588-1-1.html
从一无所知开始学习TB编程


看了您给的指引,已经初步学到了不少,谢谢!
比如:

但是编程不是一件很容易的事情,当然,如果您入门了,你会发觉TB编程其实和泡妞一样的简单,就看你敢不敢下手了

如1688是数值型数据,但是"1688"就是字符串类型的数据了啊

说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值.

序列这个东西看起来很难理解
想个办法来理解他吧
比如我们的K线图上有10跟K线,Close大家知道吧,就是收盘价
但是这个Close包含了第一根K线的收盘价,也包含了第二根K线的收盘价.......一直包含到第五根K线的收盘价
也就是说序列型的数据在没根K线上都有一个值的

在TB里面变量都是要先定义的!而且有着他独到的定义方法,而且这个定义必须放到Begin的前面

那么变量b呢?我们没有用括号()扩个东西啊,那么这个时候b这个变量等于什么呢?
很简单,如果你在定义变量的时候没有给他初值,那么b这个时候等于0咯
好了
再看在Begin里面怎么修改这个变量的值
Vars
  Numeric a(2);
  Numeric b;
  //.........更多变量定义
Begin
  a = 3;
  b = 100;
End


现在大家应该知道了变量是什么东西了吧
对了,忘记告诉大家了,在Begin下面给变量复制仅仅只对当前正在执行你的代码的K线有效咯,到下一根K线他就是初始值了啊
写个例子吧
Vars
  Numeric a(100);//定义一个变量,类型是数值类型,变量名字是a,变量的初始值是100
Begin
  if(CurrentBar == 0)//如果是第一根K线,就把变量a的值变为1
  {
      a = 1;
   }
  FileAppend("C:\\a.Log",Text(a));
End

我们再来看看输出结果:
1
100
100
100
100
我们再来理解下这个结果(当然这个时候我们的K线图上面只有5跟K线啊,其实随便多少跟K线都一样)
首先代码在第一根K线上面执行,先执行if(CurrentBar == 0)这个东西,CurrentBar代表正在被执行的K线的索引
因为代码现在在第一根K线上执行,所以索引就是0拉,于是这个表达式就成立了啊,
既然if(CurrentBar == 0)这个表达式成立,那么他就会执行{}里面的东西a = 1;把1赋给变量a,也就是说吧变量a的内容改成1,
然后执行FileAppend("C:\\a.Log",Text(a));
这个时候变量a的值是1,所以当然输出1了啊
代码执行完毕

然后转到第二根K线,
既然是第二根K线,那么这根K线的索引就是1了啊,1肯定不等于0啊
那么表达式if(CurrentBar == 0)就不成立了啊,既然不成立那么他也就不会执行{}里面的东西 a = 1;
于是就直接执行FileAppend("C:\\a.Log",Text(a));
那么这个时候a的值是多少呢?
很明显是100,就是他的初始值,而不是上一根K线执行代码的时候改变了的a的值!这点千万注意啊
我相信好多朋友会在这里犯下错误的咯

再说给变量赋值
其实我们上面已经说了,记住=和==的区别吧
=就是把=右边的东西赋给=左边的东西
如a = 100;
就是把=右边的100赋给左边的变量a
如b = 9;
就是把9赋给变量b
我们在日常中一直把=当成等于,千万急着在TB里面=就是赋值!!!
真正的等于的符号是==
if(a==b)//就是如果a等于b
{
   //做某件事情
}


[ 本帖最后由 东方 于 2007-10-7 07:07 编辑 ]

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
4#
发表于 2007-10-7 07:15:48 |显示全部楼层
建议:

尽管海龟中重要的部分已经添加了注释,但是
如果每句程序语言后面都加上注释就更好了,对于初学者来说。

毕竟海龟一帖很重要啊,特别是对于用其学习TB语法而言。

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
5#
发表于 2007-10-7 08:21:17 |显示全部楼层
"1、有没有讯号和数据多少没有直接关系,条件满足才能出讯号。"

您的意思我明白,就是无论有多少数据,只要没有满足条件,就没有信号;只有在条件满足时才能出讯号。

但是[我下载过首贴中的中英文资料,但是没有详细读],根据您下面的[海龟贴中第10楼]表述:

nopain  发表于 2007-8-15 14:32        
入市条件:
系统一:以20日突破为基础的偏短线系统
系统二:以50日突破为基础的较简单的长线系统

突破定义为价格超过特定天数内的最高价或最低价。因此,20日突破可定
义为超过前 20天的最高价或最低价。



所以,在 一个月的15MIN、30MIN、1H和5个多月的DAY数据中,实际上,都足以可以有信号了,但却没啊?



“2、强行平仓是指持仓保证金不足,海龟一般建议开4次仓,这样基本不会出现强行平仓的情况。您开到6次,只要出现行情波动就可能会出现保证金不足。”

您的意思我明白。

问题不在于海龟,因为海龟一般建议开4次仓,这样基本不会出现强行平仓的情况。
问题不在于TB,因为TB在出现保证金不足的时候,会出现强行平仓。
不过,针对于“用交易开拓者实现海龟交易系统!”,从而实现自动化交易,我感觉或许还不妥,因为

比如在我发的图表里的情况可以描述为:
我在用5MIN周期的图表交易IF0712,用海龟交易指令[目前的海龟程序]做自动化交易的时候,图表中显示有两次“6次建仓,在第6次建仓的那根K线的5分钟之内,因为保证金不足被执行了强制平仓,”
第一次的情况是从开始建仓到逐步增仓再到强制平仓共维持了25根K线,
之后间隔9根K线后,再次发出信号,从开始建仓到逐步增仓再到强制平仓共维持了11根K线。也就是说,半个小时左右的时间里,分别出现六次建仓,并且在第6次建仓的那根K线的5分钟之内,因为保证金不足而不是因为实质性的止损[价格反方向运行到某种程度]被执行了强制平仓,
然而,第6次建仓的那根K线,没有超长的上下影线,收盘也是阳线,做的是多头,
之后,价格继续不断上涨---从8000多涨到9000多,但是却再没有信号和交易出现了。


能否在程序里添加一些语句,使每次建立头寸的时候,必须首先保证留下一定比例的资金,比如20%或其他比例,以保证基本不会出现象我描述的这种强制平仓,以最大程度体现自动化?
“之后,价格继续不断上涨---从8000多涨到9000多,但是却再没有信号和交易出现了。”这个问题还是搞不懂啊?

“4、交叉和大于是不一样的。交叉还需要判断前面的Bar小于。”

您的意思我明白了。
换句话说,只要在大于条件的基础上,再加上一个“前一个周期小于”,是不是就等于交叉了?
也就是说:

High>hhv(c[1],19) && high[1]<hhv(c[2],19);和

DonchianHi=hhv(c[1],19);
CrossOver(High,DonchianHi);

的意义一样了?

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
6#
发表于 2007-10-7 09:02:13 |显示全部楼层
原帖由 mht88 于 2007-10-7 08:44 发表
“2、强行平仓是指持仓保证金不足,海龟一般建议开4次仓,这样基本不会出现强行平仓的情况。您开到6次,只要出现行情波动就可能会出现保证金不足。”

建议楼主在允许最大连续建仓次数那里设为4次,200次是不是太多了.
共同 ...

在允许最大连续建仓次数那里设为4次,可以达到目的。

本着学习TB语言的目的,我习惯于在[一个没有增减仓的]指令里用类似于
buy (IntPart(0.8*CurrentCapital()/(close*300*0.10)),nextopen);的方式表示,当然0。8可以以参数做处理。


另外,从自动化交易的角度,为了最大可能减少主观的可变性我更倾向于“整体性”,交易设置和助手的应用只有在无可奈何的时候。
海龟的资料里讲到”连续性和纪律性“,既然交易设置可以改变,说不定在连续亏损的时候----即使是正常的,或许不能一直坚持设置为4。
当然前提指令程序体一旦确定,就不可轻易的频繁改动了。

[ 本帖最后由 nopain 于 2007-10-7 10:43 编辑 ]

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
7#
发表于 2007-10-7 12:14:18 |显示全部楼层
等我消化一下您的回复,再请教。谢谢。


首先,我依次改变了  允许最大连续建仓次数  设为4、3、2、1次,问题又出了,如图:
设为4、3、2平仓位置没有变










设为1  第一次的平仓位置没有变,第二次的平仓位置变化大,



莫非和股指期货每点代表300元有关?导致100W资金也不足以开1手?看来我还得仔细读一下。

[ 本帖最后由 东方 于 2007-10-7 12:25 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
8#
发表于 2007-10-7 17:27:57 |显示全部楼层
已经找到问题之一:
100W资金做HS300股票指数期货大多只可以在1MIN周期以下,否则,出入市和止损条件经常和TurtleUnits 发生不正常的矛盾;
或者说针对于中国HS300来说,海龟显得保守;或者说海龟对风险控制极为严格,规劝没有1000W不要以日线做HS300,100W只可以做1MIN;
不知道该如何描述了。。。。。

TurtleUnits = IntPart((CurrentCapital()*0.01) /(N * BigPointValue()));




日线图500W和1000W资金







觉得乱糟糟的。。。。
总感觉海龟规则里好像还应该有某个深奥的东西没有体现到TB里。。。

[ 本帖最后由 东方 于 2007-10-8 07:32 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
9#
发表于 2007-10-8 07:41:24 |显示全部楼层
由于之前没有仔细学习整个“海龟”里的所有帖子,所以才有了以上之中的部分提问。
仔细看过后发现,象单位的问题等已经有同学大侠们提到过,不同商品测试结果、需要修改参数、同一BAR多次仓及止损还是下一个BAR止损、非剩余资金可开仓手数等等都有类似的讨论。。。

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
10#
发表于 2007-10-8 20:54:14 |显示全部楼层
回复1:
海龟定义的是20日和55日等参数,当初设计的运行环境是日线上,您把它放在30min上就相当于20根30min K线的突破。而不是20日的突破。


本着怀疑和钻牛角尖的态度去学习的目的,我首先将TR改为H-L,因为20周期平均后差距微微,几乎影响不到单位的界定,以有望剔除上述疑问。

回复2:
1、保证金的处理是在当前Bar结束之后按照当前Bar的最低价(多仓),最高价(空仓)来计算期间最大持仓保证金是否足够。如果不够就会被强行平仓。
2、关于为什么开始连续加5次仓,隔了好一段在又加了一次呢,是因为钱不够了,开第6个仓的是钱都是前面5个仓位的盈利+部分初始资金才凑够的。所以按您的操作就是满仓运行。很容易被强行平仓。
3、从8000-9000不出信号是因为有一个过滤条件LastProfitableTradeFilter,因为前一次交易成功,所以后面的被忽略了。
4、综述。您这里的问题主要出在开仓太多。海龟的系统是环环相扣的,您只要按照基本规则,保持仓位。就会一直把仓位从底拿到顶。



我将单位稍做处理,并增加对当前周期是否可以运用海龟的大致判断后,最大头寸限制和强制平仓的问题也没有了,但似乎增加的代码好像因为语法有误影响了整体,



回复4:
还是不一样,您可以看看CrossOver的算法。里面还有循环操作。
如果上一个Bar两条线的值是相等的呢?就需要继续往前推算。


此问题想了想好像已经解决了,主要为了剔除对HIGHEST  LOWEST的疑问。

[ 本帖最后由 东方 于 2007-10-9 18:00 编辑 ]

使用道具 举报

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

bottom

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

GMT+8, 2024-5-17 10:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部