選股串接雷達

  •   284 
  • 最後發表   Primitive  2021 五月 13
Primitive 發文於   2021/05/08

小幫手好:

第一次嘗試使用選股串接雷達下單(購買的是 XQ 企業版). 但試以下做法卻不可行。

例如試執行 60min 雷達腳本回測,選股腳本、雷達腳本如下; 商品範圍選上市普通股全部; 回測設定如下。從 print log 來看,諸多疑問:

1.回測只有二筆標的結果: 8101.TW, 2851.TW, 但從選股中心或選股中心回測的標的數量卻不少。

2.以 8101.TW 為例,print log 在 1/25 就出現 MKP=1, 在 5/4 出場後,5/5 又出現 MKP=1。但選股只在 4/8 才有選中該股。

不知這串接回測設定及腳本是那邊有問題呢?

那邊有選股串接雷達下單的說明呢? 好像找不到?

謝謝囉!

1. 選股腳本:

if GetField("主力買賣超張數","D")>highest(GetField("主力買賣超張數","D"),30)[1]*10 then begin

ret=1;

print("Date:",formatdate("MM/dd",date),"Symbol=",symbol,"Name=",symbolname,"ret=",ret);

end;

2. 警示腳本:

input: type(1,"Buy/Sell",inputkind:=Dict(["Buy",1],["Sell",2]));

 

var: MKP(0),BMKP(0);

var: BCost(0),BOut(0);

 

if time=090000 and MKP=0 then begin //符合選股開盤時買入

MKP=1; BCost=C; BOut=C*0.9;

end;

 

BOut=BOut*1.002;

 

if C<BOut then begin

MKP=0;

end;

 

if type=1 and MKP-MKP[1]>0 then ret=1; //買

if type=2 and MKP-MKP[1]<0 then ret=1; //賣

 

print("Date:",formatdate("MM/dd",date),"Time:",formattime("HH:mm",time),time,

"C=",C,"BOut=",BOut,"MKP=",MKP);

3. 回測設定:

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/05/11

Hello Primitive,

 

選股串接雷達的運算邏輯,您可以參考 策略雷達回測功能:「回測參數」說明 頁面

裡面有提到:在v6.40中,有了「選股回測」的新功能,使用策略雷達回測時,也同時支援「選股」來源,系統會依照當日收盤後選出的股票,在隔日執行策略觸發判斷進出場。

依照您提到的8101為例,選股系統只有在 4/8 日這一天篩選出此檔股票。所以選股雷達會在 4/9 日時有達成警示腳本裡所寫的條件(MKP-MKP[1]>0)才會進場。而實際上也確實是這樣。

雖然選股中心篩選出不少商品,但要在回測期間內篩選出來後又要符合警示腳本條件的才會進場。

像是2712,雖然此商品在 4/16 時被篩選出來,但其在 4/19 並沒有達到警示腳本中的進場條件,所以並沒有進場。

Primitive 發文於   2021/05/11

Dear 小幫手:

謝謝小幫手花時間看懂我的問題! 我讀了小幫手推薦的連結,資訊不多,哈。

同樣以 8101 為例,我想請問的是 4/6 達到出場條件出場(MKP=0) 後,4/7 09:00 又再度進場(MKP=1), 可是前一日 4/6 選股清單沒有 8101 呀?

警示腳本進場的邏輯只是前一日選股中心篩選出的商品,第二天 09:00 就直接進場(MKP=1). 但從警示雷達的 log 來看,好像警示雷達運作與選股中心篩選結果脫勾,看不出 MKP 為何又變成 1 了。

亦即我這樣子的警示腳本進場處理方式是否有錯呢? 如何讓警示腳本可以有效的接收到選股腳本的結果呢?

謝謝!

1. 警示 log

2. 4/6 選股結果

XQ小幫手 發文於   2021/05/12

 Hello Primitive,

 

選股在 4/6 沒有選出8101,所以回測報告該天並沒有進場。實際上是到 4/8 8101 才符合選股條件,並在4/9達成策略雷達條件,所以才有進場。

我想您大概誤會了,策略雷達在回測期間內只要是選股中心所挑出的標的都會進行運算,而不是選股挑出來後才對那天的資料進行運算。

所以回測區間內,只要是選股中心曾經觸發過的商品,策略雷達都會進行運算,那麼自然每一期的資料都會print出來。

您在 4/6、4/7的MKP變數雖然有符合策略雷達的進出場條件,但選股中心並沒有挑選8101作為交易標的,所以回測不會成交。

在選股中心串接策略雷達的情況下,需要兩邊的條件都符合才會進場。

需注意的是出場則不一定,只要有符合出場設定的停損、停利又或是腳本就會立即出場,跟選股中心無關。

Primitive 發文於   2021/05/12

謝謝小幫手的說明!

再以 1236 為例,依你說明,因有 1236 log, 表示選股中心曾經觸發過該商品,策略雷達接下來都會進行該商品運算,是否進場則需雷達+選股皆成立。

我 script 原本期望選股選中第二天 9:00 就進場。但因為接下來不論選股是否有選出該標的,策略雷達接下來都會進行該商品運算,所以會使腳本中 MKP=1, 造成 4/14 選股選中該標的,第二天卻因 MKP=1 而沒進場,是嗎?

1. 若是如此,表示腳本寫法與期望不同(選股選中若空手則第二天 9:00買進),請問應該如何修改呢?

2. 較簡單的做法應該是雷達腳本能取得選股腳本的結果,易 debug 也易對齊雷達與選股腳本,請問 XQ 有相關的指令嗎?

謝謝哦!

XQ小幫手 發文於   2021/05/13

Hello Primitive,

 

如果您希望選股選中且空手就進場的話,小幫手會建議您改用交易腳本撰寫。

交易腳本裡可以查詢庫存,因此就可以極度簡化您的腳本。例如說:

if filled = 0 then setposition(0, market);  //如果空手的話就市價進場

您可以參考此連結,裡面有關於交易函數的用法。

另外,目前無法在警示腳本裡取得選股腳本運行的結果。

感謝。

發表回覆
Close