期货软件TB系统源代码解读系列16-CMO

钱德动量摆动指标,看着跟KD或RSI相似吧,其实确实差不多的,这也是一个探索超买超卖的指标,至于效果吗?还是老话,相信它的就要自己全面观察,把握它的优缺点,这才有机会获得盈利。你觉得有庄家操控盘面,那么你唯一能依靠的就是自己的判断规则了。庄家也是人,他不可能全面把握所有的指标,流行的,做出一小段的走势还有可能,要完全全面控盘,那结局基本都是以逃亡告终的。你没有全面了解信息,这没关系,但你一定要相信自己的规则,依规则行事,我相信结果肯定不会太差的。

好了,废话就这些,我们还是来看看这个指标,算法如下:

CMOValue =( SumCloseUp - SumCloseDown)/(SumCloseUp + SumCloseDown)*100;

其中:SumCloseUp是今日收盘价与昨日收盘价(上涨日)差值加总。若当日下跌,则增加值为0;SumCloseDown是今日收盘价与做日收盘价(下跌日)差值的绝对值加总。若当日上涨,则增加值为0.

了解了这些算法,我们来看看源代码如何写的:

Params

Numeric Length(20);//声明数值参数Length,初始值为20。//

Vars

Numeric CMOValue;//声明数值变量CMOValue。//

NumericSeries CloseUp; //声明数值序列变量CloseUp。//

NumericSeries CloseDown; //声明数值序列变量CloseDown。//

Numeric SumCloseUp;//声明数值变量SumCloseUp。//

Numeric SumCloseDown; //声明数值变量SumCloseDown。//

Begin

if(CurrentBar == 0) //假如当前k线为第一根。//

{

CMOValue=0; //变量CMOValue赋值为0.//

}

Else //那这就是从第二根k线开始算了。//

{

If(Close > Close[1]) //假如当前k线收盘价大于前一根的收盘价。//

{

CloseUp=Close - Close[1]; //变量CloseUp = 当前收盘价 - 前一根收盘价。//

CloseDown=0; //变量CloseDowm = 0.//

}

If(Close < Close[1]) // 假如当前收盘价小于前一根k线收盘价的。//

{

CloseUp=0;//变量CloseUp = 0.//

CloseDown=Close[1] - Close;//变量CloseDown = 前一根收盘价 - 当前收盘价。//

}

If(Close == Close[1]) //当前收盘价等于前一根收盘价的。//

{

CloseUp=0; //变量CloseUp = 0.//

CloseDown=0;//变量CloseDown =0.//

}

SumCloseUp = SummationFC(CloseUp,Length);//前面解说过函数SummationFC,快速求和。把变量CloseUp返回到函数里去,再把20周期返回,求得变量SumCloseUp总值。//

SumCloseDown = SummationFC(CloseDown,Length);//解读同上了。//

If(SumCloseUp + SumCloseDown <> 0)//这里做个假设,变量SumCloseUp + 变量SumCloseDown不等于0.//

CMOValue =( SumCloseUp - SumCloseDown)/(SumCloseUp + SumCloseDown)*100;//变量CMOValue的求值公式,把上面算得的各值代入进去,直白解读了。//

}

PlotNumeric("CMO",CMOValue);//画线CMO,值就是变量CMOValue的值了。//

PlotNumeric("Ref1",50); //画线超买上轨,值为50.//

PlotNumeric("Ref2",-50); //画线超卖下轨,值为-50.//

End

CMO指标的解读就是这样了,很简单的,只要理解了这一步步的算法,代码编写其实也不难的,这些英文,其实很多都可以写个简单的,比如直接用a,b,c去替代都可以。当然,TB系统自带的函数不能变更,但也没几个英文的,看多了的朋友都知道写来写去,就那几个。

这个指标,依据超买超卖来操作,我们可以添加一条均线,改写一下,直接复制固定止盈止损或者跟踪止损,就可以改成一个交易系统了。代码及结果如下:

Params

Numeric Length(20);

Numeric DslowLength(200);

Vars

NumericSeries CMOValue;

NumericSeries CloseUp;

NumericSeries CloseDown;

Numeric SumCloseUp;

Numeric SumCloseDown;

NumericSeries AvgValue3;

Numeric MinPoint;

Numeric MyEntryPrice;

Numeric TakeProfitSet(120);

Numeric StopLossSet(30);

Numeric MyExitPrice;

Begin

AvgValue3 = AverageFC(Close,DslowLength);

PlotNumeric("MA3",AvgValue3);

if(CurrentBar == 0)

{

CMOValue=0;

}Else

{

If(Close > Close[1])

{

CloseUp=Close - Close[1];

CloseDown=0;

}

If(Close < Close[1])

{

CloseUp=0;

CloseDown=Close[1] - Close;

}

If(Close == Close[1])

{

CloseUp=0;

CloseDown=0;

}

SumCloseUp = SummationFC(CloseUp,Length);

SumCloseDown = SummationFC(CloseDown,Length);

If(SumCloseUp + SumCloseDown <> 0)

CMOValue =( SumCloseUp - SumCloseDown)/(SumCloseUp + SumCloseDown)*100;

}

If(!CallAuctionFilter()) Return;

If(MarketPosition <> 1 And CrossOver(CMOValue[1],0) And Close[1] >AvgValue3)

{

Buy(1,Open);

}

If(MarketPosition <> -1 And CrossUnder(CMOValue[1],0) And Close[1] < AvgValue3)

{

SellShort(1,Open);

}

MinPoint = MinMove*PriceScale;

MyEntryPrice = AvgEntryPrice;

If(MarketPosition==1)

{

If(High >= MyEntryPrice + TakeProfitSet*MinPoint)

{

MyExitPrice = MyEntryPrice + TakeProfitSet*MinPoint;

If(Open > MyExitPrice) MyExitPrice = Open;

Sell(0,MyExitPrice);

}else if(Low <= MyEntryPrice - StopLossSet*MinPoint)

{

MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;

If(Open < MyExitPrice) MyExitPrice = Open;

Sell(0,MyExitPrice);

}

}else if(MarketPosition==-1)

{

If(Low <= MyEntryPrice - TakeProfitSet*MinPoint)

{

MyExitPrice = MyEntryPrice - TakeProfitSet*MinPoint;

If(Open < MyExitPrice) MyExitPrice = Open;

BuyToCover(0,MyExitPrice);

}else if(High >= MyEntryPrice + StopLossSet*MinPoint)

{

MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;

If(Open > MyExitPrice) MyExitPrice = Open;

BuyToCover(0,MyExitPrice);

}

}

End


看着还不错吧,我一直用的是焦炭30分钟周期来测试的,这交易代码里新出来了一个crossover和crossunder,其实意思就是穿越跟跌破的意思。我这里边用的是固定止损止盈1:4的模板,当然,这可以依据个人意愿来修改的。我这里写的很多交易系统,都是临时性写的,买卖条件也基本就是在均线基础上写出来的,所以,有的朋友要是看着结果不错,直接取用,要是亏损,我没法弄的。我只能告诉你,我这里只是解读代码,做个模板例子,告诉你怎么可以自己改写代码,做成适合自己的程序化交易系统。

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

推荐阅读更多精彩内容