期货软件TB系统源代码解读系列4-RSI

这个也是一个辅助的判断系统,做成程序化来交易,结果怎么样呢?这待会再说,我们先来说一下这个系统需要用到的函数Average,这是一个求平均函数,跟我们之前看到AverageFC差不多,但也是有点区别的,代码及解说如下:

Params

NumericSeries Price(1);//声明数值型序列参数Price,赋值为1.//

Numeric Length(10);//声明数值型参数Length,赋值为10.//

Vars

Numeric AvgValue;//声明数值型变量AvgValude。//

Begin

AvgValue = Summation(Price, Length) / Length;//这个Summation函数,我们之前已经说过,这边直译就是:求10个周期的平均价格。//

Return AvgValue;//把AvgValue值返回给主函数。//

End

这是一个简单的求平均值的函数,但写完这个函数后,我们可以很方便的调用了,接下来就是RSI的代码了,如下:

Params

Numeric Length(14) ;//声明数值型参数Length,初始值为14.//

Numeric OverSold(30) ;//声明数值型参数OverSold,初始值为30.//

Numeric OverBought(70) ;//声明数值型参数OverBought,初始值为70.//

Vars

NumericSeries NetChgAvg( 0 );//声明数值型序列变量NetChgAvg,赋值0.//

NumericSeries TotChgAvg( 0 );//声明数值型序列变量TotChgAvg,赋值0.//

Numeric SF( 0 );//声明数值型变量SF,赋值0.//

Numeric Change( 0 );//声明数值型变量Change,赋值0.//

Numeric ChgRatio( 0 ) ;//声明数值型变量ChgRatio,赋值0.//

Numeric RSIValue;//声明数值型变量RSIValue。//

Begin

If(CurrentBar <= Length - 1)//假如当前k线数位小于等于14-1,执行花括号语句。//

{

NetChgAvg = ( Close - Close[Length] ) / Length ;//一样的Close[Length],就是从当前K线数位倒推回去14根,则句子意思:NetChgAvg=(当前收盘价-前14根k线的收盘价)/14.//

TotChgAvg = Average( Abs( Close - Close[1] ), Length ) ;//先说这个Abs,意思为返回参数的绝对值,参数绝对值是参数去掉正负号后的数值。所以Abs里边的括号得到数值肯定是正数。Average函数,同样的,就是把参数的绝对值跟周期,返回去求值,再把值给反馈回来就行。语句意思:TotChgAvg的值等于,求当前收盘价-去前一根收盘价的14周期均值。//

}Else//就是第14根k线后的,执行下列语句。//

{

SF = 1/Length;//随周期变化的比重系数SF。//

Change = Close - Close[1] ;//当前k线收盘价-前一根收盘价。//

NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;//这回不用改成数学式的表达式了,直译它,NetChgAvg = 前一个NetChgAvg值 + 比重系数SF * (变量Change - 前一个NetChgAvg值。)

TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;//同理,直译了,记得英文字符后的[1],意思都是从当前往回推,中括号里的值是根据你的需求改的。//

}

If( TotChgAvg <> 0 )//从上面公式求得的TotChgAvg数值,假如不等于0.//

{

ChgRatio = NetChgAvg / TotChgAvg;//变量ChgRatio值等于变量NetChgAvg值除以变量TotChgAvg值。//

}else//变量TotChgAvg等于0的情况。//

{

ChgRatio = 0 ;//等于0了。//

}

RSIValue = 50 * ( ChgRatio + 1 );//用上面的得到的值,根据这个公式,可以求出RSIValue的值了。//

PlotNumeric("RSI",RSIValue);//线RSI的值为RSIValue。//

PlotNumeric("超买",OverBought);//画出超买线,值为OverBought=70。//

PlotNumeric("超卖",OverSold);//画出超卖线,值为OverSold=30。//

End

了解了这个RSI是如何计算的,我们做成程序化也就简单了,也就是添加进买卖的条件即可,至于效果吗,也就那样了,我只能说超买了还会超买,超卖了还超卖,价格的变动不是一个数据说了算的,这个数据也只是一种辅助判断依据罢了。至于说我根据移动均线,把MACD,KD,RSI当成条件进行判断,这效果如何?明天我再把代码写出来吧。现在先看下这个RSI的程序化代码:

