策略評價與選股回測問題

  •   313 
  • 最後發表   RandyHsiao  2023 五月 16
RandyHsiao 發文於   2023/05/05

假設我有一個評價各種策略的函數,該函數能將策略按照回傳的retval進行排名,得到前10名策略。請問有辦法讓策略出場掉出前10名的股票,並買入新進的前10名?或是有什麼函數可以去得到retval所選出來的股票?

另外,在XS編輯器中進行交易回測時,在『選股』部分的自訂選項似乎無法進行回測。但當我將每日選股結果存成商品list,然後在『商品』中選擇我的商品組合時,就可以正常回測。

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

 Hello RandyHsiao,

 

關於選股中心排行篩選出商品的功能可以參考 如何創造個人排行榜

由於您說明的不是很清楚,該函數是回傳商品的排行還是策略的排行。

如果函數的 retval 會回傳該隻商品的排行,那麼您只要判斷各商品的 retval 是否大於10,如果大於10就出場,小於10就進場即可。

但如果是策略排行的話,那麼要考慮怎麼判斷該策略裡面的N檔商品中的前10名?

 

關於無法回測的部分,小幫手推測應該和 XS自動交易回測系統錯誤 裡面提到的是相同的問題

目前此問題已經排除,您可以回測看是否正常。

如果還是有問題的話麻煩再告知。

RandyHsiao 發文於   2023/05/10

你好,關於排序選股與進出場的地方我想確認一下

假設設我要永遠買進乖離最大前10名的的話是否可以按照以下方式達到?

 

step1.在函數裡面新增一個"RankBias",其程式碼為 retVal = Bias(20);

step2.再到交易的地方新增一個交易策略"TradeByBias"

內建的常用下單方式"01-市價交易"中我改掉原本的進出場條件為RankBias()<=10進場、RankBias()>10出場

完整代碼如下:

{

市價交易

}

 

var: long_condition(false); { 進場買進作多 }

var: exit_long_condition(false); { 多單出場 }

 

範例:

 

均線穿越時以市價買進1張

均線跌破時以市價賣出(1張)

}

 

long_condition = RankBias()<=10;

exit_long_condition = RankBias()>10;

 

if Position = 0 and long_condition then begin

SetPosition(1, MARKET); { 以市價買進 }

end;

 

if Position = 1 and exit_long_condition then begin

SetPosition(0, MARKET); { 以市價賣出 }

end;

 

step3.在交易的地方按下回測,腳本選擇TradeByBias

 

以下有兩個疑問

a.retVal返回的是由大到小還是由小到大?

b.若在step3.的地方選擇選股,假設寫一個每天漲幅大於大盤為選股條件

  這個條件是回測當下每天更新後才去跑排序前10名的Bias?

XQ小幫手 發文於   2023/05/10

Hello RandyHsiao,

 

不行。

您的RankBias沒有排行,只有計算該商品的 Bias(20) 而已。

那麼交易腳本就只是將商品乖離率小於10的進場,大於10的出場而已。

如果是要用RankBias作排行的話,請參考 如何創造個人排行榜,在選股中心篩選出前10的商品後再將其串接到自動交易。

(交易腳本回測執行商品選擇選股跟選股策略)

 

您所謂的排行函數應該要計算出所有使用商品的Bias並進行排序,接著再依據執行的商品不同回傳各自的排行數值。

由於撰寫上很複雜所以小幫手不建議您使用這種方法。

RandyHsiao 發文於   2023/05/10

選股買進應該沒有問題,但是出場條件是掉出排名的股票要出場,這裡似乎無法得知目前股票排序第幾名?

因為第一次的回覆中提到如果函數的 retval 會回傳該隻商品的排行』

這裡的意思是要想辦法取得OutPutFile的排序,並且核對目前的symbol是否在其中?

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

Hello RandyHsiao,

 

是的,單一函數的選股排行只會列出當日的排行。

但是您可以寫另外一個函數是篩選出昨日的排行,再搭配 not 今日的排行。

這樣新策略就會篩選出昨日有上榜但今日掉出的商品。 (參考附件策略)

接著再串接到出場腳本讓其出場就好。(您可以另外建一個專門用來出場今日未在排行榜內的交易策略)

 

小幫手會提到 "如果函數的 retval 會回傳該隻商品的排行",是因為您提到 "假設我有一個評價各種策略的函數,該函數能將策略按照回傳的retval進行排名"。

但如同小幫手所說,若真的要撰寫一個會回傳商品排名的函數腳本很麻煩複雜 (需要用 GetSymbolField 取得所有要排名的商品來運算),所以用選股的排行會簡單許多。

附加文件

RandyHsiao 發文於   2023/05/12

如果評價函數是自己寫的而非系統欄位是不是就沒辦法透過GetSymbolField抓到了?

我原本想說寫在函數裡面用排名取出前10名之類的,但似乎函數裡面也無法使用outputfield自定義一個評價函數的欄位

XQ小幫手 發文於   2023/05/16

Hello RandyHsiao,

 

GetSymbolField只能抓資料欄位,不能抓函數。

OutputField只能用來在選股中心輸出數值,所以只能使用在選股腳本。

發表回覆
Close