計算出重複的值

  •   29 
  • 最後發表   麥叔  2 週前
麥叔 發文於   2025/11/04

// 計算1分K移動平均線

FastMA = Average(Close[1], 5);

SlowMA = Average(Close[1], 20);

// 計算MACD指標

MACD(WeightedClose[1],MACD_Fast,MACD_Slow,MACD_Signal,MACD_Diff,MACD_Dem,MACD_Osc);

// 判斷MA交叉條件

/CrossUp = FastMA cross over SlowMA;

CrossDown = FastMA cross under SlowMA;

然後每分鐘的第一個tick印出下列值

print("********", Filled, CrossUp, CrossDown, FastMA, SlowMA, MACD_Diff);

 

我發現,竟然有些時間資料重複,但是我對照看盤軟體,重複的資料是錯誤的,有沒有大神可以幫忙? 謝謝

我貼上幾筆重複的資料

截圖圖片

截圖圖片

09:37和09:38是對的

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

WeightedClose後面的[1]請刪除。

麥叔 發文於   2025/11/04

許教授,謝謝您的回答。WeightedClose原本沒有[1],但是算出來的值與看盤軟體的不同,加上後才會和看盤軟體相同。此外,FastMA與SlowMA似乎沒有往前進一筆資料,所以後一筆會和前一筆的資料才會一樣,這個有解法嗎?

麥叔 發文於   2025/11/04

經過實驗發現,只要整點後1秒再去做Average的動作,這個問題就解決了。看樣子,是在讀取的時候,資料還沒跟新,所以會讀到舊的,會有兩筆一樣的情況,等一秒後再去讀,就會讀到更新後的資料,這個似乎就沒問題了。請問許教授,這是解法嗎?

虎科大許教授 發文於   2025/11/04

看起來你的洗價模式是『非逐筆洗價』(每1分鐘洗價一次),則兩條移動平均線不應該加[1],WeightedClose也一樣不用加。

var: FastMA(0), SlowMA(0);
var: MACD_Diff(0), MACD_Dem(0), MACD_Osc(0);
var: CrossUp(False), CrossDown(false);
// 計算1分K移動平均線
FastMA = Average(Close, 5);
SlowMA = Average(Close, 20);
// 計算MACD指標
MACD(WeightedClose,12,26,9,MACD_Diff,MACD_Dem,MACD_Osc);
// 判斷MA交叉條件
CrossUp = FastMA cross over SlowMA;
CrossDown = FastMA cross under SlowMA;
//然後每分鐘的第一個tick印出下列值
print("********", Filled, CrossUp, CrossDown, FastMA, SlowMA, MACD_Diff);

麥叔 發文於   2025/11/04

抱歉,我沒說清楚,我是用逐筆洗價,如果不加[1],算出來的值真的和看盤程式差很多!

虎科大許教授 發文於   2025/11/04

若是逐筆洗價,希望在每根K的第一個Tick計算前一根K的技術指標數值,則你需要用變數控制,只有在每根K第一次洗價才計算。這時候計算均線數值當然要用[1],MACD的三個變數算出後,Print它們時,也需要加[1]。

麥叔 發文於   2025/11/05

許教授,比如說,1分K,9點5分30秒,去讀取Close,這時候的Close是目前進行中未結束的K棒,還是已經結束的K棒? 就如同看盤軟體,如果目前K棒沒有結束,K棒是變動的

虎科大許教授 發文於   2025/11/05

Close是未收K的即時成交價,Close[1]是前一根已收K的收盤價。

麥叔 發文於   2025/11/05

謝謝您的回答,這就是我要的。我需要已收K的資料來計算

發表回覆
Close