隔天出場策略

  •   974 
  • 最後發表   Y0  2021 九月 09
Y0 發文於   2021/08/23

我想要實現今天買明天賣的一個策略

if Filled>0 and issessionFirstBar then setposition(0); 

上面是我用交易腳本寫的一個隔天開盤出場的策略

我的設定是一分K+逐筆洗價

左邊的商品回測出來的持有區間卻有1041根K棒

但一天的1分K應該只有270根才對

不知道哪裡出問題或是有什麼方法能夠實現隔天開盤出場的策略?

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

Hello Y0,

 

您可以使用日期來作判斷。

舉例來說:

if getfielddate("Date")[1] <> getfielddate("Date") and filled > 0 then setposition(0, market);

//前一根Bar與當根Bar日期不同且庫存大於0就清空

 

另外小幫手測試 issessionFirstBar 也是可以正常運作的。

有可能是因為其他的 setposition 也在同時執行所導致。

(同時有兩個 setposition 指令的話,會執行位於腳本上方的指令)

如果可以的話麻煩您提供 自動交易中心匯出檔勾選(包含)交易腳本、回測報告儲存檔、以及XQ Log來檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

 

 

Y0 發文於   2021/08/24

我發現問題是因為有些股票開盤會延緩搓合所以導致9:00沒有成交量甚至9:01也沒有成量,所以導致腳本無法在開盤時賣出。

所以用 if getfielddate("Date")[1] <> getfielddate("Date") 或是 issessionFirstBar 都無法避免這個問題。

請問有關於應對有延緩搓合的函式嗎?

 

XQ小幫手 發文於   2021/08/27

Hello Y0,

 

那麼您可以使用當成交日不等於當下日期時就出場的判斷式。

if position <> 0 and FilledRecordDate(FilledRecordCount) <> getfield("Date") then setposition(0, market);

// 部位 <> 0 且 最後一筆成交日期不等於當根Bar的日期就市價出場。

這樣的話只要換日的話就會持續符合,就算剛開盤沒有成交量,等到有成交量的時候就會觸發出場。

  • 按讚來自於
  • UU0831
Y0 發文於   2021/08/28

小編我還有發現一個問題,就是如果在買進的隔一天是分盤交易的話,回測可能就不會在隔天的九點賣出,可能11點12點才賣出,甚至幾天後才賣出。

XQ小幫手 發文於   2021/09/01

Hello Y0,

 

上面的寫法會讓您在成交日以後的天出場,但需注意XS只有在該根Bar有交易量才會進行交易進出場。

所以若當天該商品都沒有成交量的話,就算腳本邏輯運算會觸發交易也不會有進出場發生。

Y0 發文於   2021/09/02

像上面這幾檔股票,出場時機並非隔天的開盤點,我頻率設定用1分鐘或是日都一樣。

他們共同點都是成交日的隔天是分盤交易。

所以我想問問若遇到分盤交易要如何在成交日的隔天開盤賣出。

XQ小幫手 發文於   2021/09/07

Hello Y0,

 

小幫手使用1分鐘逐筆搭配腳本作測試:

if date = 20210707 and time = 100000 then setposition(1, market);

if position <> 0 and FilledRecordCount <> 0 and FilledRecordDate(FilledRecordCount) <> getfield("Date") then setposition(0, market);

並不會發生您所說的狀況。

就算用1分鐘也會在09:20出場。(參考附圖)

猜測可能是您腳本其他部分的影響。

例如如果腳本內同時有兩個 setposition 指令的話,只會執行位於腳本上方的那一個。

需要麻煩您提供 交易腳本、回測的設定以及XQ Log來檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

 

附加文件

Y0 發文於   2021/09/07

不好意思小幫手,好像是我出場策略的問題。

我的策略如下

if position=0 and time>=100000  then setposition(1);

if filled<>0 and Date<>filledRecordDate(filledrecordCount) then setposition(0);

小幫手的出場策略是

if position <> 0 and FilledRecordCount <> 0 and FilledRecordDate(FilledRecordCount) <> getfield("Date") then setposition(0, market);

邏輯都是庫存不為0並且日期跟成交日期不一樣就賣出,但結果卻不一樣。

想請問是我策略哪個環節或邏輯出錯了謝謝

XQ小幫手 發文於   2021/09/09

Hello Y0,

 

您的 SetPosition 沒有像小幫手那樣設為市價單(有成交量一定出場)。

若沒有給值的話會依照回測設定觸發價+/-幾檔出場(不一定出場)。(參考附圖)

小幫手測試如果1分鐘非逐筆且沒有設定市價的話長榮確實會在 2021/07/08 10:20 才出場。

如果要確保出場的話,建議您使用市價單且設為逐筆,這樣回測時可以在第一時間出場。

附加文件

  • 按讚來自於
  • UU0831
發表回覆
Close