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