如何使用XS警示腳本撰寫 在價量累計圖中跌破大量成本 做出警示?
價量累計圖的公式:
等分 = (螢幕上最高 - 螢幕上最低) / 分價區間,
將量(成交量)累積在收盤價所在的區間。
在價量累計圖中跌破大量成本的示意圖,如下
撰寫程式碼簡述流程:
1. 寫出價量累計圖的程式碼,找出最大量的區間,
2. 當股價上往下穿越最大量的價格時,觸發警示。
說明關於螢幕上最高要如何使用XS撰寫:
因為公式有""螢幕上最高""的數值,
而XS沒有螢幕變動時,跟著變動的語法,
因此這裡使用幾根K棒來做替代,
例如下圖 鈊象(3293) 的價量累計圖的畫面,共100根K棒,
所以,螢幕上最高的數值 = 100根K棒最高的數值。
可以用GetBarOffset語法,抓出日期的相對K棒數。
撰寫程式碼詳細流程:
1. 輸入參數:K棒的根數 與 分價區間,方便之後可以在介面上直接調整參數。
2. 資料讀取範圍設為 K棒的根數 - 1 ,因為含當期的K棒數共100根,所以用不到第100根的資料。
3. 宣告一個陣列,紀錄各個分價區間的成交量用。
4. 設一個 If 判斷在今天的日期,才繼續執行程式碼,避免取最高價使用到之前的K棒資料。
5. 計算等分。
6. 調整陣列的元素數 = 幾個分價區間。
7. 設兩個 For 迴圈,記錄各個區間的分價量,此時完成價量累計圖。
8. 設一個 For 迴圈,判斷 當股價上往下穿越最大量的價格時,觸發警示。
QA:為什麼要設兩個For迴圈?
因為一個跑陣列的元素數,另外一個跑取得前幾期的收盤價,
然後判斷這些收盤價坐落於各區間,蒐集這些成交量,並用陣列儲存起來。
程式碼範例如下:
variable: i(0), B(0); input: Kbar(100), Period(10); settotalbar(Kbar - 1); array: Team[](0); // 先宣告一個array,紀錄分價量用。 if date = currentdate then begin value1 = (highest(High, Kbar) - lowest(Low, Kbar)) / Period; // 等分 = (螢幕上最高 - 螢幕上最低) / 分價區間 array_setmaxindex(Team, Period); // array的元素數,取決於分價區間。 for i = 1 to Period // 用迴圈的方式記錄各個區間的分價量。 for B = 0 to Kbar - 1 begin if close[B] >= lowest(Low, Kbar) + value1 * (i - 1) and close[B] < lowest(Low, Kbar) + value1 * i then Team[i] = Team[i] + volume[B]; end; for i = 1 to Period if Team[i] = HighestArray(Team, Period) and close crosses under lowest(Low, Kbar) + value1 * (i - 1) then ret = 1; end;
裡面的函數語法,Jack 就不說明了。
跑出來的數值,Jack 有用Print 語法匯出txt檔案,比對過後(比對上圖)是正確的。
Jack 總覺得有更好的寫法,
大家也可以多指教,謝謝。
以上,提供參考。
20 評論