期貨軟件TB系統(tǒng)源代碼解讀系列73-恒溫器系統(tǒng)

策略說明:

通過計算市場的潮汐指數(shù),把市場劃分為震蕩和趨勢兩種走勢;震蕩市中

采用開盤區(qū)間突破進(jìn)場稽鞭;趨勢市中采用布林通道突破進(jìn)場。

系統(tǒng)要素:

1引镊、潮汐指數(shù)

2朦蕴、關(guān)鍵價格

3、布林通道

4弟头、真實波幅

5吩抓、出場均線

入場條件:

1、震蕩市中采用開盤區(qū)間突破進(jìn)場

2亮瓷、趨勢市中采用布林通道突破進(jìn)場

出場條件:

1琴拧、震蕩市時進(jìn)場單的出場為反手信號和ATR保護(hù)性止損

2、趨勢市時進(jìn)場單的出場為反手信號和均線出場

做多代碼及解讀如下:

Params

Numeric swingTrendSwitch(20); // 聲明數(shù)值參數(shù)swingTrendSwitch嘱支,初值20,即潮汐指數(shù)小于此值為震蕩市挣饥,否則為趨勢市除师。//

Numeric swingPrcnt1(0.50); // 聲明數(shù)值參數(shù)swingPrcnt1,初值0.5扔枫,即震蕩市開倉參數(shù)汛聚。//

Numeric swingPrcnt2(0.75); // 聲明數(shù)值參數(shù)swingPrcnt2,初值0.75短荐,即震蕩市開倉參數(shù)倚舀。//

Numeric atrLength(10); //聲明數(shù)值參數(shù)atrLength,初值10忍宋,即真實波幅參數(shù)痕貌。//

Numeric bollingerLengths(50); // 聲明數(shù)值參數(shù)bollingerLengths,初值50糠排,即布林通道參數(shù)舵稠。//

Numeric numStdDevs(2); //聲明數(shù)值參數(shù)numStdDevs,即布林通道參數(shù)入宦。//

Numeric trendLiqLength(50); // 聲明數(shù)值參數(shù)trendLiqLength哺徊,初值50,趨勢市時進(jìn)場單的出場均線參數(shù)乾闰。//

Numeric Lots(0); // 聲明數(shù)值參數(shù)Lots落追,初值0,即交易手?jǐn)?shù)涯肩。//

Vars

NumericSeries cmiVal(0); //聲明數(shù)值序列變量cmiVal轿钠,初值0巢钓,即潮汐指數(shù)。//

BoolSeries buyEasierDay(False); // 聲明布爾型序列變量buyEasierDay谣膳,初值為假竿报,宜買市。//

BoolSeries sellEasierDay(False); //聲明布爾型序列變量sellEasierDay继谚,初值為假烈菌, 宜賣市。//

NumericSeries myATR(0); // 聲明數(shù)值序列變量myATR花履,初值為0芽世,即真實波幅。//

NumericSeries MidLine(0); // 聲明數(shù)值序列變量MidLine诡壁,初值0济瓢,即布林通道中軌。//

Numeric Band(0); //聲明數(shù)值變量Band妹卿,初值0.//

NumericSeries upBand(0); // 聲明數(shù)值序列變量upBand旺矾,初值0,即布林通道上軌夺克。//

NumericSeries dnBand(0); //聲明數(shù)值序列變量dnBand箕宙,初值0, 布林通道下軌铺纽。//

NumericSeries trendLokBuy(0);//聲明數(shù)值序列變量trendLokBuy柬帕,初值0.//

NumericSeries trendLokSell(0);//聲明數(shù)值序列變量trendLokSell,初值0.//

NumericSeries keyOfDay(0); // 聲明數(shù)值序列變量keyOfDay狡门,初值0陷寝,即關(guān)鍵價格。//

NumericSeries swingBuyPt(0); //聲明數(shù)值序列變量swingBuypt其馏,初值0凤跑,即 震蕩市的買觸發(fā)價格。//

NumericSeries swingSellPt(0); // 聲明數(shù)值序列變量swingSellpt尝偎,初值0饶火,震蕩市的賣觸發(fā)價格//

