如何使用XS警示腳本撰寫 在價量累計圖中跌破大量成本 做出警示

  •   9.5K 
  • 最後發表   Jack  2025 七月 30
Jack 發文於   2016/09/10

如何使用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 總覺得有更好的寫法,

大家也可以多指教,謝謝。

 

以上,提供參考。

 

 

  • 按讚來自於
  • samkao26
  • CharlieBrown
  • ta17061
排序方式: 標準 | 最新
sushozin 發文於   2017/04/16

您好,請問想找出最近三日累積最大成交量的價,做為短期壓力的指標,該怎麼思考呢?謝謝Jack

散散惹人愛 發文於   2017/04/17

 請問 為何有些 數值 無法納入程式寫作

如JACK所言:

因為公式有""螢幕上最高""的數值,

而XS沒有螢幕變動時,跟著變動的語法 

 

所以意思是指,XS語法所無的語法,無法寫作?

先前有問過有個副指標關於布林%B 極限值(副圖) 也是同樣情形?

請問為何會出現可以顯示出來,但卻無法作為XS寫作?理論上不都是XQ的程式碼嗎?

請解惑 謝謝。 

 

 

Jack 發文於   2017/04/19

散散惹人愛 兄:

請問為何會出現可以顯示出來,但卻無法作為XS寫作?

因為技術分析線圖上,有些主圖&副圖指標,是工程人員寫Code鑲嵌進去的,

但是在XS這邊並沒有支援這部分的寫法(例如:螢幕上最高的數值),所以XS沒有辦法做到,

以上說明,供參。

MK 發文於   2017/08/31

請問Jack
可以改成選股嗎?

如:今日收盤價,高於或低於大量成本

Jack 發文於   2017/09/01

Mk 兄,

策略雷達一樣可以達成選股的效果,

不需要特別將此警示腳撰寫成選股腳本的樣式,至選股中心跑過,且選股中心執行此可能會出現執行太久而逾時的狀況,

故建議你的策略使用策略雷達去挑選股票即可,

以上,謝謝。

MK 發文於   2017/09/02

好的

感謝您的回覆

再請問一下

若要改成『突破大量成本』就做出警示

請問該修改哪個地方呢?

Jack 發文於   2017/09/06

Mk 兄

請問,突破大量成本,是指今日收盤量由下往上突破大量成本嗎?

MK 發文於   2017/09/06

20170906大立光

拿大立光(3008)來說明

如圖:2017/9/6,股價突破該畫面下的大量成本區

請問能否抓到這種狀況?

或是用選股方式,找出[在近一段時間內(30天或是3個月),股價突破該時段區間的大量成本區]

Jack 發文於   2017/09/07

我研究看看,

基本上類似我先前撰寫的範例程式碼,你可以修改看看,

嘗試編譯成功,並驗證沒問題,再通知你。

 

Jack 發文於   2017/09/07

Mk 兄,

我區間一樣設10個,期間一樣設100,以台積電為例

 

用以下警示程式碼範例,表示當今日股價,突破大量成本區間(突破大量區間範圍最低價或最高價)時,觸發警示訊號,

請試試看,是不是你想要的,謝謝。

//股價突破大量成本區
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 over lowest(Low, Kbar) + value1 * (i - 1) or close crosses over lowest(Low, Kbar) + value1 * i) then ret = 1;

    print(date,currenttime,Team[1],Team[2],Team[3],Team[4],Team[5],Team[6],Team[7],Team[8],Team[9],Team[10]);
    print("突破大量區間範圍最低價",currenttime,HighestArray(Team, 9),lowest(Low, 100) + value1 * (9 - 1)); //  注意數字9可能會因為大量區間不同而異動
    print("突破大量區間範圍最高價",currenttime,HighestArray(Team, 9),lowest(Low, 100) + value1 * 10);      //
end;

 

顯示更多回應 發表回覆
Close