有關自動交易中心

  •   154 
  • 最後發表   大A  4 天前
大A 發文於   2025/04/07

請問一下,在自動交易中心,若同時啟動三個交易策略 A,B,C,執行商品都是上市普通股,當策略A篩選到某一檔個股買進時,策略B及C的目標部位及實際部位會跟策略A一樣變成+1,請問這樣的話出場條件會怎麼執行?是以策略A的出場條件為主,還是策略A、B、C其中一個的出場條件最先符合就會執行出場?

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/04/07

若三個策略都有出場機制,則會按照各自的出場機制出場。

大A 發文於   2025/04/08

請問一下,延續上述情況,當我設定單一商品最大部位限制為1時,A、B、C三個策略使用同一股票池,

一、當三個策略觸發同一檔股票,而觸發進場條件的時間順序為 A-->B-->C,這樣依然是A、B、C三個策略依然會各自下單進場對嗎?還是單一商品最大部位限制是指『所有策略中的單一商品』,而不是指『在每個策略下的單一商品』的最大部位?

二、A、B、C三個策略使用同一庫存帳號時,策略部位是『依庫存』,有匃選『庫存異動時自動加入執行』,當只有A策略有觸發進場條件買入『股票1』,這樣會因為A、B、C追蹤同一股票池,且使用同一庫存帳號,在執行出場條件時,這三個策略會因為庫存有『股票1』而同時執行出場策略嗎?(也就是因為庫存有股票1的關係,系統會判斷這三個策略的position跟filled都會變成1,而這三個策略我設定的出場條件都是以position跟filled=1的前提下去執行)

三、在自動交易中心的腳本選項中,針對執行商品這個選項,可以多設計一個下拉選單嗎,這樣當A、B、C策略因為第一點或第二點的情況買入『股票1』時,可以自行選擇要以哪一個策略的出場條件做執行(也就是在不要執行出場條件的策略,裡面的執行商品,把『股票1』刪除),但現行執行商品這個選項是排序沒有照股票代號排,非常亂,所以要找裡面的股票做刪除非常難找。

虎科大許教授 發文於   2025/04/08

(1)看起來你使用的是舊的XQ版本。15.01以後的版本,不再有『依庫存』的策略部位,而是改成『與庫存同步』。

(2)按照你的舊版本設定,勾選『庫存異動時自動加入執行』,A策略買入股票1張且成交,則A策略的Position及filled都是1。但對B、C策略來講,由於股票1已是監控的商品,儘管股票1被A策略買進1張,但B、C策略並不會讓股票1的Position及filled更新,它們仍然是0。

(3)策略啟動之後,你要求的第三項需求是無法滿足的。

(4)建議更新版本到最新的15.04版本,這方面的功能會比較齊全。

 

大A 發文於   2025/04/08

但我昨天跑模擬交易遇到的情況是只有A策略選到股票1買進後,在自動交易中心裡,A、B、C三個策略部位中(同一個股票池)都有顯示『目標部位』+1及『實際部位』+1,而在今天,股票1被B策略的出場條件觸發出場,然後策略A的position跟filled歸零後,策略A又再度觸發進場條件而再度買入股票1。

另外第三點的部分,我的想法是同時用三個策略監控一支股票,當其有中一個策略被觸發時,用單一產品最大限制為1去限制其他2個策略觸發下單。這是可行的嗎?因為對『單一產品最大限制部位』這句話的意思是指所有策略下的單一產品最大限制,還是指單一策略下的單一產品最大限制?

虎科大許教授 發文於   2025/04/08

單一商品最大部位限制,限制個別商品最大持有部位數。若B、C策略可以抓到A策略建立的庫存,則可以進行控制。

大A 發文於   2025/04/08

但我昨天跑模擬交易遇到的情況是只有A策略選到股票1買進後,在自動交易中心裡,A、B、C三個策略部位中(同一個股票池)都有顯示『目標部位』+1及『實際部位』+1,而在今天,股票1被B策略的出場條件觸發出場,然後策略A的position跟filled歸零後,策略A又再度觸發進場條件而再度買入股票1

那像A策略觸發進場,但是由B策略觸發出場的情況可以怎麼避免?還是用同一個股票池就無法避免?

虎科大許教授 發文於   2025/04/08

這個可用單根K棒只觸發一次的觸發模式控制。賣出之後記錄時間(若是分K的話)或K棒編號,只有時間改變或K棒編號改變,才可以再次進場。

大A 發文於   2025/04/09

那請問這樣的語法是正確的嗎?

var: intrabarpersist _oncePerBar(0);

condition1=觸發條件;

if position=0 and filled=0 and  condition1 and _oncePerBar <> currentbar then begin setpositoin(1,market);

_oncePerBar = currentbar;

    end;

虎科大許教授 發文於   2025/04/09

這樣可以。

大A 發文於   2025/04/10

請問一下,在討論區趴文看到以下內容,這樣是要以 oncePerBar<> currentbar還是要以oncePerBar = 0來控制單根K棒只觸發一次?

_________________________________________________________________________________

您用 oncePerBar<> currentbar 這種方式來限制,會變成每根Bar都觸發一次。

如果是要啟動後只能觸發一次的話,應該是要 oncePerBar = 0 才對。

舉例來說:

var: intrabarpersist oncePerBar(0);

variable: tr(0);

 

tr= ( (close-GetField("最高價","D"))/GetField("最高價","D") )*100;

if tr<=-2 and GetInfo("IsRealTime") = 1 and oncePerBar = 0 then begin

    ret=1;

    print(file("C:\print\print.log"),date,symbol,close); 

    oncePerBar = 1;

顯示更多回應 發表回覆
Close