如何建構(gòu)第一支自己的程序 [MC]
- 咨詢內(nèi)容:
原文出處:幣圖志http://www.bituzi.com/2011/09/blog-post_16.html
前言許多MC 新的使用者還不太會(huì)撰寫(xiě)程序, 這邊將手把手教大家建構(gòu)第一支簡(jiǎn)單的日內(nèi)程序, 一支交易程序的主軸就是進(jìn)場(chǎng)邏輯,進(jìn)場(chǎng)邏輯又分順勢(shì)或是逆勢(shì)大家可能會(huì)想說(shuō),大盤(pán)大概有70%的時(shí)間都在盤(pán)整沒(méi)有特別的方向,所以用逆勢(shì)的方法可能比較容易賺錢(qián),但是真的是這樣嗎?其實(shí)不一定啦!貼著盤(pán)勢(shì)做,就會(huì)賺到錢(qián)了,順勢(shì)逆勢(shì)也不是那么重要,就差在你進(jìn)場(chǎng)的相對(duì)位置。 我們今天打算來(lái)寫(xiě)出一支日內(nèi)當(dāng)沖的程序,基本的進(jìn)場(chǎng)邏輯很簡(jiǎn)單,當(dāng)價(jià)格往上突破我們?cè)O(shè)定的壓力線,我們就作多;當(dāng)價(jià)格往下跌破我們?cè)O(shè)定的支撐線,我們就作空。重點(diǎn)來(lái)了,我們?cè)趺丛O(shè)定壓力線跟支撐線呢?在這邊提供一個(gè)最簡(jiǎn)單的想法,我們?cè)O(shè)定開(kāi)盤(pán)后一段時(shí)間的最高點(diǎn)跟最低點(diǎn)當(dāng)作一個(gè)區(qū)間,往上突破最高點(diǎn)的某個(gè)比例就進(jìn)場(chǎng)做多;往下跌破最低點(diǎn)的某個(gè)比例就進(jìn)場(chǎng)做空。現(xiàn)在就開(kāi)始來(lái)撰寫(xiě)我們的程序碼吧! 參數(shù)與變數(shù)設(shè)定首先,我們必須先設(shè)定我們的參數(shù),因?yàn)槲覀円黄茀^(qū)間上下的某個(gè)比例,所以我們把比例當(dāng)作是一個(gè)參數(shù),也方便讓大家可以去最佳化。再來(lái),因?yàn)槲覀兪窃O(shè)定開(kāi)盤(pán)后一段時(shí)間的高低點(diǎn)區(qū)間,所以我們開(kāi)始交易的時(shí)間必須限定在那段時(shí)間之后,而且我們總不會(huì)一直交易到收盤(pán)吧!
input :R(0.002),BeginTime(0930),EndTime(1130);
Input后面是接我們程式里可變動(dòng)的參數(shù),千萬(wàn)記得,每句程序碼寫(xiě)完都要記得加分號(hào)「;」R是代表區(qū)間上下的某個(gè)比例,BeginTime是我們開(kāi)始交易的時(shí)間,EndTime是我們終止交易的時(shí)間。 接著我們必須要有變數(shù)來(lái)儲(chǔ)存我們開(kāi)盤(pán)后一段時(shí)間的高低點(diǎn),
var:TH(0),TL(0),mkp(0),ax(0),ay(0);
TH是用來(lái)儲(chǔ)存我們當(dāng)日某段時(shí)間里的最高點(diǎn);TL是用來(lái)儲(chǔ)存我們當(dāng)日某段時(shí)間里的最低點(diǎn)。mkp用來(lái)儲(chǔ)存我們手邊部位狀態(tài)。ax用來(lái)計(jì)算我們作多的次數(shù),ay用來(lái)計(jì)算我們作空的次數(shù)。ax跟ay可以用來(lái)限制我們當(dāng)日多空交易次數(shù)。所以部位狀況跟作多、作空次數(shù),每天都必須歸零,
if date <> date[1] then beginmkp=0;ax=0;ay=0;end;
進(jìn)場(chǎng)方式程序的核心來(lái)了,首先我們會(huì)先設(shè)定進(jìn)場(chǎng)時(shí)間范圍,所以我們之前設(shè)定進(jìn)場(chǎng)時(shí)間在9點(diǎn)30到11點(diǎn)30。基本上當(dāng)沖程式不一定要像留倉(cāng)程式總是有部位在,所以我們?cè)O(shè)定不管多單或是空單進(jìn)場(chǎng)時(shí),手邊都不要有任何部位。當(dāng)K線最高價(jià)格往上突破區(qū)間高點(diǎn)的某個(gè)比例后,價(jià)格過(guò)高點(diǎn)進(jìn)場(chǎng)作多;當(dāng)K線最低價(jià)格往下跌破區(qū)間低點(diǎn)的某個(gè)比例后,價(jià)格過(guò)低點(diǎn)進(jìn)場(chǎng)作空。
if BeginTime < Time and Time < EndTime then beginif MarketPosition = 0 and high > TH*(1+R) then buy next bar at highest(high,1)+1 stop; if MarketPosition = 0 and low < TL*(1-R)?? then sell next bar at lowest(low,1)-1 stop;end;
不過(guò)我們總不會(huì)無(wú)限制的進(jìn)場(chǎng)吧!所以可能會(huì)去限制我們的進(jìn)場(chǎng)次數(shù),所以你可以這樣去記錄你的進(jìn)場(chǎng)次數(shù),
mkp=marketposition; if mkp[1]<>1 and mkp=1 then ax=ax+1; if mkp[1]<>-1 and mkp=-1 then ay=ay+1;
我們用mkp去儲(chǔ)存部位狀況,當(dāng)你前一個(gè)部位不是多單,而現(xiàn)在進(jìn)多單,ax就加1,表示作多一次,空單亦然。
出場(chǎng)方式最后,有進(jìn)必有出嘛!基本上我們?cè)O(shè)定停損點(diǎn)數(shù)為50點(diǎn),當(dāng)然,如果你容忍度比較小,停損可以設(shè)小一點(diǎn),不過(guò)當(dāng)盤(pán)在掃的時(shí)候,停損太小很容易被掃出場(chǎng)。然后,在14點(diǎn)55分時(shí),手中的部位還沒(méi)出場(chǎng)的話,就讓它通通出場(chǎng)吧!
if marketposition =1 then begin sell next bar at entryprice-50 stop ;
if time>1455 then sell this bar on close;
end;
if marketposition =-1 then begin buytocover next bar at entryprice+50 stop ;
if time>1455 then buytocover this bar on close;
end;
事實(shí)上,你把這樣的程序套進(jìn)去作回測(cè),你會(huì)發(fā)現(xiàn)績(jī)效并沒(méi)有很好,為什么呢?首先是交易次數(shù)太多,所以我認(rèn)為你必須去限制你的交易次數(shù),通常我們會(huì)限定一天多空各作一次,最多多空不會(huì)各作超過(guò)2次,畢竟你可能不只有一支程序,可以讓其他的程序來(lái)互補(bǔ),沒(méi)有必要通通讓同一支程序在那邊拼命阿!除了限制進(jìn)場(chǎng)次數(shù)來(lái)降低交易次數(shù)之外,我們還可以利用其他的濾網(wǎng)來(lái)降低我們的交易次數(shù),這個(gè)以后我們?cè)诼齺?lái)介紹。當(dāng)然,你也可以縮短你的交易時(shí)間,這樣也可以減少你的交易次數(shù)。 但是,大家可能會(huì)覺(jué)得說(shuō),為什么績(jī)效不太好?大家要知道,每種進(jìn)場(chǎng)邏輯有它的優(yōu)點(diǎn)跟缺點(diǎn),每種進(jìn)場(chǎng)邏輯在設(shè)定時(shí),想要抓的盤(pán)勢(shì)可能不相同。而這種固定區(qū)間的進(jìn)場(chǎng)方式,如果遇到一路到底的盤(pán),當(dāng)然是賺翻了。但最怕是上沖下洗的震蕩盤(pán)了,尤其是在計(jì)算區(qū)間的時(shí)間里,指數(shù)波動(dòng)過(guò)大,會(huì)讓你的區(qū)間也變得很大,這樣當(dāng)指數(shù)走勢(shì)轉(zhuǎn)向時(shí),會(huì)讓你進(jìn)場(chǎng)變得相對(duì)緩慢。 所以大家在寫(xiě)程序的時(shí)候,必須要清楚自己程序的死穴,你可以經(jīng)由觀察K線圖的進(jìn)出場(chǎng)點(diǎn),來(lái)發(fā)現(xiàn)你程序的問(wèn)題所在。因?yàn)槟阒滥愠绦虻乃姥ㄔ谀模磕悴庞修k法加些信號(hào)過(guò)濾條件去過(guò)濾掉一些你不想要的進(jìn)場(chǎng)點(diǎn),注意: 不是過(guò)度的去fit市場(chǎng)而加了太多的東西。 而要提升績(jī)效跟減少drawdown還可以從出場(chǎng)點(diǎn)改進(jìn),畢竟這支范例程序的出場(chǎng)點(diǎn)太單調(diào)了,只有停損跟收盤(pán)出場(chǎng),你可以加入拉回出場(chǎng)或是一些保護(hù)性跟追蹤性的出場(chǎng)方式,以前也有介紹過(guò)一些出場(chǎng)方式,以后有機(jī)會(huì)我們也會(huì)介紹一些不一樣的出場(chǎng)方式。 建構(gòu)出一支基本的程序,其實(shí)不難,我們可以由上面這樣的流程,去寫(xiě)出自己的程序,最難的是如何把你的想法寫(xiě)成程序,新手因?yàn)椴皇斐淌街噶钫Z(yǔ)言,所以常常會(huì)不知道如何用程序語(yǔ)言表達(dá)出自己的想法,這部分就必須要多看、多問(wèn)、多寫(xiě)程序才可以更精進(jìn)!
程序, 如何, 大盤(pán), 開(kāi)盤(pán) - MC技術(shù)部: 老師說(shuō)得有道理
有思路,想編寫(xiě)各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進(jìn)行 有償 編寫(xiě)!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒(méi)有相關(guān)內(nèi)容