Params

Numeric Length(14) ;

Numeric OverSold(30) ;

Numeric OverBought(70) ;

Numeric StopPoint(45);

    Numeric ProfitPoint(100);

    Numeric StopLossSet(30);

Vars

NumericSeries NetChgAvg( 0 );

NumericSeries TotChgAvg( 0 );

Numeric SF( 0 );

Numeric Change( 0 );

Numeric ChgRatio( 0 ) ;

NumericSeries RSIValue;

NumericSeries HighestAfterEntry;

    NumericSeries LowestAfterEntry;

    Numeric MinPoint;

    Numeric MyEntryPrice;

Numeric myprice;

    Numeric myexitprice;

Begin

If(CurrentBar <= Length - 1)

{

NetChgAvg = ( Close - Close[Length] ) / Length ;

TotChgAvg = Average( Abs( Close - Close[1] ), Length ) ;

}Else

{

SF = 1/Length;

Change = Close - Close[1] ;

NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;

TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;

}

If( TotChgAvg <> 0 )

{

ChgRatio = NetChgAvg / TotChgAvg;

}else

{

ChgRatio = 0 ;

}

RSIValue = 50 * ( ChgRatio + 1 );

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

If(!CallAuctionFilter()) Return;

If(MarketPosition <>1 &&  RSIValue[1] < 30  )

{

Buy(1,Open);

}

If(MarketPosition ==1 && RSIValue[1] > 70)

{

Sell(1,Open);

}

If(MarketPosition <>-1 && RSIValue[1] > 70 )

{

SellShort(1,Open);

}

If(MarketPosition ==-1 && RSIValue[1] < 30)

{

BuyToCover(1,open);

}

If(BarsSinceentry == 0)

{

HighestAfterEntry = Close;

LowestAfterEntry = Close;

If(MarketPosition <> 0)

{

HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);

LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);

}

}else

{

HighestAfterEntry = Max(HighestAfterEntry,High);

LowestAfterEntry = Min(LowestAfterEntry,Low);

}

Commentary("HighestAfterEntry="+Text(HighestAfterEntry));

Commentary("LowestAfterEntry="+Text(LowestAfterEntry));

Commentary("MyEntryPrice="+Text(MyEntryPrice));

MinPoint = MinMove*PriceScale;

MyEntryPrice = AvgEntryPrice;

If(MarketPosition==1)

{ if(Low <= MyEntryPrice - StopLossSet*MinPoint)

{

MyExitPrice =  MyEntryPrice - StopLossSet*MinPoint;

Sell(0,MyExitPrice);

}

}else if(MarketPosition==-1)

{

If(High >= MyEntryPrice + StopLossSet*MinPoint)

{

MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;

BuyToCover(0,MyExitPrice);

}

}

End

这个我还是给它添加进了一个限制条件,开仓错了,止损30个点,可结果还是不怎么样,要是把这个止损点去掉,结果如下图:

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

推荐阅读更多精彩内容

  • 虽然我们经常说这些均线啊、MACD啊或KD线等都是庄家忽悠散户的,根本信不了,可我想说的是,你真的把它们做成固定的...
    翊之依阅读 1,061评论 0 4
  • 系列1主要解释的是移动平均线,接下来解释的也是我们常用MACD指标,及用它编写成的程序化交易。 我们...
    翊之依阅读 1,277评论 0 4
  • 这是一个期货爱好者的个人分享,不是专业程序员,各位编码大神看了请不要见笑。 好了话不多说,我直接用求平均值Aver...
    翊之依阅读 2,882评论 5 9
  • 铁瓷盆里刚长出的蒜苗、青葱 屋檐下东倒西歪的空酒瓶子 凋凌的瓦砾 褪皮的墙 那一株久栽的茶树 像极了岁月中的你我...
    粗觉得阅读 363评论 0 0
  • 山沟女人 嫁到小山沟 她是男人的影子 没人知道姓名 一天的生活 把太阳变成月亮 有了孩子 他还是男人的影子 洗衣做...
    渭北刀客阅读 2,633评论 1 3