自動交易回測無資料求解

  •   66 
  • 最後發表   xqyi  2024 五月 15
xqyi 發文於   2024/04/26

程式碼如下,想法為

開盤大於昨天收盤價 ,新一筆交易大於前筆交易時,買進一張

開盤小於昨天收盤價 ,新一筆交易小於前筆交易時,賣出一張

為何回測時無交易紀錄?

if  position=0 and filled=0 

then begin

if openD(0) > closeD(1) and close > close[1] then setposition(1,market,label:="買1");

if openD(0) < closeD(1) and close < close[1] then setposition(-1,market,label:="賣1");

end;

 

input: X1(6,">買進有漲%停利"),X2(15,"<買進有跌%停損"),X3(6,"<賣出有跌%停利"),X4(15,">賣出有漲%停損");

value95=100 * (Close - FilledAvgPrice) / FilledAvgPrice; //停利停損%

 

if position<>0 and filled<>0 then begin

if filled=1 and close >=X1   then setposition(0,close);

if filled=1 and value95 <=-x2  then setposition(0,close);

 

if filled=-1 and close <=X3  then setposition(0,close);

if filled=-1 and value95 >=x4  then setposition(0,close);

end;

排序方式: 標準 | 最新
XQ小幫手 發文於   2024/05/15

Hello, xqyi.

主要是FilledAvgPrice在還沒有成交的時候,預設是0,XS Compiler會把分母為零的那行跳出錯誤(數學定義除法分母不能為0),

若您還是有回測上的疑問?麻煩提供 自動交易匯出檔勾選(包含)策略腳本、有問題的商品以及發生的日期時間、XQ Log 來檢驗。

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

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

 

感謝。

xqyi 發文於   2024/04/27

如原文

整個程式碼把value95該行移動之後或取消,就都正常了,所以不了解為何這行程式碼影響力之大的原因!!

弄得懷疑人生啊  想破頭找不出為何

虎科大許教授 發文於   2024/04/27

回測時,若你使用日頻率,openD(0) > closeD(1),則每分鐘洗價時,只要close > close[1],亦即價格高於昨天收盤價,就會建立部位。若是分鐘頻率,則除了今天開盤價要高於昨天收盤價,且每分鐘洗價的價格高於前一根分K的收盤價,就會建立部位。若條件都符合,卻沒有交易,應該是其他原因造成,大部份是你的程式或設定有問題。

xqyi 發文於   2024/04/27

確實是這樣,但value95是在成交之後才有作用的,為何這段的程式碼會受影響

if  position=0 and filled=0 

then begin

if openD(0) > closeD(1) and close > close[1] then setposition(1,market,label:="買1");

if openD(0) < closeD(1) and close < close[1] then setposition(-1,market,label:="賣1");

end;

沒有交易?

虎科大許教授 發文於   2024/04/27

因為若沒有部位, FilledAvgPrice為0,分母不得為0。把value95放到IF裡面,應該就可以了。 

if position<>0 and filled<>0 then begin

value95=100 * (Close - FilledAvgPrice) / FilledAvgPrice; //停利停損%

if filled=1 and close >=X1   then setposition(0,close);

if filled=1 and value95 <=-x2  then setposition(0,close);

end;

xqyi 發文於   2024/04/27

經排除

value95=100 * (Close - FilledAvgPrice) / FilledAvgPrice; //停利停損%

這行程式碼的位置出了問題,但不了解為何有問題?

 

發表回覆
Close