- 精华
- 2
- 在线时间
- 192 小时
- UID
- 390
- 积分
- 2142
- 帖子
- 286
- 阅读权限
- 70
- 注册时间
- 2007-9-21
- 最后登录
- 2019-4-1
- 精华
- 2
- UID
- 390
- 积分
- 2142
- 帖子
- 286
- 主题
- 45
- 阅读权限
- 70
- 注册时间
- 2007-9-21
- 最后登录
- 2019-4-1
|
发表于 2007-11-14 09:36:57
|显示全部楼层
这段时间,寒舍装修了一下,还有这段时间朋友的电脑出问题特别多,加之其他一些莫名其妙的问题,
让本文更新的速度极慢,连自己都感觉到很过意不去了,让我严肃的对大家说一声,用洋玩意儿来说一声:Sorry
这篇文章我将写一个简单的交易模型,说起交易模型,大家都会想到在K线上的那些信号箭头,但是对于TB,我似乎不喜欢这样做.
基于以下两点:
一是如果把K线比喻成多姿多彩的美女,那么这个信号箭头应该是这个美女头上的一朵花,但是TB的那些箭头我怎么看都不舒服,就好比妓女的叫床:哦啊快点,啊哦快点,让人兴奋但又无可奈何,恶心极了;
二是TB支持全自动下单,我对TB的这个方面还没有任何研究,且暂时现在也没有进行全自动交易的打算,没有调查就没有发言权啊,呵呵
俺不是学文学的,俺现在能够找到的唯一能够证明俺有那么一把刷子的东西就仅存一个初中毕业证了,不好,俺要回家看看才好,不会被俺小崽拿去折四角板玩吧?如果真是那样,我可要狠狠的批评且严肃的警告他:现在你把老子的毕业证折四角板玩,等你小学毕业了,老子要把你的毕业证拿来卷烟抽!
言归正题,我比较喜欢而且非常喜欢把交易模型做成变色的K线,红色代表买,绿色代表卖,非常的简单明了,但是一看就又很能明白是什么意思,K线本来就是一位大大的美女,如果把红色的K线练成一块,把绿色的K线练成一块,那是多少爽的一件事情啊!!!
于是我们就要先学会画K线,在文华中画K线是STICKLINE,在TB中很简单,就用PlotNumeric吧.
如果你要画红色K线,那么就先输出High,Low,Close,Open,很好理解吧,大家都知道阳线从上到下是最高,收盘,开盘,最低,我们这个也一样,只是先输出最高最低,再输出收盘开盘;如果是要画绿色K线,那么就按照以下顺序输出那四个价格:最高,最低,开盘,收盘,呵呵
下面是画红色K线的代码:
PlotNumeric("High",High);
PlotNumeric("Low",Low);
PlotNumeric("Close",Max(Close,Open));
PlotNumeric("Open",Min(Close,Open));
大家看到了上面有个Max和Min函数,大家可以想一想为什么咯,呵呵
下面是画绿色K线的代码:
PlotNumeric("High",High);
PlotNumeric("Low",Low);
PlotNumeric("Open",Max(Close,Open));
PlotNumeric("Close",Min(Close,Open));
终于看到有朋友UP了,是多么的感动啊!
那么就让我先来解释下上面的为什么要用Max和Min函数吧,还是说明白一点好.
如果我们要把所有K线画成红色K线,那么是要先输出High,和Low,再输出收盘价和开盘价.但是如果当天Close<Open怎么办?于是就用Max了咯,当然,画绿色K线的Min原理也一样.
明白了吧
那么我们先来把前面的150根K线全部画成红色,后面的150根K线全部画成绿色(呵呵,我是假设超级图表中存在300根K线啊)
在右边的TB公式里面新建个技术指标,名称为MyKLine,简称随意,俺写成哈哈,类型随意选,模板空,确定,写下如下代码:
- //------------------------------------------------------------------------
- // 简称: MyKLine
- // 名称: 哈哈
- // 类别: 技术指标
- // 类型: 其它类
- // 输出:
- //------------------------------------------------------------------------
- Begin
- if(CurrentBar>150)
- {
- //如果是第151根K线画绿色
- PlotNumeric("High",High);
- PlotNumeric("Low",Low);
- PlotNumeric("Open",Max(Close,Open));
- PlotNumeric("Close",Min(Close,Open));
- }
- Else
- {
- //如果是151根K线以前的Kurtosis线画红色
- PlotNumeric("High",High);
- PlotNumeric("Low",Low);
- PlotNumeric("Close",Max(Close,Open));
- PlotNumeric("Open",Min(Close,Open));
- }
- End
- //------------------------------------------------------------------------
- // 编译版本 GS2004.06.12
- // 用户版本 2007/11/14 13:51
- // 版权所有 pwqzc
- // 更改声明 TradeBlazer Software保留对TradeBlazer平台
- // 每一版本的TrabeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
复制代码
然后在文件---属性设置----默认-----默认显示改成主图显示,点编译按钮完成编译,然后再在超级图表里面调用这个技术指标,
娃哈哈,效果出来了咯!!
很爽对不?呵呵,但是如果你是个完美主义者,肯定你会发觉这中间稍有缺陷?在哪里?就是当K线是十字星的时候K线会是白色的拉.
怎么办?我们首先要明白为什么会出现这样的现象的原因是收盘价=开盘价的时候会出现这样的问题.那么如何去解决这个问题呢?
有两种方法:第一种是强烈要求TB修改系统的底层去实现,怕怕.
还有就是自己向办法实现,nopain老大提供了个思路,very very good!真的是长江后浪推前浪,前浪死在沙滩上啊,俺们老了,还是nopain这样的年轻人脑子反应快咯~~~
下面是按照nopain老大的思路实现的代码:
- //------------------------------------------------------------------------
- // 简称: MyKLine
- // 名称: 哈哈
- // 类别: 技术指标
- // 类型: 其它类
- // 输出:
- //------------------------------------------------------------------------
- Vars
- Numeric OpenIsClose;//当开盘等于收盘价的时候
- Begin
- if(CurrentBar>150)
- {
- //如果是第151根K线画绿色
- PlotNumeric("High",High);
- PlotNumeric("Low",Low);
- if(Open==Close)
- {
- //如果收盘价等于开盘价
- OpenIsClose = Close-PriceScale*MinMove;
- PlotNumeric("Open",Open);
- PlotNumeric("Close",OpenIsClose);
- }
- Else
- {
- PlotNumeric("Open",Max(Close,Open));
- PlotNumeric("Close",Min(Close,Open));
- }
- }
- Else
- {
- //如果是151根K线以前的Kurtosis线画红色
- PlotNumeric("High",High);
- PlotNumeric("Low",Low);
- if(Open==Close)
- {
- OpenIsClose = Close+PriceScale*MinMove;
- PlotNumeric("Close",OpenIsClose);
- PlotNumeric("Open",Open);
- }
- Else
- {
- PlotNumeric("Close",Max(Close,Open));
- PlotNumeric("Open",Min(Close,Open));
- }
- }
- End
- //------------------------------------------------------------------------
- // 编译版本 GS2004.06.12
- // 用户版本 2007/11/14 13:51
- // 版权所有 pwqzc
- // 更改声明 TradeBlazer Software保留对TradeBlazer平台
- // 每一版本的TrabeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
复制代码
上面有两个函数PriceScale和MinMove,他们相乘的结果得到当前品种的最小变动价位,比如铜是10,胶是5......(这两个函数的具体意义以及他们的乘积为什么会得到这个结果请看TB的函数帮助)
也就是说当开盘==收盘的时候在收盘价的基础上上下浮动一个变动价位来画K线,呵呵大家看下效果,是不是很完美的解决了这个问题呢?
本想晚上继续,但是晚上约了个客户,完后又上同事家弄电脑,我完全被郁闷死了,那个讨嫌的没有半点良心的雨过天晴电脑保护系统可把我害死了!记得我买那个硬盘的时候硬盘厂家送了个雨过天晴保护系统,明明说可以使用一年,但是3个月后就提示到期了无法使用了,于是只好卸载雨过天晴,在卸载过程中我选择了回复电脑到最开始的状态,当重新启动后,我的大脑一片空白!!!!!!天啊,所有的数据没有了!!!!!!花了几个小时才把数据找回,到半夜12点才完全弄好,本来俺的睡眠就非常差劲,于是......
不说了,我们有了上面的画变色K线的基础,现在来做个简单的变色K线系统吧,是非常非常简单的;
曾听说有人用两条均线打天下,我们就做这个打天下的变色K线交易模型;
假设两条均线是5日均线和10日均线,于是就有两个变量,MaFive和MaTen,5日上穿10日买,5日下穿10日卖;
写成代码如下:
- //------------------------------------------------------------------------
- // 简称: MyKLine
- // 名称: 哈哈
- // 类别: 技术指标
- // 类型: 其它类
- // 输出:
- //------------------------------------------------------------------------
- Vars
- Numeric OpenIsClose;//当开盘等于收盘价的时候
- NumericSeries MaFive;//5日均线
- NumericSeries MaTen;//10日均线
- Begin
- MaFive = SAverage(Close,5);//5天移动平均
- MaTen = SAverage(Close,10);//10天移动平均
- if(MaFive<MaTen)
- {
- //如果是第151根K线画绿色
- PlotNumeric("High",High);
- PlotNumeric("Low",Low);
- if(Open==Close)
- {
- //如果收盘价等于开盘价
- OpenIsClose = Close-PriceScale*MinMove;
- PlotNumeric("Open",Open);
- PlotNumeric("Close",OpenIsClose);
- }
- Else
- {
- PlotNumeric("Open",Max(Close,Open));
- PlotNumeric("Close",Min(Close,Open));
- }
- }
- Else If(MaFive>MaTen)
- {
- //如果是151根K线以前的Kurtosis线画红色
- PlotNumeric("High",High);
- PlotNumeric("Low",Low);
- if(Open==Close)
- {
- OpenIsClose = Close+PriceScale*MinMove;
- PlotNumeric("Close",OpenIsClose);
- PlotNumeric("Open",Open);
- }
- Else
- {
- PlotNumeric("Close",Max(Close,Open));
- PlotNumeric("Open",Min(Close,Open));
- }
- }
- End
- //------------------------------------------------------------------------
- // 编译版本 GS2004.06.12
- // 用户版本 2007/11/14 13:51
- // 版权所有 pwqzc
- // 更改声明 TradeBlazer Software保留对TradeBlazer平台
- // 每一版本的TrabeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
复制代码
好了,编译,然后插入这个技术指标,看看效果,天啊,效果是非常的不错的拉!!!
呵呵;
请注意上面的一个函数:SAverage的帮助说明:
Numeric SAverage(NumericSeries Price,Numeric Length)
比如:
SAverage (Close, 12); 计算12周期以来的收盘价的平滑平均值;
该函数计算指定周期内的数值型序列值的平滑平均值,返回值为浮点数;
当序列值的CurrentBar小于Length时,该函数返回无效值。
[ 本帖最后由 pwqzc 于 2007-11-15 10:30 编辑 ] |
|