交易腳本中,跨商品計算"加權指數"的EMA指數均量時,如何取得更久的歷史資料

  •   56 
  • 最後發表   勞倫斯  4 週前
勞倫斯 發文於   2025/12/23

您好:

交易腳本的執行商品是台指期,但是進出訊號想要參考跨商品的 "大盤" 成交量的變化,也就是量增價漲,量縮價跌的概念,來做當日台指尾盤13:40~13:44要作多或作空的依據。因此,想要計算"大盤" 的指數均量,也就是EMA均量。雖然SetTotalBar可以設定讀取的K棒數(假設500筆),但這是以交易的商品"台指期"為主,若要從第500筆開始計算EMA(GetSymbolField("TSE.TW", "成交量", "D"), 50),請問語法怎麼寫呢?我嘗試以下的語法,但僅在執行策略時,不開啟帳號交易時,才可以計算正確,

var: dayVolume(0), T_EMA(0), i(0);

dayVolume = GetSymbolField("TSE.TW", "成交金額", "D")/100000000; 

T_EMA = dayVolume[500];;

// 從第499日一路算到最新第1日

For i = 499 downto 0 

Begin

    T_EMA = (dayVolume[i] - T_EMA)/50 + (T_EMA);

 

End;

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/12/23

setTotalBar(500);
var: T_EMA(0);
if currentTime>=134000 and currentTime<=134500 then
    begin
        T_EMA=EMA(GetSymbolField("TSE.TW", "成交量", "D"),50);
    end;

勞倫斯 發文於   2025/12/23

感謝許教授回覆:

我的原文中有提到,setTotalBar(500),是僅針對要交易所選擇執行的商品"台指期"為主,如果是要計算的是台指期的商品 T_EMA=EMA(GetSymbolField("FITX*1.TF", "成交量", "D"),50);程式執行時會從第500根起算~目前最新的台指期EMA成交均量(參數50),但是我想要參考的是跨商品的大盤"TSE.TW"的成交量,雖然有設setTotalBar(500),但是在實際計算時,還是會從第前50根K棒的成交量起算,如附圖(此乃有開啟模擬交易帳號或實際帳號,或是選擇指定庫存商品執行時),若交易帳號停用且執行商品未指定庫存,大盤的指數均量是可以從第前500根起算的

勞倫斯 發文於   2025/12/23
虎科大許教授 發文於   2025/12/23

若你使用日頻率,雖然執行商品是台指期,但跨商品抓大盤指數的數據,仍然有500筆。

setTotalBar(500);
var: T_EMA(0);
T_EMA=EMA(GetSymbolField("TSE.TW", "成交量", "D"),50);
if currentTime>=134000 and currentTime<=134500 then
    begin
        if GetSymbolField("TSE.TW", "成交量", "D") cross over T_EMA then alert("大盤量黃金交叉");
    end;
print(date, "大盤量",GetSymbolField("TSE.TW", "成交量", "D"),"EMA",T_EMA);

XS小編 發文於   2025/12/31

Hello 勞倫斯,

 

小編補充:

 

1. 變數的執行頻率是跟著執行商品的頻率。

所以若你的腳本運作在1分鐘上。

dayVolume = GetSymbolField("TSE.TW", "成交金額", "D")/100000000;

dayVolume[1] 會是前一分鐘的當日成交量,而非前一日的成交量。

 

2.SetTotalBar 的執行範圍是依據執行商品,而非副商品。

所以若副商品需要運算更長的區間,那麼執行商品也需要一併運算。

若是要設定取得的資料長度,則可以用 SetBackBar 來指定所需長度 (主商品副商品都會影響)。

發表回覆
Close