自動交易誤判腳本,導致連續錯誤的進場

  •   436 
  • 最後發表   Go198  2022 四月 19
Go198 發文於   2022/04/11

9:53跟10:04都正常進出場

但是10:45以後

沒達到條件就連續觸發
進場

 

腳本進場
  if close[1] >= open[1] then condition1 = true;//紅K

第57行
  if condition1 and condition2 and condition3 and condition7 then begin setposition(s_d,market);

condition1=false(事實)
但是LOG顯示
condition1=true(錯誤)


誤判導致連續進場與出場
總共以下這麼多筆
圖一:

圖二

圖三
圖四
圖五
圖六
太多筆沒辦法上傳了

然後11:40又發生

還有很麻煩的是
回測根本也不準
無法還原當日的情況

自動交易出了什麼問題?

已發送郵件到
XQservice@xq.com.tw
並附上LOG

請撥打電話回覆
用電話講比較快
電話mail裡面有
FB也傳送電話過去了
謝謝!

排序方式: 標準 | 最新
風揚 發文於   2022/04/11

這個問題也嚴重....

我是停損出場 ..但是馬上又被系統莫名的進場...結果漲停..被關了..

XQ小幫手 發文於   2022/04/11

Hello Go198,

 

需注意您以下這種寫法:

if close[1] >= open[1] then condition1 = true;//紅K

只要有一次條件成立後,condition1就會一直是True。

用中文來解釋的話就是 當前期收盤價大於前期開盤價時,condition1為True。

但您沒有撰寫腳本要條件不成立時為False。

 

所以正確的寫法應該為:

if close[1] >= open[1] then condition1 = true else condition1 = False;  //後半段為不成立時為False

或是可以這樣寫:

condition1 = close[1] >= open[1];  //成立時為True,不成立False

 

您實際print出來或是畫在指標上就可以看出差別。

如果修改後還是有問題的話,麻煩您提供 交易中心匯出檔勾選(包含)交易腳本、問題的截圖 以及 XQ Log 來檢驗。

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

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

感謝。

 

 

Hello 風揚,

 

需要麻煩您提供相關資訊,讓小幫手來判斷問題為何。

感謝。

Go198 發文於   2022/04/11

但您沒有撰寫腳本要條件不成立時為False。

HI 小幫手
我在第6行有寫
condition1 = false;
第12行寫
if close[1] >= open[1] then condition1 = true;

這樣還會有一次true
以後就一直true下去嗎?

我看LOG的condition1會變化
也比對過幾次
只要前一根是紅K或黑K
都會正常變化


condition1 = close[1] >= open[1];  //成立時為True,不成立False

這種寫法需要一開始就寫下面這一行
condition1 = false;
嗎?

XQ小幫手 發文於   2022/04/11

Hello Go198,

 

如果您有寫 condition1 = False,那麼應該不會發生這種事。(每次腳本運算時都會重置condition1)

需要麻煩您提供 自動交易匯出檔勾選(包含)交易腳本 以及 執行紀錄 搭配您寄來的 Log 檢驗實際問題原因。

因為就小幫手的經驗來說,如果是腳本運算值出錯的話,問題大多是在腳本寫法而不是系統運作。

 

另外 condition1 = close[1] >= open[1]; 不需要另外加 condition1 = False。

所以您可以看到小幫手的範例裡大多使用這種寫法。

Go198 發文於   2022/04/13

因為就小幫手的經驗來說,如果是腳本運算值出錯的話,問題大多是在腳本寫法而不是系統運作。
另外 condition1 = close[1] >= open[1]; 不需要另外加 condition1 = False。
所以您可以看到小幫手的範例裡大多使用這種寫法。


您好
以下是另外一題


我有乖乖聽話
按照您的寫法
可是還是發生系統運作錯誤

28分K還沒收


"前一根的量已經固定了" 
"前一根的量已經固定了" 
"前一根的量已經固定了"


但是會由false轉true

Value1 = Average(Volume,5);
condition2 = volume[1] < value1;//v[1] < MA5




蕎伊斯 發文於   2022/04/13

你的Value1 也需要考量往前位移一根K棒,才會是固定的數據喔
原本的寫法會在逐筆中,一直洗價浮動計算

試試看以下的寫法
Value1 = Average(Volume[1],5);
condition2 = volume[1] < value1;//v[1] < MA5



Go198 發文於   2022/04/13

謝謝蕎伊斯回覆第二題

 

先按照您的方式,試試觀察看看.

 

那請問第一題您有什麼想法嗎?

因為已經按照小幫手的建議

condition1 = close[1] >= open[1];//紅K

直接這樣寫了

但是今天(4/13)又發生黑K觸發

 

謝謝

蕎伊斯 發文於   2022/04/13

你的定義是進場時的前一根K棒必須是紅K嗎?

那直接這樣改寫,比較不會出錯

第57行
  if C[1]>=O[1] and condition2 and condition3 and condition7 then
     begin
      
setposition(s_d,market);
       

        end;

Go198 發文於   2022/04/13

謝謝蕎伊斯

你的定義是進場時的前一根K棒必須是紅K嗎?

是必須

 

那直接這樣改寫,比較不會出錯

 

第57行

  if C[1]>=O[1] and condition2 and condition3 and condition7 then

     begin

      setposition(s_d,market);
end;



謝謝蕎伊斯回覆


再問一個延伸的問題

若把condition全都廢掉

程式寫成(假設的)

if C[1]>=O[1] and v>=v[2] and H-L>=0 and L[1]+H[2]<O[1]-H then

     begin .........
這樣會有缺點嗎?
如果沒有
為了交易正確性
把condition通通廢掉了

有盲點嗎?


 

XQ小幫手 發文於   2022/04/14

Hello Go198,

 

小幫手收到您寄的兩封mail,裡面的腳本無法編譯 (看起來像是部分腳本),也沒有使用condition1。

沒辦法看出您討論區的問題原因。

還是您郵件中的腳本是要詢問其他問題?

 

關於position變化的時間點,是在腳本完整執行完畢時。

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

執行完 SetPosition,position並不會馬上改變,而是要腳本運作完畢才會變化。

 

至於您第二封郵件中腳本,邏輯上來看應該是不會發生要出場但卻被取消委託的狀況。

 

condition1 = close[1] >= open[1];

這種寫法如果錯的話,那麼 C[1]>=O[1] 應該也會錯。

因為兩者代表的是相同的意義。

需要請您提供 交易中心匯出檔勾選(包含)交易腳本 讓小幫手判斷問題原因(看是設定還是腳本的問題)。

至於成交量部份的問題,理由就如同 蕎伊斯 所說的一樣。

是有包含運算當根成交量的資訊。

 

感謝 蕎伊斯 的熱心回覆。

顯示更多回應 發表回覆
Close