想請問該如何撰寫這個台指期出場腳本

  •   778 
  • 最後發表   歐陽成禮  2021 六月 30
歐陽成禮 發文於   2021/06/23

想請問小幫手,

我想寫一個台指期以1分K為頻率的出場腳本,腳本條件如下:

1. 盤中任何時段出現一分鐘的黑K,該黑K收盤跌破最近的一根一分鐘紅K最低價,且該紅K成交量大於2000口(close>open and volume>2000)

抱歉我對這個想法一點寫出來的能力也沒有,因為基礎語法都是以符合條件的K棒設為0,以此回推最近的一根為1....以此推下去,但要如何把之前任何時間可能出現條件而無法定義其期數的K棒來決定其期數我真是不知道該怎麼做,所以僅能提供想法還請小幫手可否幫忙寫出腳本,一定會對我語法功力受益良多,先謝過

 

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

Hello 歐陽成禮,

 

您可以使用 while迴圈去找最接近的紅K位置即可。

附上交易腳本供您參考。

附加文件

歐陽成禮 發文於   2021/06/24

抱歉小幫手,

您給的附加文件無法成功匯入,因為會顯示" 遇到不適當的引數"耶,再麻煩幫我看看如何解決,感謝~

 

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

Hello 歐陽成禮,

 

腳本內容如下供您參考:

if position = 0 and filled = 0 then setposition(1, market);

if position > 0 and filled > 0 and open > close then begin

// 有部位且收黑

    value1 = 1;

    while open[value1] >= close[value1] begin

    //用 while 迴圈找最近的紅棒位置

        value1 += 1;

        end;

 

    print(date, time, open, close, close[1], open[value1], close[value1], low[1]);

    if close[1] >= low[value1] and close < low[value1] and volume[value1] > 2000 then begin

    // 收盤低於紅棒最低點,且前一收盤大於等於紅棒最低點,且該紅棒成交量大於2000

        setposition(0, market);

        print("Out");

        end;

    end;

 

另外 遇到不適當的引數 需要麻煩您提供 XQ Log 來檢視問題原因。

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

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

感謝。

歐陽成禮 發文於   2021/06/25

小幫手您好,

我嘗試直接將您提供的語法貼在警示腳本裡,但編譯的時候出現"在「警示」腳本中無法使用「Position」"的錯誤描述,請問該怎麼解決呢? 但我發現您提供的語法可以直接做成一個可編譯ˋ的"交易"腳本,所以我想知道的是如果我要回測我的警示策略的績效並帶這個出場腳本,這個出場腳本是可以直接寫在警示腳本中嗎? 還是我該怎麼做可以回測帶有這個出場腳本的績效呢?

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

Hello 歐陽成禮,

 

警示腳本的話你可以修改為以下。

value1 = 1;

while open[value1] >= close[value1] begin

//用 while 迴圈找最近的紅棒位置

    value1 += 1;

    end;

 

print(date, time, open, close, close[1], open[value1], close[value1], low[1]);

if close[1] >= low[value1] and close < low[value1] and volume[value1] > 2000 then begin

// 收盤低於紅棒最低點,且前一收盤大於等於紅棒最低點,且該紅棒成交量大於2000

    ret = 1;

    print("Out");

    end;

同時附上警示腳本。

關於 遇到不適當的引數 小幫手確認過後,需要先請您升級到最新的版本 7.05.05 / 3.05.05 看是否還會發生相同的問題。

如果相同的狀況還是一再發生,需要麻煩您致電至客服專線請專人遠端服務,以利釐清問題的原因。

感謝。

 

另外小幫手建議您可以先去 XS自學 網頁裡參考關於不同腳本功能和XS語法的資訊。

附加文件

歐陽成禮 發文於   2021/06/25

小幫手您好,

我將我的條件修改為當盤中任何時段出現一分鐘的黑K並且該黑K成交量>2000口,且該黑K收盤低於最近的一根一分鐘紅K最低價,且該紅K成交量大於2000口就出場,並且依照您的語法指導後,我修改的警示腳本語法如下:

value1 = 1;

while open[value1] > close[value1] begin

//用 while 迴圈找最近的紅棒位置

    value1 += 1;

end;

 

print(date, time, open, close, close[1], open[value1], close[value1], low[1]);

if close < low[value1] and volume[value1] > 2000  and volume>2000 then begin

// 黑K且成交量>2000,並且該黑K收盤低於紅棒最低點,而該紅棒成交量大於2000

    ret = 1;

print("Out");

end;

