自動交易 發生未能判斷出 不可當沖的現象

  •   124 
  • 最後發表   S16  2 天前
S16 發文於   2025/03/28

你好,

 

今天在執行模擬自動交易時, 發生未能判斷出不可當沖, 而掛單買入了, 狀況如下:

今天有兩個帳號都跑一樣的XS 腳本程式,針對 3/28 的三檔個股 2468, 4949, 6140 的當沖判斷上出現不一樣狀況.

A 帳號在8:49:11 執行此策略腳本, 有正確判斷出不宜當沖而沒有下單

B 帳號在7:12:14 就執行此策略腳本, 卻未能正確判斷出不宜當沖而下單了, 我擷取部分判斷如下:

 

if CurrentTime >= 85900 then
    begin
        condition2 = GetSymbolInfo("買賣現沖") or GetSymbolInfo("先買現沖");

         if condition2 then

               begin

                  Print(" Is allowed for Day Trading !!");

                  SetPosition(2, close);   

                  .....

               end

        else if condition2 <> true then
                Print(" NOT allowed for Day Trading !!");

........

不知是否太早執行策略會影響 GetSymbolInfo 欄位的判斷?

是否仍需要其他資訊? 還請告知, 謝謝

 

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

你的程式每次洗價都會計算condition2,應該不會有差異,condition2都會是False。

S16 發文於   2025/03/29

Hi 許教授 你好,

我一開始也覺得同一支程式不應該發生不一樣的結果,

但是它是真的發生了, 也因此造成後來當日出清失敗而造成庫存, 請參考附件庫存圖

 

我也感覺不可思議, 會不會跟執行時間, 或洗價設定, 其他設定 有關聯?

 

自動加入商品: 啟用

洗價設定:

執行頻率: 日, 原始值

洗價方式: 逐筆洗價

資料讀取比數: 100

 

策略部位: 不設定

 

附加文件

虎科大許教授 發文於   2025/03/29

你的附圖顯示庫存都是前一個交易日留下來的,是否這3檔處置股當天因為condition2為False,所以當天並沒有交易?

S16 發文於   2025/03/29

前一個截圖是今天3/29 一早抓的, 或許是這個原因把3/28 視為前一個交易日了,

請再參考我附上新的警示提醒的截圖, 這三檔的買入時間, 我把他們分別註記為 1, 2, 3 請再幫忙看看

附加文件

虎科大許教授 發文於   2025/03/29

沒看到截圖。若方便,將程式碼上傳,可能更容易找出問題。

S16 發文於   2025/03/30

唉, 怎麼會沒截圖咧?
我再貼上一次看看.

我整理一下XS程式, 再另外上傳

虎科大許教授 發文於   2025/03/30

代號2468的商品在3/28是處置股,禁止現沖,當天一開盤,策略就買進,顯然沒有控制禁止現沖。這要看程式碼才知道原因。

S16 發文於   2025/03/30

請參考XS 腳本如下, 是否有那裡可能影響了?

input: ForceToSale(0.91);
setinputname(1,"低於即認賠");

variable: intrabarpersist barsToday(0);
variable: intrabarpersist TriggerBuy(0), intrabarpersist TriggerPrice(1), intrabarpersist TriggerSale(0);

if Date = CurrentDate then
    barsToday += 1    
else
    barsToday = 0;

if CurrentTime >= 85900 and TriggerBuy = 0 then
    begin
        condition2 = GetSymbolInfo("買賣現沖") or GetSymbolInfo("先買現沖");

         if condition2 then

               begin

                  Print(" Is allowed for Day Trading !!");

                  TriggerBuy = 1;

                  SetPosition(2, close);   

                  .....

               end

        else if condition2 <> true then
                Print(" NOT allowed for Day Trading !!");

........

虎科大許教授 發文於   2025/03/30

應該是程式在跑歷史k棒時,TriggerBuy已經變成1,所以condition2沒有機會被運算,亦即沒有控制是否可買賣現沖。

S16 發文於   2025/03/30

但 SetPosition(2, close);  是在判斷 condition2 之後才會觸發;

在邏輯上, 只有 condition2 is TRUE, 才有機會掛單執行  SetPosition(2, close) 指令

 

除非 condition2 = GetSymbolInfo("買賣現沖") or GetSymbolInfo("先買現沖") 是  true, 才有機會到 SetPosition,

否則只會  print

是否有可能機率 GetSymbolInfo 在獲取 "買賣現沖" 或 "先買現沖" 有失誤?

顯示更多回應 發表回覆
Close