期货软件TB系统源代码解读系列1

这是一个期货爱好者的个人分享,不是专业程序员,各位编码大神看了请不要见笑。

好了话不多说,我直接用求平均值AverageFC代码附上,一一解释说明。

Params

NumericSeries Price(1);

Numeric Length(10);

Vars

Numeric AvgValue;

Begin

AvgValue = Summation(Price, Length) / Length;

Return AvgValue;

End

解释如下:

Params /*参数声明,直白的解释就是起个名字,如张三、李四等,这里都是用英文表达而已*/

Numeric Length(10); /*Numeric数据类型,TB系统分三大类型,想了解的,可细查。Length(10), Length就是说给起的这么个名字,(10)这个数据统计10个周期,也就是10 根 k 线,它的起点从第一根开始算*/

NumericSeries Price(1); /*NumericSeries数据类型的序列变量,跟Numeric区别,我一般这么辨认 的,跟价格相关的就用NumericSeries,如开盘价、收盘价或价格等;其他的直 接用Numeric。Price(1)也就是名字为价格,给它的初始值为1。*/

Vars /*变量声明,怎么说呢,用数学上y=x+1来解说就是,TB系统要使用变量y,先给它做个声明吧*/

Numeric AvgValue; /*Numeric数据类型,AvgValue就是我们说的变量,先给它来做个声明,接下来 才能使用,要不然你在程序里随便写别的英文,没给它声明,系统没法知道这 个英文要表达什么意思啊。*/

Begin /*正文编程的开始了。*/

AvgValue = Summation(Price, Length) / Length; /*其实我要写成这样 AvgValue=(Price1+Price2+Price3+......+Price9+Price10)/Length, 大家看了该理解什么意思了吧。Summation(Price,Length)替代了 那逐步的价格相加,求和函数Summation这个是已经编好的函数库,可 直接调用,按它的格式要求写能求出相应和。所以这段代码整体意思: 求10根 k线的平均价格。*/

Return AvgValue; /*Return返回函数,没什么可说的,语句意思就是:算完一遍10根k线的平均值,返 回AvgValue再重新求第二遍,直到最新的k线价格结束。*/

End /*结束标志,告诉TB系统,你编写的程序好了,可以终止了。*/

了解了怎么函数AverageFC求平均值,那么接下来看我们经常用的双均线移动平均线交易系统的源代码如何直接调用它的。

Params

Numeric FastLength(5); /*声明参数FastLength初始值为5个周期数*/

Numeric SlowLength(20); /*声明参数SlowLength初始值为20个周期数*/

Vars

NumericSeries AvgValue1; /*声明序列变量做个声明为AvgValue1,为什么用的是NumericSeries, 正文编程中可知道这个是求价格的平均值,跟价格相关,那就直接用它了*/

NumericSeries AvgValue2; /*同上意思*/

Begin

AvgValue1 = AverageFC(Close,FastLength); /*这个就是直接调用了函数AverageFC,意思为: AvgValue1的值等于5根k线收盘价的平均价格。*/

AvgValue2 = AverageFC(Close,SlowLength); /*AvgValue2的值等于20根收盘价的平均价格*/

PlotNumeric("MA1",AvgValue1); /*函数PlotNumeric意思在k线图中显现出来,字符串"MA1",其实 可以直接写别的英文或用原来AvgValue1都可以,只是这边为了形 成统一习惯罢了。则这语句意思:线MA1代表了AvgValue1。*/

PlotNumeric("MA2",AvgValue2); /*线MA2代表AvgValue2。*/

If(!CallAuctionFilter()) Return; /*在公式应用的开始位置添加该行代码,可以对集合竞价和小结开始的 行情进行过滤,防止无效的发单操作。所以意思就是:集合竞价和小节 休息过滤掉。*/

If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]) /*MarketPosition当前持仓状态;&&意 思为和,也可直接用and替代;<>意思 是不等于,这里MarketPosition后的 (1,0,-1)意思各为1为多单,0为没 有仓位,-1为空单;AvgValue1[1]这个 中括号[1]意思是前一个AvgValue1平均 价格。这语句整体意思为:假如当前没有 持多单,并且均线AvgValue1[1]大于 AvgValue2[1]。*/

{

Buy(1,Open); /*开多单一般直接用Buy,意思为以当前k线的开盘价,开仓买入1手。*/

}

If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1]) /*假如当前没有持空单,并且均线 AvgValue1[1]小于AvgValue2[1]。*/

{

SellShort(1,Open); /*开空单一般用SellShort,意思为以当前K线的开盘价,开仓卖出1手。*/

}

End

根据这源代码正常测试公式,不同周期,得到收益差距很大,你会发现周期时间越大,它的K线波多越剧烈,得到的结果收益跟亏损不怎么理想的。

根据测试我一般建议关注以下几个点:

1、开仓点位,这很重要,你是以开盘价、收盘价或则指定价格开仓,在历史K线中测试时,结果可能很理想,但实盘能否如此理想,你得在开盘期间确认一下。

2、盈亏比,不管均线系统,还是别的系统,一般都是以小亏损来换取大盈利的,这种要求盈亏比3:1,成功率25%左右,最后得到的结果才有可能是正的。(当然高成功率也可以,但这种人很少,而且这种系统我也暂时没见过,我看到的基本都是小亏大盈的系统,成功率最高的也就是45%-50%)

3、参数优化,上面的代码参数是5跟20,你要是觉得这参数不符合你心意,那你可以照你经验来修改。我常用的方法是测试所有的品种,各周期不同也都优化一遍,最后统计出一个相对符合数据的参数(不是符合我自己心意的)。

4、交易频率,像上面的源代码,交易频率很快,基本就是平仓的同时,就反手开新仓的。这频繁的交易,可能跟你交易理念也不相符,比如正在上涨趋势,只是因为均线参数过小,它有交叉了,系统就自动显示平仓,反手卖出。要怎么解决这个问题呢?只要在系统中添加新一条更大的均线限制就行。

好了,在结束前,我就附上一个修改后的源代码,有空你们自己测试一下,这均线还是很好的,记得这是针对3、5分钟周期的k线图。

Params

Numeric FastLength(5);

Numeric SlowLength(20);

Numeric DslowLength(200);

Vars

NumericSeries AvgValue1;

NumericSeries AvgValue2;

NumericSeries AvgValue3;

Begin

AvgValue1 = AverageFC(Close,FastLength);

AvgValue2 = AverageFC(Close,SlowLength);

AvgValue3 = AverageFC(Close,DslowLength);

PlotNumeric("MA1",AvgValue1);

PlotNumeric("MA2",AvgValue2);

PlotNumeric("MA3",AvgValue3);

// 集合竞价和小节休息过滤

If(!CallAuctionFilter()) Return;

If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1] && Close > AvgValue3[1])

{

Buy(1,Open);

}

If(MarketPosition ==1 && AvgValue1[1] < AvgValue2[1])

{

Sell(1,Open);

}

If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1] && Close < AvgValue3[1])

{

SellShort(1,Open);

}

If(MarketPosition ==-1 && AvgValue1[1] > AvgValue2[1])

{

BuyToCover(1,open);

}

End


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容