自動交易系統的執行紀錄有辦顯示計算內容嗎?

  •   378 
  • 最後發表   奇怪的人  2021 十一月 25
奇怪的人 發文於   2021/11/22

以下列腳本為例

value3=average(close[1],20);

if position = 0 and close>close[1] then begin 
   setposition(1, market, label:="做多進場,");
   value11 = value3;
   end;
if position = 0 and close<close[1] then begin
   setposition(-1, market, label:="做空進場");
   value11 = value3;
   end;

//-----------出場-----------
if position > 0 and filled > 0 then begin 
    if close >= addspread(filledavgprice, (filledavgprice-value11)*1.5) then begin
        setposition(0, market, label:="獲利出場,");
        end 
    else if close <= addspread(filledavgprice, (value11-filledavgprice)) then begin
        setposition(0, market, label:="虧損出場");
        end ;

end else if Position < 0 and Filled < 0 then begin
        if close <= addspread(filledavgprice, (value11-filledavgprice)*-1.5) then begin
        setposition(0, market, label:="獲利出場");
        end 
    else if close >= addspread(filledavgprice, (value11-filledavgprice)*1) then begin
        setposition(0, market, label:="虧損出場");
        end;
end;

以這份多空進出場

出場是由建倉成本加減點數為基準

那麼如果我想要在建倉進場時就知道我這筆進場的停利停損的目標價

有辦法顯示在執行紀錄中嗎?

如同圖上

它可以顯示[做多進場]

那還可以同時顯示計算後的點數嗎?

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/11/23

Hello 奇怪的人,

 

就小幫手所知,您沒辦法透過 label:= 的方式顯示停利停損目標價在買進成交資訊裡。

不過您可以使用 print 函數來把相關資訊印出在執行紀錄。

舉例來說:

var: IntrabarPersist controller(0);

 

if controller = 0 and filled <> filled[1] and filled <> 0 then begin

    print(停利資訊, 停損資訊);

    controller = 1;

    end;

if filled = filled[1] then controller = 0;

這樣的話就會在成交後顯示一次停利停損資訊。

奇怪的人 發文於   2021/11/24

不好意思

再接著問別的問題

 

if barfreq <> "MIN" and barinterval <> 1 then raiseruntimeerror("請使用5分鐘頻率");
  value1=average(close,3);
  value2=average(close,6);
  value3=average(close,9);

  value4=average(close[1],3);
  value5=average(close[1],6);
  value6=average(close[1],9);
//-----------進場-----------
if time < 090300 then begin 
if position = 0 and value1>=value4 and value2>=value5 and value3>=value6 and close>open then begin 
   setposition(close/200, market, label:="做多進場,");
   end;
if position = 0 and value1<=value4 and value2<=value5 and value3<=value6 and close<open then begin
   setposition(-1*close/200, market, label:="做空進場");
   end;
  end;

//-----------出場-----------
if position > 0 and filled > 0 then begin 
    if close >= addspread(filledavgprice, 3) then begin
        setposition(0, addspread(filledavgprice, 3), label:="獲利出場,");
        end 
    else if close <= addspread(filledavgprice, -3) then begin
        setposition(0, market, label:="虧損出場");
        end ;

end else if Position < 0 and Filled < 0 then begin
        if close <= addspread(filledavgprice, -3) then begin
        setposition(0, addspread(filledavgprice, -3), label:="獲利出場");
        end 
    else if close >= addspread(filledavgprice, 3) then begin
        setposition(0, market, label:="虧損出場");
        end;
end;

以上是我的腳本以及執行自動交易的執行紀錄截圖

我是哪裡出了問題

怎麼會都是無效交易指令

如果需要提出LOG檔

是哪一個

我看不懂~~

 

 

-----------------------------------------------------------------------------------------

問題二

該次執行策略僅有一檔商品進出場

但再出場時不斷的掛單再刪單

直到完成交易

且每次掛單價格也都一樣

怎麼會這樣呢?

XQ小幫手 發文於   2021/11/25

Hello 奇怪的人,

 

之所以是無效的交易指令,是因為當setposition指定的部位為小數點時會直接捨去。

您進場的部位數是 close / 200,當close不到200時算出來都會是 0.X ,被捨去後您的部位會為0。

而您當下的部位數也是0,所以是無效的交易指令。

 

小幫手索取的都是整個Log資料夾。

您只要將整個資料夾壓縮提供就可以了。

 

關於問題二,小幫手猜測可能是因為當您停利出場丟出單子後 position = 0。

但下次洗價的時候又因為符合進場條件所以再度將position調整為1,因此導致單子被刪掉。

建議您可以將進場的部分也加上 filled = 0 的條件:

if position = 0 and filled = 0 and value1>=value4 and value2>=value5 and value3>=value6 and close>open then begin 

if position = 0 and filled = 0 value1<=value4 and value2<=value5 and value3<=value6 and close<open then begin

如果還是有問題的話,需要麻煩您提供 自動交易中心匯出檔勾選(包含)交易腳本 以及 XQ Log 來檢驗。

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

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

感謝。

 

發表回覆
Close