股票自動(dòng)交易的方法[金字塔模型]
模型策略源碼:
目前金字塔已經(jīng)與信達(dá)證券開(kāi)通了合作協(xié)議,并可以直接對(duì)接信達(dá)證券的網(wǎng)上交易柜臺(tái),用戶只要開(kāi)戶就可以直接使用金字塔進(jìn)行下單了
下載地址 http://61.177.74.22/xdzq_jzt20151211.exe
目前來(lái)說(shuō),對(duì)于股票交易,市面上的量化軟件還沒(méi)有真正的接口級(jí)別的自動(dòng)交易,本人目前借助自制的一個(gè)中間軟件,接收某軟件傳過(guò)來(lái)的公式信號(hào),按照某軟件傳過(guò)來(lái)的證券代碼和價(jià)格與及數(shù)量(或者買(mǎi)入金額),自動(dòng)下單到券商的同花順核新下單終端里,基本實(shí)現(xiàn)準(zhǔn)確的靜默模式的自動(dòng)交易.
● 將選股公式改寫(xiě)一下,將原來(lái)用于預(yù)警的買(mǎi)入信號(hào)的條件當(dāng)做觸發(fā)開(kāi)關(guān),該條件滿足后。中間軟件就會(huì)接收到這個(gè)信號(hào)按照指定的代碼價(jià)格數(shù)量進(jìn)行買(mǎi)賣(mài)委托。
●通常軟件選股公式只能將符合條件的股票全部選出來(lái),不能對(duì)選出的股票再做進(jìn)一步的橫向?qū)Ρ龋瑩駜?yōu)買(mǎi)入。這是個(gè)難題,也是一個(gè)好問(wèn)題!尤其是在每天選出股票數(shù)量比較多的選股公式上更加明顯。有些公式信號(hào)質(zhì)量比較好,入場(chǎng)信號(hào)點(diǎn)也很優(yōu)越,不過(guò)就是全市場(chǎng)選出的股票太多,以至于沒(méi)有實(shí)盤(pán)可操作性。這個(gè)問(wèn)題大家怎么解決呢,估計(jì)大部分人在這里就卡住了,可能就要人工加以二次篩選了,這樣就不能真正的實(shí)現(xiàn)自動(dòng)交易嗲。
我是怎么解決的呢?
我是這樣,將原始的選股公式選出的股票不分優(yōu)劣凡是符合信號(hào)的都選到一個(gè)板塊,這個(gè)可以利用的獨(dú)有函數(shù)AddToBlock完成,做一個(gè)例子講解吧。(下面內(nèi)容涉及的代碼只是講解的例子程序,不能依此作為投資決策)
比如,我的選股公式:
選股公式名:金叉多頭
公式代碼:
buytj2:=ma(c,10)>ma(c,30);
選股:buytj1 and buytj2;
我將這個(gè)選股公式改寫(xiě)一下:
buytj2:=ma(c,10)>ma(c,30);
選股:buytj1 and buytj2;
if 選股 then AddToBlock(STKLABEL,FormulaName);
經(jīng)過(guò)這樣的改寫(xiě)后,將這個(gè)公式設(shè)為金魔方的預(yù)警公式,啟動(dòng)預(yù)警,每天就會(huì)將符合信號(hào)的股票在悄悄的選出并加入到和選股公式同名的板塊里,打開(kāi)這個(gè)板塊,就能看到所有預(yù)警所得的股票。
如果需要每天第一次啟動(dòng)這個(gè)預(yù)警時(shí),先清空板塊,在選股公式前面還要加上清理板塊的代碼,也很簡(jiǎn)單:
begin
SetGlobalVar(FormulaName+\'清理\',CurrentDate);
for $i=1 to STKCOUNT(FormulaName) Do
Begin
DELETEFROMBLOCK (STKFROMBLK(FormulaName,1) ,FormulaName);
end;
end;
好了,上面的代碼解決了選股到板塊的需要。
現(xiàn)在說(shuō)說(shuō),怎么在選出的股票里擇優(yōu)執(zhí)行交易,也就是當(dāng)選出很多股票時(shí),怎么用另一個(gè)指標(biāo)對(duì)這些股票進(jìn)行排序,將排在指定位置的股票買(mǎi)入,其他的不做買(mǎi)入(當(dāng)然,這個(gè)排序在盤(pán)中也是動(dòng)態(tài)變化的,但是你可以進(jìn)一步加入代碼限制你需要的時(shí)點(diǎn)才去排序才去執(zhí)行買(mǎi)入)
比如,我用當(dāng)日漲幅對(duì)這些個(gè)股票進(jìn)行排序,只買(mǎi)入所有選出的股票漲幅前5位的。新建一個(gè)指標(biāo)公式(注意,是指標(biāo)公式,不是選股公式):
公式代碼:
然后,真正觸發(fā)執(zhí)行買(mǎi)賣(mài)操作的公式如下:
公式名:金叉多頭_執(zhí)行
公式代碼:
#Run_Every_Tick
VARIABLEs:kcbar[200](0),hcbar[200](0);
盤(pán)中:=between(currenttime,SESSIONSTARTTIME(1),SESSIONENDTIME(1)) or between(currenttime,SESSIONSTARTTIME(2),SESSIONENDTIME(2));
if IsLastBar then
begin
vark:STKCOUNT(StrLeft(FormulaName,StrLen(FormulaName)-3)),LineThick0;
for $i=1 to min(200,vark) Do
begin
varlh:=RefIndi(STKFROMBLK(StrLeft(FormulaName,StrLen(FormulaName)-3),$i),\'今日漲幅.zf\',p_day,0);
kcbar[$i]:=varlh[0];
hkcbar[$i]:=varlh[0];
end;
varsort:=sort(hkcbar,1,1,vark);
varpos:=Sortpos(kcbar,1,1,vark);
strtk:=\'\';
for ik=1 to min(200,vark) Do
begin
hdai:=STKFROMBLK(StrLeft(FormulaName,StrLen(FormulaName)-3),kcbar[ik]);
ingzf:=hkcbar[ ik];
//////// ///////////// 推送信號(hào)
if ik<=5{推送漲幅排序前五} and 盤(pán)中 and ingzf<5{漲幅不超過(guò)5%才推送} and getglobalvar(StrLeft(FormulaName,StrLen(FormulaName)-3)+STKNAMEEX (hdai)+\'t\')=0 Then
begin
if WeekDayOfDate ( currentdate)<>6 and WeekDayOfDate ( currentdate)<>0 then
begin
存時(shí):=SetGlobalVar(StrLeft(FormulaName,StrLen(FormulaName)-3)+STKNAMEEX (hdai)+\'t\', if(DataPeriod>=P_Day,Date,date*10000+Hour*100+Minute));
end;
buyy:=SENDYJ(\'192.168.0.1\',\'717\',\'主的寬恕\',\'■\'+\'交易信號(hào):\'+StrLeft(FormulaName,StrLen(FormulaName)-3),hdai,STKNAMEEX (hdai),\'.1\'{這個(gè)到了中間軟件那邊就識(shí)別為按照即時(shí)的賣(mài)1價(jià)買(mǎi)入},NUMTOSTR (CURRENTTIME (),0)+\':1\'+\'倍\'{中間軟件識(shí)別為按照設(shè)置的默認(rèn)買(mǎi)賣(mài)金額(或者賬戶可用數(shù)的百分比)再乘以這個(gè)倍數(shù)進(jìn)行委托}); //函數(shù)SENDYJ推送指令給中間軟件執(zhí)行買(mǎi)賣(mài)的
FILEAPPEND(\'C:\\\\Documents and Settings\\\\Administrator\\\\桌面\\\\\'+StrLeft(FormulaName,StrLen(FormulaName)-3)+\'_推送記錄.doc\', strright(NUMTOSTR (Month+100,0),2)+\'-\'+NUMTOSTR (Day,0)+\' \'+strright(NUMTOSTR (InTPart(currenttime/10000)+100,0),2)+\':\'+strright(NUMTOSTR (InTPart(currenttime/100),0),2)+\':\'+strright(NUMTOSTR (currenttime,0),2)+\' \'+hdai+\'【\'+STKNAMEEX (hdai)+\'】\'+\'.1\'+\'元 1\'+\'倍\');
end;
/////////////////////////////////////////
strtk:=strtk+\'\\n\'+StrRight(\' \'+NumToStr(ik,0),3)+\') \'+StrRight(hdai,6)+\' \'+strleft(STKNAMEEX (hdai)+\' \',if(StrLen(STKNAMEEX (hdai))=4,4,8-StrLen(STKNAMEEX (hdai))+1))+\' \'+NumToStr(hkcbar[kcbar[ik]],2)+\'%\';
end;
end;
DrawTextEx(islastbar,1,10,10,strtk),Color1;
注:文中提及的中間軟件、DLL及其相關(guān)函數(shù)本貼不做共享,主要是因?yàn)榧儌€(gè)人軟件,不想大范圍共享,只是提供一個(gè)思路給有能力DIY的人去實(shí)現(xiàn)!
{別忘了將本網(wǎng)告訴您身邊的朋友,向朋友傳達(dá)有用資料,也是一種人情,你朋友會(huì)感謝你的。}
有思路,想編寫(xiě)各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 511411198 進(jìn)行 有償 編寫(xiě)!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒(méi)有相關(guān)內(nèi)容