假設我有一個評價各種策略的函數,該函數能將策略按照回傳的retval進行排名,得到前10名策略。請問有辦法讓策略出場掉出前10名的股票,並買入新進的前10名?或是有什麼函數可以去得到retval所選出來的股票?
另外,在XS編輯器中進行交易回測時,在『選股』部分的自訂選項似乎無法進行回測。但當我將每日選股結果存成商品list,然後在『商品』中選擇我的商品組合時,就可以正常回測。
假設我有一個評價各種策略的函數,該函數能將策略按照回傳的retval進行排名,得到前10名策略。請問有辦法讓策略出場掉出前10名的股票,並買入新進的前10名?或是有什麼函數可以去得到retval所選出來的股票?
另外,在XS編輯器中進行交易回測時,在『選股』部分的自訂選項似乎無法進行回測。但當我將每日選股結果存成商品list,然後在『商品』中選擇我的商品組合時,就可以正常回測。
Hello RandyHsiao,
關於選股中心排行篩選出商品的功能可以參考 如何創造個人排行榜。
由於您說明的不是很清楚,該函數是回傳商品的排行還是策略的排行。
如果函數的 retval 會回傳該隻商品的排行,那麼您只要判斷各商品的 retval 是否大於10,如果大於10就出場,小於10就進場即可。
但如果是策略排行的話,那麼要考慮怎麼判斷該策略裡面的N檔商品中的前10名?
關於無法回測的部分,小幫手推測應該和 XS自動交易回測系統錯誤 裡面提到的是相同的問題。
目前此問題已經排除,您可以回測看是否正常。
如果還是有問題的話麻煩再告知。
你好,關於排序選股與進出場的地方我想確認一下
假設設我要永遠買進乖離最大前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?
選股買進應該沒有問題,但是出場條件是掉出排名的股票要出場,這裡似乎無法得知目前股票排序第幾名?
因為第一次的回覆中提到『如果函數的 retval 會回傳該隻商品的排行』
這裡的意思是要想辦法取得OutPutFile的排序,並且核對目前的symbol是否在其中?
Hello RandyHsiao,
是的,單一函數的選股排行只會列出當日的排行。
但是您可以寫另外一個函數是篩選出昨日的排行,再搭配 not 今日的排行。
這樣新策略就會篩選出昨日有上榜但今日掉出的商品。 (參考附件策略)
接著再串接到出場腳本讓其出場就好。(您可以另外建一個專門用來出場今日未在排行榜內的交易策略)
小幫手會提到 "如果函數的 retval 會回傳該隻商品的排行",是因為您提到 "假設我有一個評價各種策略的函數,該函數能將策略按照回傳的retval進行排名"。
但如同小幫手所說,若真的要撰寫一個會回傳商品排名的函數腳本很麻煩複雜 (需要用 GetSymbolField 取得所有要排名的商品來運算),所以用選股的排行會簡單許多。
如果評價函數是自己寫的而非系統欄位是不是就沒辦法透過GetSymbolField抓到了?
我原本想說寫在函數裡面用排名取出前10名之類的,但似乎函數裡面也無法使用outputfield自定義一個評價函數的欄位
Hello RandyHsiao,
GetSymbolField只能抓資料欄位,不能抓函數。
OutputField只能用來在選股中心輸出數值,所以只能使用在選股腳本。
7 評論