自動交易

  •   248 
  • 最後發表   XQYi  2024 二月 07
XQYi 發文於   2023/12/06

寫了一個很簡單的程式,有庫存的情況下,日逐筆測試,策略部位依庫存,執行結果卻異常

例如華通72.8=>應 (買72.51;賣73.09 ), 實際只有09:04 的72.5買進無賣出

成交明細中09:00:26 就已經有73.1 09:00:47(73.2)的價格出現,為何都沒賣出?

 

input:x1(0.4,"百分比")

if position=0 and filled=0  and close < open*(1-x1/100)  then  buy(1,close,label:="買1");

if  filled=1 and   close > open* (1+x1/100) then sell(1, close,label:="賣1"); 

附加文件

排序方式: 標準 | 最新
XS小編 發文於   2024/01/02

Hello xqyi,

 

如同小幫手之前說過,回測的逐筆洗價沒辦法模擬實際情況,會有些差異。

日頻率的逐筆洗價會是以1分鐘頻率的K棒來模擬。

所以您這邊的狀況會是 09:04 這根1分鐘Bar買進,接著 (sell條件中有 filled = 1) 才會用之後的每一分鐘收盤價去判斷是否有大於 當天開盤價 * 1.004,也就是 72.8 * 1.004 = 73.0912。

而華通只有在開盤第一根終有機會達成條件,所以在滿足 filled = 1 之後都沒有價格會觸發出場。

 

小編建議您可以在腳本中加上print,會比較好確認原因。

XQYi 發文於   2024/01/03

日頻率的逐筆洗價會是以1分鐘頻率的K棒來模擬。

=>此例不是模擬,是實際交易下的拿著錢承擔著不確定的測試情況

XS小編 發文於   2024/02/07

Hello xqyi,

 

您最上方的附圖是回測報表中的資訊。

且如同小幫手所說,就您在上面提供的資訊來看,是在 09:04 的時候進場。

而當天能夠觸發出場的價格是在 09:00 的時候發生,不可能會觸發。

因為您不能將未來的庫存在過去賣掉。

更簡單來講,在09:00的時候filled為0,故條件不會觸發。

 

若您的問題是為什麼不會放空 (假設在沒有filled = 1 的條件情況下),請參考 sell 的說明。

Sell減碼之後的最小部位是0,不會把目前的部位變成空單。

要放空的話需使用 short 函數。

發表回覆
Close