回測與print都有觸發,但實際自動交易卻沒觸發

  •   262 
  • 最後發表   KiddingChen  2022 三月 15
KiddingChen 發文於   2022/03/08

小幫手好,我想要在空單進場的時候以ATR的波動倍數來停利出場,如題,實際交易卻沒觸發,煩請小幫手幫忙看看程式碼:

input:pst(1,"部位"),
        ATR_length(10,"ATR期間"),s_numsATR(3.4,"ATR倍數"),ATR_osc(20,"ATR波動");
var:i(false),time_temp(0);


condition1=//多條件
condition2=//空條件
condition3=atr_stop_profit(ATR_length,s_numsATR,position) and c<filledAvgPrice and ATR(10)>ATR_osc;

if position<>pst then
    if condition1 then setposition(pst,market);
if position<>neg(pst) then
    if condition2 then setposition(neg(pst),market);

if position<>0 then
    if date=getlastTradeDate(dateValue(Date,"M"),dateValue(Date,"Y")) and (time>=132000 and time<=133000) 
    then setposition(0,market,label:="到期日平倉");
if position>0 then
    if condition2 then setposition(0,market);
if position<0 then begin
    if condition1 then setposition(0,market)
    else if condition3 then setposition(0,market,label:="ATR空平倉");
end;

排序方式: 標準 | 最新
KiddingChen 發文於   2022/03/08

condition3 ATR停利的程式碼如下:

input:ATR_length(numeric,"ATR期數"),ATRs(numeric,"ATR倍數"),pst(numeric,"目前部位");
var:last_low(0);
value1=ATR(ATR_length)*ATRs;
if ATRs=0 then ATR_stop_profit=false
else
if pst=-1 then begin
    if last_low=0 then last_low=low[1];
    if low<last_low then last_low=low;
    if c>last_low+value1 then begin ATR_stop_profit=true;last_low=0;end;
end
else if pst=0 then begin
    if c>low+value1 then atr_stop_profit=true
    else atr_stop_profit=false;
    last_low=0;
end;

XQ小幫手 發文於   2022/03/09

Hello KiddingChen,

 

小幫手簡單的測試下回測是有觸發condition3沒錯。

麻煩您詳細敘述您是什麼時候使用在什麼商品的狀況下,使用condition3沒有停利出場。

另外您提到您有print,但腳本中小幫手沒有看到print。

KiddingChen 發文於   2022/03/09

商品是台指期

print我拿掉了,當初print是包在這裡面,如果condition3這行程式碼有觸發的話,就會有日期時間的紀錄,而print出來是有觸發的,可是實際下單就是無法觸發

if position<0 then begin
    if condition1 then setposition(0,market)
    else if condition3 then begin
    setposition(0,market,label:="ATR空平倉");
    print(date,time);
    end;
end;

XQ小幫手 發文於   2022/03/10

Hello KiddingChen,

 

小幫手這邊將 atr_stop_profit 函數寫在交易腳本中並將相關數值print出,目前看起來是沒有問題。

實際測試也會觸發。

細節您可以參考小幫手附上的交易中心匯出檔和執行紀錄。

建議您也可以嘗試將相關數值 (像是收盤價和停損點) print出來看運算是否有問題。

另外若同時有多個 SetPosition 符合的話,會執行第一個觸發的SetPosition,換句話說,若condition1和condition3同時符合的話,會優先執行 setposition(pst,market) 而不是停損。

如果還是有問題的話,需要麻煩您提供 自動交易中心匯出檔 以及 XQ Log 讓小幫手這邊實際測試。

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

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

感謝。

附加文件

KiddingChen 發文於   2022/03/11

還是是因為filledAvgPrice的關係?因為我同時有幾支策略在跑

XQ小幫手 發文於   2022/03/15

Hello KiddingChen,

 

如同 filled 和 position ,啟動後策略的 filledavgprice 不會受其他策略或手動交易的影響。

小幫手實際測試過也是會彼此獨立。

發表回覆
Close