NumericSeries trendBuyPt(0); //聲明數(shù)值序列變量trendBuypt,初值0致扯,即 趨勢市的買觸發(fā)價格肤寝。//

NumericSeries trendSellPt(0); // 聲明數(shù)值序列變量trendSellpt,初值0抖僵,即趨勢市的賣觸發(fā)價格鲤看。//

NumericSeries swingProtStop(0); //聲明數(shù)值序列變量swingProtStop,初值0耍群, 震蕩市時進(jìn)場單的出場觸發(fā)價格//

NumericSeries trendProtStop(0); // 聲明數(shù)值序列變量trendProtStop义桂,初值0找筝,即趨勢市時進(jìn)場單的出場觸發(fā)價格。//

BoolSeries swingEntry(False); //聲明布爾型序列變量swingEntry慷吊,初值為假袖裕,即 震蕩市時進(jìn)場標(biāo)識。//

Begin

If(!CallAuctionFilter()) Return;// 集合競價和小節(jié)休息過濾溉瓶。//

// 計算潮汐指數(shù)用以區(qū)分震蕩市與趨勢市急鳄。//

cmiVal = Abs(Close - Close[29])/(Highest(High,30) - Lowest(Low,30))*100; //照順序來看吧,第一個絕對值函數(shù)Abs堰酿,即當(dāng)前收盤價減去前第29個收盤價疾宏,取絕對值;再看求最高價函數(shù)Highest触创,即求30周期的最高價坎藐;同理,最低函數(shù)Lowest哼绑,求30周期的最低價岩馍。最后代入公式求解,即得cmiVal值抖韩。//

trendLokBuy = Average(Low,3);//求3周期內(nèi)最低價均值兼雄。//

trendLokSell= Average(High,3);//求3周期內(nèi)最高價均值。//

// 關(guān)鍵價格帽蝶。//

keyOfDay = (High + Low + Close)/3;? //其實就是3個價格的平均值。//

// 震蕩市中收盤價大于關(guān)鍵價格為宜賣市块攒,否則為宜買市励稳。//

buyEasierDay = False;//賦值為假。//

sellEasierDay = False;//賦值為假囱井。//

If(Close[1] > keyOfDay[1]) sellEasierDay = True;//假如前一個收盤價大于前一個關(guān)鍵價驹尼,則變量sellEasierDay賦值為真。//

If(Close[1] <= keyOfDay[1]) buyEasierDay = True;//假如前一個收盤價小于等于前一個關(guān)鍵價庞呕,則變量buyEasierDay賦值為真新翎。//

// 計算震蕩市的進(jìn)場價格//

myATR = AvgTrueRange(atrLength);//求10周期的真實波動值。//

If(buyEasierDay == True)//假如變量buyEasierDay等于真的住练。//

{

swingBuyPt = Open + swingPrcnt1*myATR[1];//代入相應(yīng)數(shù)值即可地啰。//

swingSellPt = Open - swingPrcnt2*myATR[1];//同理,代入相應(yīng)數(shù)值讲逛。//

}

If(sellEasierDay == True)//假如變量sellEasierDay等于真亏吝。//

{

swingBuyPt = Open + swingPrcnt2*myATR[1];//代入相應(yīng)數(shù)值了。//

swingSellPt = Open - swingPrcnt1*myATR[1];//同理的盏混,其實主要看的就是系數(shù)蔚鸥。//

}

swingBuyPt = Max(swingBuyPt,trendLokBuy[1]);//比較變量swingBuyPt與前一個變量trendLokBuy值惜论,取較大值。//

swingSellPt = Min(swingSellPt,trendLokSell[1]); //比較swingSellPt值與前一個trendLokSell值止喷,取較小值馆类。//

// 計算趨勢市的進(jìn)場價格,即布林帶系統(tǒng)弹谁。//

MidLine = AverageFC(Close,bollingerLengths); //50周期的收盤價均值乾巧。//

Band = StandardDev(Close,bollingerLengths,2);?//標(biāo)準(zhǔn)差求值,可返回之前解讀的布林線看具體函數(shù)代碼僵闯。//

upBand = MidLine + numStdDevs*Band;//上軌道計算公式卧抗。//

