如題,請問可以寫成highest(high[1],20)嗎?
同樣的,前20天均量可以寫成average(volume[1],20)嗎?
謝謝
如題,請問可以寫成highest(high[1],20)嗎?
同樣的,前20天均量可以寫成average(volume[1],20)嗎?
謝謝
前 20 天最高價: SimpleHighest(highD(1), 20)
前 20 天均量: Average(GetField("Volume","D")[1], 20)
試試看是不是你要的
Hello andyc0510,
如果您是使用日頻率的話,highest(high[1],20) 就會是前20天的最高價沒錯。
若是其他頻率,您可以使用 highest(getfield("High", "D")[1], 20)。
前20天均量也是相同,視您使用的頻率決定是 getfield("volume", "D") 或 volume 即可。
需注意 SimpleHighest(highD(1), 20) 取得的資訊會是錯誤的,您可以參考內建的 simplehighest 和 highd 函數就可以知道原因。
簡單來說,simplehighest 是用 [n] 的方式去比較過去n期的值,但 highd(1)[n] 並不會是 n 天前的日高價。
只有在日頻率的狀況下 SimpleHighest(highD(1), 20) 才會和 highest(getfield("High", "D")[1], 20) 相同。
Hi 小幫手
1. 假設我在 60分 頻率執行 SimpleHighest(highD(1), 20) 是不是例如腳本在 1/11 14:00 觸發,SimpleHighest(highD(1), 20) 取到的會是 1/10 18:00 當下的前一天 1/9 的日最高價?
2. 會用 SimpleHighest 的原因是參考您在 自動交易中 在分K頻率 如何抓取前三天 最低點? 文章裡提到的
另外,highest 與 lowest 等相關函數因使用節省效能的寫法,所以在跨頻率運算時有時會出錯,若發生時可以使用 simplehighest 和 simplelowest 作替代。
當時提到跨頻率可能會發生錯誤,建議用 SimpleHighest 替代,但看這次說明反而這樣取資訊是錯誤的,請問是什麼原因呢?
剛看 XSHelp 裡關於 SimpleHighest 的說明,那裏跳轉到 Highest 的連結失效了。而實際跑去看現在的 Highest 說明,寫的是
以最新一筆資料為基準點,輸入要計算的期數,然後計算過去期數的極大值。
每次呼叫SimpleHighest時,腳本都會依照指定期別,往前抓取期別內的每一筆資料來計算。
聽起來現在的 SimpleHighest 不適合跨頻率取值(或是說取到的值是我開頭说的那種值,並非以日頻率往前計算),如果 Highest 語法本身因為節省效能的寫法造成跨頻率計算可能出錯,那使用者要用什麼函式才能確保跨頻率取值是正確的呢?
還是能具體說明 Highest 的寫法在哪些情況會無法準確取值,或是乾脆在使用者用錯的時候直接拋出錯誤讓腳本 complie 不過並提示問題點,這樣使用者比較知道哪些場景不適用。
Hello iker,
有問題的是 highD 而不是simplehighest。
如果您有打開 simplehighest 的函數來看的話,可以得知其運算是用 數列[n] 的方式去比較n期的數量。
SimpleHighest(highD(1), 20) 這樣的狀況下,就會是比較20期的 highd(1)[n],而這代表的會是近20根Bar的 highd(1)。
如果近20根Bar都是同一天的話,那麼實際上比較到的數值就只會是前一天的高價。
而使用 getfield("High", "D") 的話因為 getfield("High", "D")[n] 會取到前n天的資料而不是前n期的資料,所以不會出錯。
您可以實際將 highd(1)[n] 在指標上畫出或print出來就可以理解。
簡單來說:
highd(1)[1] <= 上一根Bar 的 highd(1)
getfield("High", "D")[1] <= 前一日的 high
所以這種狀況下要使用 getfield("High", "D") 才會是正確的。
感謝說明
5 評論