设为首页收藏本站

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

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

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: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2007-10-6 20:20:27 |只看该作者
1、在30min上有,15min及其他周期好像没有。这应该是公式本身没有信号产生。您可以把样本数设置到500,1000看看,这样就有了。
2、平仓的原因是因为您开了仓以后,保证金出现不足的情况。然后强行平仓了。TB不是按照每日结算,是实时结算,保证金不足就会强行平仓。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
3#
发表于 2007-10-6 20:23:37 |只看该作者
3、highest和lowest在这里是没有问题的,因为boLength不会在执行过程中变化。你要改成HHV和LLV也可以,但效率会降低。
4、您的意思不用CrossOver,用>=?
5、您不用<=,那要用==而不是=。

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
4#
发表于 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: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2007-10-6 21:19:43 |只看该作者
1、有没有讯号和数据多少没有直接关系,条件满足才能出讯号。
2、强行平仓是指持仓保证金不足,海龟一般建议开4次仓,这样基本不会出现强行平仓的情况。您开到6次,只要出现行情波动就可能会出现保证金不足。
4、交叉和大于是不一样的。交叉还需要判断前面的Bar小于。
5、==是判断是否相等,= 是赋值。!=是不等于。建议看看:
http://www.tradeblazer.net/forum/thread-588-1-1.html

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
6#
发表于 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
7#
发表于 2007-10-7 07:15:48 |只看该作者
建议:

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

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

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
8#
发表于 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: 5Rank: 5

精华
0
UID
201
积分
1356
帖子
197
主题
8
阅读权限
60
注册时间
2007-8-26
最后登录
2013-11-2
9#
发表于 2007-10-7 08:44:09 |只看该作者
“2、强行平仓是指持仓保证金不足,海龟一般建议开4次仓,这样基本不会出现强行平仓的情况。您开到6次,只要出现行情波动就可能会出现保证金不足。”

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

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
10#
发表于 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 编辑 ]

使用道具 举报

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

bottom

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

GMT+8, 2024-5-2 13:13

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部