XQ自動交易不採坑: 交易進場日跟選股一致了嗎? (日資料)

2Shares
Image

在新版XQ支援自動交易可以直接取得財報資料後,策略終於可以不用分開寫在選股與交易兩個模組裡面了,這大幅提升了策略開發的速度與後續維護的方便性。不過,當把選股條件寫入自動交易時,會遇到不同頻率的資料、還有些資料是在盤後才更新,取錯期數,很有可能發生選股與交易回測時,進場都是一致的,但一到實單就出現落差,本篇文章就是要來測試不同寫法對於進場日的影響,並找出正確的寫法,讓選股與交易不管是回測還是實單,都能保持一致的進場時機。

1. 前言

許多在用XQ開發股票交易的人,應該都很困擾自動交易中心無法取得財報資料來撰寫策略,須要把策略拆開,先用選股中心協助做財報選股,再由自動交易交測抓取選股結果,執行後續的進出場邏輯,不知道怎麼做的,可以看這篇

而這樣最大的問題就是,一個策略被分成了兩個部分,維護起來很麻煩,如果選股的程式碼、設定或參數被改動了,使用者是很難發現的,另外就是做自動交易策略開發時,回測的結果並不會列出所使用的選股條件與設定,如果沒有另外記錄下來,之後是無法找回原本的選股設定的。

這一個困擾人的問題,XQ最近終於解決了,讓指標、雷達、自動交易都可以取得財報的功能,對於想要開發自動交易策略的人,可以把所有條件都寫在一個策略內了,真的大大方便了策略的開發,但是,要把選股條件寫到自動交易內,還是有些地方要注意的,不然很有可能抓到不對的資料,甚是在回測時用了未來資料,這對開發策略,都是非常危險的,可能造成重大的金錢損失,真的是一定要注意。

選股資料有分日、月、季、年等頻率,大部分資料都是盤後資料,但日資料卻有可能是盤中資料,在取資料上的寫法有何差異,以下內容來告訴你。

2. 日頻率資料取前一期[1]就對了

以下表格整理了在日頻率資料下,要取那一期,自動交易的回測與實單才能得到一致的結果。

日頻率資料比較麻煩的地方在於,日資料有兩種,一種是盤中會出現的資料,如價格、成交量,而另一種是盤後才會更新的資料,如外資買賣超這類籌碼數據,不過還好在寫法上是一致的,只要是日資料,通通取上一期[1]資料就對了,如果取當期資料,回測結果就是錯的,而盤中進場要不是比選股早一日,要不就是策略會出錯。

下面詳細說明選股與自動交易的進場邏輯與不同寫法的測試結果,不一定需要看,有些初階內容、也有點枯燥,想多了解的人再去看看囉。

3. 選股中心的策略何時進場

選股中心主要是用收盤之後的資料來篩選隔天要進場的股票,所以最快的進場的時間點,會是隔天的開盤進場,不會因為隔天開盤的漲跌而做調整。

下面為選股中心的回測設定,有兩個進場方式,一個是當天的收盤價進場,那種會是比較特殊狀況才會用,比如當天收盤前就已知的事,如隔天要除息了,有的人就會在除息前一天收盤進場,如果我們用的是當天收盤後才會有的資料做進場判斷,選擇當天收盤價進場就等於是用未來值來做判斷,通常回測績效會非常好,但實際上可能績效是天差地別的,所以在設定上一定要非常小心的。

所以在使用選股中心回測時,進場就多是選擇隔天開盤價,就是隔天一開盤就進場

4. 在自動交易中心執行選股策略

由於選股中心沒有交易功能,想要做到自動交易,就需要透過自動交易模組來執行,執行的方式有兩種

4.1 透過自動交易的商品串選股策略

這件事在設定上比較麻煩,需要在自動交易中心另外寫進出場腳本,透過商品那加入選股策略,雖然這樣是可以執行的,但等於是把一個策略拆分成兩個部分,對於策略的維護管理都是非常不利的,在自動交易回測不同選股設定時,也很難追蹤紀錄。

4.2 將選股程式碼寫到交易腳本內

在XQ開放自動交易取得選股資料的功能後,原本的選股策略可以直接寫入交易腳本內,不用像4.1要分開兩個策略,大大改善了我們對策略開發、維護與管理上的方便性與效率,不過,在改寫成交易程式碼,就會需要特別注意,不然很有可能取得錯的資料,尤其是如發生取到未來值,又拿來交易,那可能會滿慘的。

後面的內容,將會採用這個方式,去測試不同日資料寫法,比較選股回測與自動交易回測的差異。

5. 日資料怎麼取回測才正確

日資料有分為盤中會更新的資料與盤後才會更新的資料,然後許資料又分取當期或是取前一期,因使,我們分成以下四種狀況去回測,並比較結果

5.1 有盤中資料、取前期[1]

這個策略的選股條件

今天收盤後,選出今天成交量大於10000張的股票,明天開盤進場

但當改寫成自動交易腳本時,由於開盤才會執行,因此,我們在寫腳本時,應該要這樣想

今天開盤時,幫我取得昨天成交量大於10000張的股票,今天開盤立刻進場,

因此,在自動交易的腳本會寫成如下,

if position=0 and filled=0 then begin
    if getfield("成交量", "D")[1] >= 10000 then setposition(1,market);
end;

為何交易程式碼用中括號1呢,因為我們要在今天開盤時取昨天成交量大於10000張股票的資料,所以要用[1]去取得昨天的資料,從下圖的選股跟交易回測的結果來看,進場日期與時間都是一樣的,表示這樣的寫法是正確的。

11