dnBand = MidLine - numStdDevs*Band;?//下軌道計算公式。//

trendBuyPt = upBand;//把上軌道賦值給變量trendBuyPt值鳖粟。//

trendSellPt = dnBand;//把下軌道賦值給變量trendSellPt值社裆。//

// 震蕩市。//

If(cmiVal[1] < swingTrendSwitch) //假如前一個變量cmiVal值小于變量swingTrendSwitch值向图。//

{

If(MarketPosition != 1 And High >= swingBuyPt) //假如當(dāng)前沒有持多單泳秀,且最高價大于等于變量swingBuyPt值。//

{

Buy(Lots,Max(Open,swingBuyPt));//開倉買入榄攀。//

swingEntry = True;//變量swingEntry賦值為真嗜傅。//

}

If(MarketPosition == 1 And BarsSinceEntry >= 1 And Low <= swingSellPt) //假如當(dāng)前持有多單,且建倉數(shù)位大于等于1,且最低價小于等于變量swingSellPt值钮糖。//

{

Sell(0,Min(Open,swingSellPt));//平倉障斋。//

swingEntry = False;//變量sweingEntry賦值為假。//

}

}

swingProtStop = 3*myATR;//止損價swingProtStop = 3 *變量myATR值偶房。//

trendProtStop = Average(Close,trendLiqLength); //50周期收盤價均值。//

? // 趨勢市判斷军浆。//

If(cmiVal[1] >= swingTrendSwitch) //假如前一cmiVal值大于等于變量swingTrendSwitch值棕洋。//

{

// 震蕩市時進(jìn)場單在趨勢市的出場。//

If(swingEntry == True) //假如變量swingEntry等于真乒融。//

{

If(MarketPosition == 1 And BarsSinceEntry >= 1 And Low <= (EntryPrice - swingProtStop[1])) //假如當(dāng)前持有多單掰盘,且建倉數(shù)位大于等于1,且最低價小于等于進(jìn)場價減去前一止損價赞季。//

{

Sell(0,Min(Open,EntryPrice - swingProtStop[1])); //平倉愧捕。//

swingEntry = False;//變量swingEntry賦值為假。//

}

}

? // 趨勢市時進(jìn)出場 碟摆。//

If(swingEntry == False) //假如變量swingEntry等于假晃财。//

{

If(MarketPosition != 1 And BarsSinceExit >= 1 And High >= trendBuyPt[1]) //假如當(dāng)前沒有持倉,且出場數(shù)位大于等于1,且最高價大于等于前一變量trendBuyPt值断盛。//

{

Buy(Lots,Max(Open,trendBuyPt[1]));//開倉買入罗洗。//

}

If(MarketPosition == 1 And BarsSinceEntry >= 1 And Low <= Max(trendSellPt[1],trendProtStop[1])) //假如持有多單,且建倉數(shù)位大于等于1钢猛,且最低價小于等于兩出場價中的較大值伙菜。//

{

Sell(0,Min(Open,Max(trendSellPt[1],trendProtStop[1])));//平倉,這里先看比較max值命迈,再比較min值贩绕,最后以較小價為平倉價。//

}

}

}

End

做空代碼及結(jié)果如下:

Params

Numeric swingTrendSwitch(20);

Numeric swingPrcnt1(0.50);

Numeric swingPrcnt2(0.75);

Numeric atrLength(10);

Numeric bollingerLengths(50);

Numeric numStdDevs(2);

Numeric trendLiqLength(50);

Numeric Lots(0);

Vars

NumericSeries cmiVal(0);

BoolSeries buyEasierDay(False);

BoolSeries sellEasierDay(False);

NumericSeries myATR(0);

NumericSeries MidLine(0);

Numeric Band(0);

NumericSeries upBand(0);

NumericSeries dnBand(0);

NumericSeries trendLokBuy(0);

NumericSeries trendLokSell(0);

NumericSeries keyOfDay(0);

NumericSeries swingBuyPt(0);

NumericSeries swingSellPt(0);

NumericSeries trendBuyPt(0);

NumericSeries trendSellPt(0);

NumericSeries swingProtStop(0);

NumericSeries trendProtStop(0);

BoolSeries swingEntry(False);

