隔日沖語法問題

  •   379 
  • 最後發表   Chuanc  2023 十一月 22
Chuanc 發文於   2023/11/20

您好,撰寫隔日沖策略時在判斷換日時遇到一些問題想請教

1. 若要使用 date<>FilledRecordDate(FilledRecordCount) 來當作出場條件,是不是收盤後策略不能關閉?因重新開啟後依庫存加入商品時會把成交時間設為開啟策略時間。

2. 在非回測的即時交易,啟用逐筆洗價時,執行頻率為日或是分鐘執行的次數會有差別嗎?都是一個tick執行一次?

3. getfielddate("Date")[1] <> getfielddate("Date"),若執行頻率為日,且啟用逐筆洗價,用此語法是否永遠都是拿到true? 因getfielddate("Date")[1]會拿到上一根K棒的日期,也就是昨天。因此無法判斷換日。

4. 在非回測的即時交易,getfielddate("Date")[1] <> getfielddate("Date"),若執行頻率為分鐘,且啟用逐筆洗價,就會在9點時第一根K棒拿到true,其他都為false? 

5. 若我每天收盤都會關掉策略,並在隔天8:45打開,執行頻率為分鐘,且啟用逐筆洗價,是否還可以用這個判斷是判斷換日, getfielddate("Date")[1] <> getfielddate("Date")?第一筆K進來的時間會在開盤後嗎?還是會在開啟策略時就有K棒進來執行腳本?會在哪一個時間點讓這個判斷為ture?又是在哪個時間點會依照昨日庫存設定初始部位?

6. 我的策略會在多檔股票中選股買入,且都買進固定量。我也有可能一開盤就進場拿到部位,又FilledRecordDate會被改為開啟策略的時間,我無法判斷哪些股票是昨日庫存加入的還是今日一開盤就買進的。也無法適用在開啟前設定參數傳入買進日期。我有想到是不是我在開盤前開啟策略,就可以用FilledRecordTime在開盤前判斷為昨日部位。但我今日模擬交易大概在8:55分開啟策略並依照帳戶庫存加入部位,看到依照昨日庫存設定初始部位的時間都是在9:00之後?是否開盤後才會啟動依照昨日庫存設定初始部位?

7. 因此依照我每天會關策略並在開盤前重新打開的話,要如何判斷filled>0的股票是昨日庫存還是一開盤吃到的,怎麼寫會比較好?

8. 回測時,最大投入金額的計算,若我昨日買30萬,今日賣出31萬,再買進50萬,是否今日最大投入金額會被計算為81萬?

若損益為虧損時,若虧損50萬,今日又買進30萬,是否今日最大投入金額為80萬?

 

感謝回應:)

XQ小幫手 發文於   2023/11/22

 Hello Chuanc,

 

1.是的,重新啟動後依庫存加入的商品會變為策略啟動的時間。

 

2.都是逐筆洗價的話,兩者的執行次數應該不會有太大差距。

但在快市的時候可能會洗得不太一樣。

 

3.是的。

 

4.是依據您使用的頻率判斷,不論是否逐筆洗價,只要是日頻率或以上的話,這個條件都會是每根Bar都是True。

 

5.如果不是日或以上頻率,且策略在當日第一根Bar運算的話,這個條件都會是True。

是否逐筆洗價不會對這個條件有影響 (但非逐筆洗價只會在該根Bar結束時才運算)。

依庫存的設定是在資料讀取筆數運算完畢,要運算即時資料之前將策略庫存作調整的。

 

6.依庫存的資料會如同上述的在要運算即時資料時才會調整,所以如果您一開盤就買入的話,兩者會很相近。

您可以參考 策略部位計算功能

如果不怕麻煩的話,也可以多設幾個參數並以 symbol 來判斷各個商品是否有昨日庫存。

也可以不要關閉策略讓其持續執行,或是將昨日有庫存的商品放到另一個策略作執行。

 

7.如同小幫手上面所說,您可以使用策略部位計算功能,或是參考小幫手建議。

 

8.不會,最大投入金額是依據策略需要多少金額才能夠實現回測中所做的交易,所以是看整個策略而非單日。

依您的第一個範例會是 30萬 => 49萬 (因為有賺到1萬,所以第二次進場時只需要多加19萬)

第二個範例則是要看您一開始的投入金額為多少,就會是 起始金額 加上如果減50萬後不足30萬的部分。

發表回覆
Close