20250510 本函數已有更新版
怎麼把純日盤(日K)上的均線畫到全日盤(300分K)上?當時是用Data2的方式解決,但很快覺得引用Data2實在不是很理想。
首先是圖表變得很難看,畫面上多了一塊沒什麼實際用途又礙眼的區域。再來是程式中多了of Data2,維護變得很麻煩,又容易弄錯。而且計算日均線的K棒,不就在全日盤上,為什麼不能直接拿來計算,還得繞到Data2?
我要做的,不就只是把全日盤中,13:45那根K棒的收盤價收集起來,然後就可以畫出均線了?哈哈,事情還真的不是XX想的那麼簡單。看起來應該很容易搞定,但畫出來的均線就是不對...。
前幾天,社團聊天室有同學提到Data2,才讓我又想起這擱置超過半年的難題。重啟測試,用以下程式讀取13:45那根K棒的收盤價,再丟到Average計算平均,但還是不行:
=====================================
IF Time=1345 Then Begin
Value1=Close;
End;
=====================================
試著修改均線週期,有重大發現:3MA以上都不對,2MA竟然可以!MultiCharts是抓到什麼?農曆7月看到XXX?
有興趣的同學,可以把Value1給Print出來看看。
知道關鍵原因,接下來就真的容易了。終於完成的自訂函數如下:
=====================================
//anAverageD-函數
//anAverageD-類別:時序
//anAverageD-計算全日盤中指定時間收盤價平均
//anAverageD-該指定時間必須為某根K棒結束時間(如:240分K可以計算1245收盤價平均,但300分K不行)
//anAverageD-Len:取近幾根K棒數(均線週期);XK:圖表使用週期,如300分K
//anAverageD-20230825
Inputs:PriceValue(numericseries),Len(numericsimple),XK(numericsimple);
IF Mod(5*60,XK)=0 Then Begin //計算日盤K棒數
Value1=IntPortion(5*60/XK);
END Else Begin
Value1=IntPortion(5*60/XK)+1;
End;
IF Mod(14*60,XK)=0 Then Begin //計算夜盤K棒數
Value2=IntPortion(14*60/XK);
END Else Begin
Value2=IntPortion(14*60/XK)+1;
End;
Value3=Value1+Value2;
Value4=0;
For Value91=0 To (Len-1)*Value3 Begin
IF Mod(Value91,Value3)=0 Then Begin
Value4=Value4+PriceValue[Value91]; //計算總和
End;
End;
anAverageD=Value4/Len; //計算平均並回傳
=====================================
指標可以這樣寫:
=====================================
Inputs:Len1(5),Len2(10),XK(300);
IF Time=1345 Then Begin
Value1=anAverageD(Close,Len1,XK);
Value2=anAverageD(Close,Len2,XK);
End;
Plot1(Value1,"AVG_1");
Plot2(Value2,"AVG_2");
=====================================
本函數最大目的,是不使用Data2、直接讀取全日盤中某根K棒數值來計算。加以修改,應不只能計算平均、畫出均線。
僅在我自己使用的週期測試,不保證也不負責程式正確性。有興趣的同學請自行取用,不必告知,也不必取得同意。但若有優化,希望能比照公布、分享。
本文內容僅供參考,無任何買賣建議,投資人應謹慎評估,風險自負。