Begin

If(!CallAuctionFilter()) Return;

cmiVal = Abs(Close - Close[29])/(Highest(High,30) - Lowest(Low,30))*100;

trendLokBuy = Average(Low,3);

trendLokSell= Average(High,3);

keyOfDay = (High + Low + Close)/3;

buyEasierDay = False;

sellEasierDay = False;

If(Close[1] > keyOfDay[1]) sellEasierDay = True;

If(Close[1] <= keyOfDay[1]) buyEasierDay = True;

myATR = AvgTrueRange(atrLength);

If(buyEasierDay == True)

{

swingBuyPt = Open + swingPrcnt1*myATR[1];

swingSellPt = Open - swingPrcnt2*myATR[1];

}

If(sellEasierDay == True)

{

swingBuyPt = Open + swingPrcnt2*myATR[1];

swingSellPt = Open - swingPrcnt1*myATR[1];

}

swingBuyPt = Max(swingBuyPt,trendLokBuy[1]);

swingSellPt = Min(swingSellPt,trendLokSell[1]);

MidLine = AverageFC(Close,bollingerLengths);

Band = StandardDev(Close,bollingerLengths,2);?

upBand = MidLine + numStdDevs*Band;

dnBand = MidLine - numStdDevs*Band;?

trendBuyPt = upBand;

trendSellPt = dnBand;

If(cmiVal[1] < swingTrendSwitch)

{

If(MarketPosition != -1 And Low <= swingSellPt)

{

SellShort(Lots,Min(Open,swingSellPt));

swingEntry = True;

}

If(MarketPosition == -1 And BarsSinceEntry >= 1 And High >= swingBuyPt)

{

BuyToCover(0,Max(Open,swingBuyPt));

swingEntry = False;

}

}

swingProtStop = 3*myATR;

trendProtStop = Average(Close,trendLiqLength);

If(cmiVal[1] >= swingTrendSwitch)

{

If(swingEntry == True)

{

If(MarketPosition == -1 And BarsSinceEntry >= 1 And High >= (EntryPrice + swingProtStop[1]))

{

BuyToCover(0,Max(Open,EntryPrice + swingProtStop[1]));

swingEntry = False;

}

}

If(swingEntry == False)

{

If(MarketPosition != -1 And BarsSinceExit >= 1 And Low <= trendSellPt[1])

{

SellShort(Lots,Min(Open,trendSellPt[1]));

}

If(MarketPosition == -1 And BarsSinceEntry >= 1 And High >= Min(trendBuyPt[1],trendProtStop[1]))

{

BuyToCover(0,Max(Open,Min(trendBuyPt[1],trendProtStop[1])));

}

}

}

End

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壶愤,一起剝皮案震驚了整個濱河市淑倾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌征椒,老刑警劉巖娇哆,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異勃救,居然都是意外死亡碍讨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門蒙秒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勃黍,“玉大人,你說我怎么就攤上這事晕讲「不瘢” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵瓢省,是天一觀的道長锻梳。 經(jīng)常有香客問我,道長净捅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任辩块,我火速辦了婚禮蛔六,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘废亭。我一直安慰自己国章,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布豆村。 她就那樣靜靜地躺著液兽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上四啰,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天宁玫,我揣著相機(jī)與錄音,去河邊找鬼柑晒。 笑死欧瘪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匙赞。 我是一名探鬼主播佛掖,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涌庭!你這毒婦竟也來了芥被?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坐榆,失蹤者是張志新(化名)和其女友劉穎拴魄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猛拴,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡羹铅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉昆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片职员。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖跛溉,靈堂內(nèi)的尸體忽然破棺而出焊切,到底是詐尸還是另有隱情,我是刑警寧澤芳室,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布专肪,位于F島的核電站,受9級特大地震影響堪侯,放射性物質(zhì)發(fā)生泄漏嚎尤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一伍宦、第九天 我趴在偏房一處隱蔽的房頂上張望芽死。 院中可真熱鬧,春花似錦次洼、人聲如沸关贵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揖曾。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炭剪,已是汗流浹背练链。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留念祭,地道東北人兑宇。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像粱坤,于是被迫代替她去往敵國和親隶糕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容