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