這是什麼原因?

  •   193 
  • 最後發表   tradeNew  2022 三月 08
tradeNew 發文於   2022/03/07

Question 1:

20220307 08:41:24.810 小型台指近月 執行失敗 原因:取FIMTXN*1.TF歷史資料發生錯誤, 目標頻率=5分鐘, 原始頻率=, IsAutoTrade=false

早上出現這個 這是什麼原因?? 讀取比數有設定為1500筆

頻率五分鐘 逐筆交易

第二次開就好了

 

Question2:

頻率五分K,請問如果9.00分買下第一筆,我再跑回測有看到  持有區間 , 請問在XQ程式裡面

有語法可以直接呼叫目前持有區間嗎?

例如9.00買,到10.00就是持有區間12,在五分K之下的條件

 

Question3:

關於變數這個設定:

假設我庫存本來就有兩張,也是依庫存

問題,在一開始啟動腳本時,我庫存有2,會進入段落1

我設定的OnePosition ,想要手動控制 利用 input去控制

但這樣寫完 OnePosition 還是不會等於  OnePrice 我輸入的價格 會變成 a條件 下的close價格

請問這要怎麼克服? 

會有這個寫法是因為,我有做移動停利,當我部位為2的時候,我第一張跟第二張的停利方式是不同的

如果程式關掉後再開,用filledAvgPrice  filledRecordCount..等等系列的都無法達成效果 因為無法計算每一張的成本

所以我想自己控制成本,而不用內建的 再請麻煩

input: OnePrice(0,"部位一(長波段):價格");

variable: intrabarpersist OnePosition(OnePrice); 

variable: intrabarpersist count(0);

if OnePrice <> 0 and count = 0 then begin

OnePosition = OnePrice;

count = 1;

end;

if (a條件) and Position = 0 then begin  --段落1

OnePosition = close; ---- 條件符合的話 等於收盤價

end;

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/03/08

Hello tradeNew,

 

1.感覺上像是交易策略啟動時讀取資料時發生錯誤,但是什麼原因需要麻煩您提供 XQ Log 來檢驗。

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

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

感謝。

 

2.就小幫手所知是沒有。

但您可以使用變數紀錄進場後經過了幾根Bar,就會相當於持有區間。

 

3.理論上來說,如果您設定為依庫存且有2張庫存的話,那麼應該是不會進入段落1的判斷式裡面,因為您的position不會是0。

另外如果您兩張庫存式不同價格的話,感覺上應該要有2個input來設定。

舉例來說,有兩張多方庫存,想要有個5%的停損的話:

input: price1(596), price2(579);

value1 = price1 * 0.95;    //price1的停損點

value2 = price2 * 0.95;    //price2的停損點

 

if position = 2 and close <= value1 then setposition(position - 1, market);   //價格跌到price1的停損點下時賣出1口

if position = 1 and close <= value2 then setposition(position - 1, market);   //價格跌到price2的停損點下時賣出1口

麻煩您更詳細的描述所需功能或遇到問題,感謝。

tradeNew 發文於   2022/03/08

關於問題2:

因為我是逐筆洗價,頻率5分K,逐筆洗價,那要怎要設變數呢? 謝謝

 

問題3:

程式在一開始跑洗腳本的時候,如果則依庫存,

但條件上 if (a條件) and position = 0 then begin //todo end; (A條件符合情況)

他還是會跑進去,如果有設定變數還是會被洗掉...

 

問題4:

在頻率五分K,逐筆洗價的時後

當A條件 與 B條件 符合時 進入A條件市價買進後,腳本還是會進去B條件 (因為此時position還未刷新 但實際上已經買了!)

但我A條件設定的停損值 跟 B條件是完全不同的

請再想幫手幫忙我要如何在逐筆洗價時候,進去A後 確定市價買入,不要再進B條件

if (a條件) and position =0 then begin

setposition(2,markt);

// EX:設定停損

end;

if (b條件) and position = 0 then begin

setposition(2,markt);

// EX:設定停損

end;

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

Hello tradeNew,

 

2.只要您的變數沒有加上intrabarpersist,其值就會是每過一根Bar加1。

舉例來說:

if filled = 0 then value1 = 0 else value1 += 1;

這樣的話當庫存為0時value1會等於0,當庫存不為0時每過一根Bar value1 就會增加1。

 

3.小幫手推測應該是因為在預讀筆數運算時position為0導致符合條件。

您可以使用 getinfo 多加上個要在K棒處理策略部位計算區間或是即時區間的條件。

舉例來說:

if (a條件) and getinfo("TradeMode") = 1 and position = 0 then begin

這樣應該就不會有問題。

 

4.當有複數個SetPosition同時成立時,只會執行第一個。

細節您可以參考 SetPosition 的說明。

如果您的條件A和條件B都同時符合的話,那麼自然兩者都會執行。

要避開這個狀況的話,最簡單的辦法就是條件B可以多加上一個 當條件A=False 的條件。

這樣在 A 和 B都符合的狀況下,就只會執行A。

須注意若A同時也加上了 條件B=False 的條件的話,當A和B都符合時就會變成兩者都不執行。

發表回覆
Close