而我直接回測近半年的結果分別跑出5/18, 5/12, 2/17, 1/21三天,但奇怪的是我一天天回溯檢查發現,居然會漏掉5/14(9:25紅&:9:30黑), 3/23(9:20紅&:9:41黑), 3/18( 9:45紅&:10:09黑), 3/8(10:00紅&10:22黑), 2/25(9:16紅&9:53黑), 1/6(9:25紅&9:30黑)共6天!

我想知道究竟是我改的語法哪裡有錯誤嗎? 為何可以漏掉6天應該出現訊號的情況呢??? 不好意思還麻煩您再幫我看一下,感恩~

 



XQ小幫手 發文於   2021/06/28

Hello 歐陽成禮,

 

您腳本修改並沒有錯,建議您可以將相關資訊print出來觀察。

print(date, time, open, close, close[1], date[value1], time[value1], open[value1], close[value1], low[1], volume);

5/14 9:30黑 對到的是 9:26紅

3/23 9:41黑 對到的是 9:39紅

3/18 10:09黑 對到的是 10:07紅

3/8 10:22黑 對到的是 10:21紅

2/25 9:53黑 對到的是 9:49紅

1/6 9:30黑 對到的是 9:29紅

感謝。

歐陽成禮 發文於   2021/06/28

Hello 歐陽成禮,

 

您腳本修改並沒有錯,建議您可以將相關資訊print出來觀察。

print(date, time, open, close, close[1], date[value1], time[value1], open[value1], close[value1], low[1], volume);

5/14 9:30黑 對到的是 9:26紅

3/23 9:41黑 對到的是 9:39紅

3/18 10:09黑 對到的是 10:07紅

3/8 10:22黑 對到的是 10:21紅

2/25 9:53黑 對到的是 9:49紅

1/6 9:30黑 對到的是 9:29紅

感謝。

 

小幫手您好,但我將此執行回測仍然只跑出我一開始說的5/18, 5/12, 2/17, 1/27, 1/12這幾天而已,但應該也符合的5/14, 3/23, 3/18, 3/8, 2/25, 1/6仍舊沒出現啊??????

XQ小幫手 發文於   2021/06/30

Hello 歐陽成禮,

 

腳本內含這行 print 以檢視是否有符合條件

print(date, time, close, volume, date[value1], time[value1], low[value1], volume[value1]);

條件為:

close < low[value1]        收盤小於前根紅的低點

volume[value1] > 2000      前根紅成交量大於2000

volume > 2000              當根成交量大於2000

 

以下是您提到的時間點印出的結果。

20210106.000000 93000.000000 15064.000000 4616.000000 20210106.000000 92900.000000 15094.000000 889.000000

15064 < 15094    O

889 > 2000       X

4616 > 2000      O

前根紅(2021/01/06 9:29)成交量大於2000不符合。

 

20210225.000000 95300.000000 16278.000000 2085.000000 20210225.000000 94900.000000 16339.000000 300.000000

16278 < 16339    O

300 > 2000       X

2085 > 2000      O

前根紅(2021/02/25 9:49)成交量大於2000不符合

 

20210308.000000 102200.000000 15934.000000 2797.000000 20210308.000000 102100.000000 15972.000000 501.000000 

15934 < 15972    O

501 > 2000       X

2797 > 2000      O

前根紅(2021/03/08 10:21)成交量大於2000不符合

 

20210318.000000 100900.000000 16319.000000 6943.000000 20210318.000000 100700.000000 16382.000000 155.000000 

16319 < 16382    O

155 > 2000       X

6943 > 2000      O

前根紅(2021/03/18 10:07)成交量大於2000不符合

 

20210323.000000 94100.000000 16206.000000 2175.000000 20210323.000000 93900.000000 16204.000000 532.000000 

16206 < 16204    X

532 > 2000       X

2175 > 2000      O

收盤小於前根紅(2021/03/23 9:39)的低點、前根紅成交量大於2000不符合

 

20210514.000000 93000.000000 15930.000000 2110.000000 20210514.000000 92600.000000 15976.000000 1317.000000 

15930 < 15976    O

1317 > 2000      X

2110 > 2000      O

前根紅(2021/05/14 9:26)成交量大於2000不符合

 

您可以實際與線圖比較。這幾個時間點皆不符合您所設的條件。

小幫手建議您,可以將資訊print出來會比較容易檢查問題原因。

如果您希望這幾個時間點要符合的話,您可以將 前根紅成交量大於2000 這條件拿掉,就可以將 2021/03/23 以外的時間點都掃出。

發表回覆
Close