請問自動交易問題

  •   478 
  • 最後發表   Tim0511  2022 九月 14
Tim0511 發文於   2022/08/26

我想寫一個自動交易腳本

請問如何在五分k的頻率中,

引用一分k頻率的開高低收值?

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

五分頻率抓一分頻率可以用getfield來指定頻率,舉例要抓前3分鐘收盤價就可以用getfield("close","1")[3],特別要注意的是已完成的K棒和未完成的K棒都要從最新的時間往前算3分鐘。

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

Hello Tim0511,

 

小幫手補充,XQ的時間是以Bar開始的時間作註記。

所以5分鐘頻率 090000 代表著 09:00 ~ 09:05 這段時間的資料。

與這根Bar相對應的1分鐘Bar會是 090000, 090100, 090200, 090300, 090400。

其中如果在5分鐘Bar完成後執行的話,getfield("close","1") 取得的會是 090400 這根Bar的資訊。

若是在 09:03:20 的時候執行的話 (逐筆洗價),getfield("close","1") 取得的會是 090300 這根Bar的資訊。

另外,所有頻率的當期close都會是相同的,因為都會是最新一筆成交價。

 

您可以搭配使用 print 函數,將1分鐘對應的時間日期一併print出來,會比較容易理解XQ運作的方式。

Tim0511 發文於   2022/09/04

不好意思,我寫出來的結果不是我要的,可能我還不太了解。

假設A指標是運用在1分頻率中,B指標是運用在5分頻率中

我是要在B指標中去取得A指標的值。

Tim0511 發文於   2022/09/04

所有頻率的當期close都會是相同的,因為都會是最新一筆成交價。

在1分的頻率中要抓5分頻率的開高收低,

其中收盤的部分假設

Close5in=getfield("close","5")

但是我如何抓取前一根5分k的收盤價?

Close5min[1],出來的還是1分鐘K棒的前一根收盤價。

因為我的條件會用到5分K的close>close[1]

musashi 發文於   2022/09/04

getfield("close","5")[1] 就可以抓前一根五分K

Tim0511 發文於   2022/09/07

但是在一分鐘的頻率中,是一分鐘跑一次

getfield("close","5")[1]的值是每分鐘在變動

這樣在1分鍾計算出來的訊號就跟5分鍾計算出來的訊號不一樣

iker 發文於   2022/09/07

...

Close5min[1],出來的還是1分鐘K棒的前一根收盤價。

...

 

感覺你遇到的情況跟我在 跨頻率布林通道計算問題 問的類似。

XS 這裡用了一個不好理解的方式去實作變數 [1] ,一般我們理解給一個變數塞值的時候,就會預期那個變數控制的內容是不變的。但實際上 XS 的變數內容有跨頻率的問題,所以當你想要針對變數取前一個值,實際上你是用當前頻率去取值,導致使用者很容易誤以為這個方式是直接操控指定頻率的值。

以你的舉例 Close5min = GetField("close", "5") 來說,你預期 Close5min[1] 會是 GetField("close", "5") [1],但實際上 XS 在跑的時候你是用一分K跑這個腳本,所以 Close5min[1] 實際是去拿前1分K的時候 GetField("close", "5") 是多少,並不是你預期的 GetField("close", "5") [1]

btw 就算理解了這點,我也遇到跟你相同的問題且沒有成功解決。


當時嘗試用15分或30分K頻率的布林通道上下緣當成進出場點,但實際腳本想用1分或5分K頻率去判斷是否形成黃金或死亡交叉,卻怎樣都無法在1分或5分K取到預期的布林通道上下緣數值,上下緣數值怎麼取都有偏移量,而且隨著時間越長,偏移越大。拉長 setBarBack、setTotalBar 的區間也沒有

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

Hello Tim0511,

 

變數是跟著執行頻率在動。

如果執行在1分鐘頻率上:

getfield("close","5")[1] 會是前一跟5分鐘Bar的收盤價。

 

value1 = getfield("close","5");

value1[1] 會是前一跟1分鐘Bar那時所取到的5分鐘Bar收盤價。

所以舉例來說,如果您要計算5分頻率的10MA的話,那麼就會是 average(getfield("Close", "5"), 10)。

這樣就是抓最近10根5分鐘Bar來計算平均。

 

value1 = getfield("Close", "5");

average(value1, 10) 則會是最近10根1分鐘Bar value1 的平均。

 

 

Hello iker,

 

小幫手不知道您是怎麼作的,不過布林通道跨頻率可以這樣寫:

BollingerBand(getfield("Close", "30"),20,2)

這樣用在1分鐘上就會計算出30分鐘頻率的布林通道。

附圖裡可以看到相同的時間點,30分鐘頻率和1分鐘頻率計算出的值是會相同的。

 

感謝 musashi 和 iker 的熱心回覆。

附加文件

發表回覆
Close