自動交易出現多餘的買賣情形

  •   161 
  • 最後發表   GaryChiang  2024 四月 20
GaryChiang 發文於   2024/04/18

小幫手你好:

如圖及程式碼, 在回測時(股票:0050), 在2022/10/12 時, 應該買進"2"張就好,

但, 為何回測會出現賣出3張, 再買進3張這種不必要的交易!?

另外, 我在日K下回測10年,  但在2019之前回都沒有資料?

謝謝幫忙!

 

input: InitCapital(100, "初始資金(萬)");
input: AddCurrency(20, "每年加碼(萬)");
input: AddTime(1, "加碼月份");
input: Ratio(50, "投入百分比");
input: ControlUp(60, "動態調整上限");
input: ControlLow(40, "動態調整下限");

var: intraBarPersist _capital(0);   //總資產
var: intraBarPersist _stock(0);     //股票資產
var: intraBarPersist _stocks(0);    //股票數量
var: intraBarPersist _currency(0);  //現金
var: _stockRatio(0);                //股票比例
var: intraBarPersist _extra(false); //入金指標 
var: qty(0);                        //目前股票數量

if currentBar=1 then _currency = InitCapital;

_stock = _stocks*close/10;                //股票資產(萬)
_capital = _currency + _stock;            //淨資產(萬) 
_stockRatio = _stock/_capital*100;        //股票比例(%)

if month(date)=AddTime and _extra=false then begin
    _currency += AddCurrency;
    _extra = true;
end;

if month(date)<>AddTime then _extra=false;

if _stockRatio[1] > ControlUp or _stockRatio[1] < ControlLow then begin
    qty = intPortion(_capital*Ratio/100/close[1]*10);   
end;

if currentBar>1 and position<>qty then begin
     setposition(qty);   
     _stocks = qty;
     _currency = _capital - _stocks*close/10; 
end;

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

應該是qty比當下的庫存低,造成減碼賣出。你可Print(filled,qty);看看兩者的關係。

GaryChiang 發文於   2024/04/19

謝謝教授指教.

qty 的計算都是用昨天的資料做計算的, 所以, qty的值不會在一天之內因為洗價不同而有變動.

所以, 在做下單時, 應該只會有"一次"的變動, 即, 判斷目前部位與下單部位的差異.

以這個例子而言, 目前部位是7, 目標部位是9, 所以, 應該要只買進2張.

而回測的交易行為確是, 先賣出3張, 再買進5張. 我對這樣的行為, 有點不解!?

 

XS小編 發文於   2024/04/19

Hello GaryChiang,

 

要麻煩您提供回測的相關設定 (截圖或回測報告皆可) 以及 XQ Log 讓相關人員確認。

至於2019年開始才有進出場的原因是自動交易使用日頻率時會強制逐筆洗價,而逐筆洗價會需要分鐘頻率的資料。

伺服器上的分鐘頻率資料最多只會向前5年 (非完整年度),故是從2019年開始才有。

 

感謝 虎科大許教授 的熱心回覆。

XS小編 發文於   2024/04/19

Hello GaryChiang,

 

補充,小編這邊回測測試有發生類似但不完全相同的情況,會先請相關人員確認。

如果可以的話還是麻煩您提供相關資訊,感謝。

GaryChiang 發文於   2024/04/19

我的回測條件如圖, 麻煩你了!

XS小編 發文於   2024/04/19

Hello GaryChiang,

 

用您附圖上的設定是回測不出上面的結果 (回測長度不同)。

小編先附上這邊回測測試的結果。

如果您在腳本的開頭 (宣告完參數變數後) 以及腳本最後面印出相關數值的話,會看到在2023/01/04 094000 時 qty 的數值在10、9、8 三個數值中變動。

小編認為這是因為腳本中在計算qty時用的是 close[1],而計算_currency 時用的是close有關。

若將兩者改為相同的話就不會發生連續進出場的狀況。

附加文件

GaryChiang 發文於   2024/04/20

感謝小編:

我的理解在29-31計算出來的qty值, 之後在33-37行之間做買入的動作.

因為 qty 的值使用昨天收盤價去計算, 所以今天並不會再更改了,

也因為如此, 交易只會有一次, 不會在同一天有二次以上交易!

這樣的邏輯, 應該沒有問題才是!

另外, 我今天再回測一次, 程式 & 回測條件完全沒有做任何更動, 它卻正常了!?

二天做的回測, 結果不同也是讓我一頭霧水?

..

反正, 目前是正常的就好, 之後若還遇到相同的問題, 再請教你! 

感謝你!

發表回覆
Close