5.2 有盤中資料、取當期[0]

上面5.1在交易腳本的寫法,回測可以做到跟選股一樣的進場日且是開盤進場,那如果原本的腳本改成用中括號[0],會出現怎樣的狀況呢?

if position=0 and filled=0 then begin
    if getfield("成交量", "D")[0] >= 10000 then setposition(1,market);
end;

下圖為回測結果,當交易腳本的日成交量取的期數為0的時候,有兩個地方可以觀察下,一個是進場日期,都會比原本選股的提前一個交易日,另一個就是交易腳本的進場時間,都是在盤中的某的時間點,而不是開在開的時候

這個結果其實滿容易理解的,當交易腳本的日成交量取的期數為0的時候,就是要取當天的成交量資料,而成交量資料在盤中會更新的,因此,在當天盤中累積的成交量超過10000張時,就會馬上進場了,不會等到隔天,因此,會比選股提前一天就在盤中進場。

5.3 盤後才有新資料、取當期[0]

5.2的狀況是盤中數據會更新,那如果用了中括號0,但是盤中不會有新數據,要等盤後才會更新,這樣又會如何呢? 這邊用外資買賣超來做測試。

if position=0 and filled=0 then begin
    if getfield("外資買賣超", "D")[0] >= 5000 then setposition(1,market);
end;

從選股跟交易的回測比較可以看出來,交易回測的進場日跟5.2一樣,都提前了一個交易日,而且是在開盤就進場,但這樣是很有問題的,因為外資買賣超數據是盤後才會更新,卻被那來當成是當天的數據,並且在開盤就進場,等於是用了未來值來做回測

Image Not FoundImage Not Found

5.4 盤後才有新資料、取前期[1]

由於5.3回測會取到未來值,因此這次改取前一期做回測,程式碼如下

if position=0 and filled=0 then begin
    if getfield("外資買賣超", "D")[1] >= 5000 then setposition(1,market);
end;

這次自動交易的回測結果就跟選股回測一致了,因此,可以很確定的是回測盤後才會更新的資料時,跟盤中資料一樣,都是要取前一期的資料才行。

不過,這個結果,在實單上會不會又不一樣呢,5.3因為是回測,資料庫有數據,所以才會發生取到未來值,但在實際交易時,因為沒有資料,會不會反而正確呢?

Image Not FoundImage Not Found

6. 實際交易如何寫才對

上面的回測結果我們已經找出正確的寫法,讓選股與回測的進場日可以一致,但是在實際交易上,同樣的寫法會是正確的嗎? 盤中會更新的資料可以很確定不會有問題,我們比較擔心的是盤後更新的資料,回測的寫法在實際交易會不會有問題。

以下是我們把外資買賣超取當期在盤中的狀況,因為外資買賣超還沒有新的資料,因此,一開啟策略,策略就出現錯誤訊息了,因此,可以確定,盤後更新資料,在盤中使用時,也是要取上一期才行,實際策略,取前一期自動交易才能正常執行。

7. 總結

從上面的比較,可以整理出下方的表格,讀者只要記得,日頻率的選股條件,通通都取前一期就對了

另一個簡單的想法就是,今天的資料跟昨天會不會一樣,如果會不一樣,那就是用前一期,如果是一樣的資料,那就用當期,不過,這個想法,在月、季或年資料是不是這樣呢?我們下一文章在解答啦。

2Shares


發佈留言

在〈XQ自動交易不採坑: 交易進場日跟選股一致了嗎? (日資料)〉中有 3 則留言

  1. 「expe」的個人頭像

    看完了這一篇,感覺有所幫助,也覺得這應該是XQ官方要說明清楚的東西,居然是由使用者自己來測試出來才能知道(好在A+替大家測試了,並且寫了詳細圖文說明給大家參考),我認為有幫助我節省到時間了~要給個讚 ! 哈~

    1. 「A+管理員」的個人頭像

      他們用不好,我們才有生存空間,有東西可以寫啊~~🤣🤣🤣

  2. 「expe」的個人頭像

    看完了這一篇,感覺有所幫助。也覺得這本該是由XQ官方要說明清楚的,卻得由使用者自己來測試出來才能知道。(感謝有A+替大家測試了,並寫了詳細的圖文說明給大家參考) 有幫助我節省到時間~ 要給個讚 ! 哈~

相關文章

[VIP] 當沖交易如何做到收K進場即時出場2

上一篇文章大概說明了如何在逐筆中運用condition[1]做到收K進場,即時出場,不過,這樣的運用還有些需要注意的細節,將會在本篇文章說明,不過寫的有點複雜,請耐心閱讀,對你的回測一定會有幫助的。

當沖交易如何做到收K進場即時出場1

想要讓回測績效貼近實單績效,你一定要知道如何做到收K進場即時出場,本文將不同的回測設定與程式碼撰寫方式做了比較,證明在逐筆回測中是可以收K後進場的,而且這樣的作法,自動交易也可以執行,不需要向過往把進場跟出場分開寫,更容易維護策略。

如何運用AI修正XS程式碼錯誤

現在很多人都在用AI來寫程式,使用XQ的你,是不是超級羨慕也去嘗試讓AI撰寫XS程式碼了呢? 相信你試過之後的結果都會很失望吧,你以為他給你的是XS程式碼,但常常都是其他軟體的語法。

[AI] 定期定額投資績效計算頁面

定期定額投資的績效表現在XQ上並不容易回測,本文將會介紹我如何運用量化交易實驗室的AI,在短時間內就寫出一個可以計算定期定投入績效的XQ看盤頁面。

最近發文

加入我們

Categories

最新留言