計算近20根紅k棒的數值

  •   59 
  • 最後發表   gto  2 週前
gto 發文於   2024/11/26

想要計算近20根紅k棒的開盤價-最低價的平均, 不過跑出來的數值都為零

VAR :diff_sum(0);    // 儲存差值總和
VAR :count(0);       // 計算紅 K 棒的數量
VAR :i(0);

while count < 20 begin

IF close[i] > open[i] then
    diff_sum = diff_sum +(open[i]- low[i]);
    count = count +1;

    End;

    i=i+1;


value1=diff_sum/count;

plot1(value1);
    

 

 

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

Var: diff_sum(0);    // 儲存差值總和
Var: count(0);       // 計算紅 K 棒的數量
Var: i(0);
if isLastBar then
    begin
        while count < 20
            begin
                IF close[i] > open[i] then
                    begin
                        diff_sum = diff_sum +(open[i]- low[i]);
                        count = count +1;
                    end;
                i=i+1;
            End;        
        value1=diff_sum/count;
        plot1(value1);
    end;

gto 發文於   2024/11/27

謝謝虎科大許教授, 我再試試看, 我是要每根K棒下, 往前20根紅K的開盤價-最低價平均

XS小編 發文於   2024/11/29

Hello gto,

 

小編補充,由於您有使用while函數,建議確保向前有20根紅K在執行,否則可能遇到無限迴圈的狀況。

舉例來說,while 前加上:

var: _redK(0);

if close > open then _redK += 1;

if _redK <=20 then return;

這樣就可以避免在紅K數量不夠時運算。

其他部分可以參考 虎科大許教授 的範例。

不希望只有最後一根的話就不要使用 isLastBar 當作條件。

gto 發文於   2024/11/29

hi XS小編

 

Var: diff_sum(0);    // 儲存差值總和
Var: count(0);       // 計算紅 K 棒的數量
Var: i(0);
var: _redK(0);

if close > open then _redK += 1;
if _redK <=20 then return;   

        while count < 20

            begin

                IF close[i] > open[i] then

                    begin

                        diff_sum = diff_sum +(open[i]- low[i]);

                        count = count +1;

                    end;

                i=i+1;

            End;        

        value1=diff_sum/count;

        plot1(value1);

 

我試著移除isLastBar 資料顯示不是當前往前數20根紅K棒的資料, 虎科大許教授才是正確的資料

我希望的是在每根K棒下, 往前計算20根紅K資料, 如圖

 

gto 發文於   2024/11/30

謝謝虎科大許教授/XS小編,

   程式碼已經編輯成功

Var: diff_sum(0);    // 儲存差值總和
Var: count(0);       // 計算紅 K 棒的數量
Var: i(0);

// 先判斷是否有至少 20 根紅 K 棒
i = 0;  // 從當前的 K 棒開始
while count < 20 and i < CurrentBar begin
    if close[i] > open[i] then  // 判斷是否為紅 K 棒
        count = count + 1;  // 累計紅 K 棒的數量
    i = i + 1;  // 移動到前一根 K 棒
end;  // 結束 'while' 迴圈

// 如果找到的紅 K 棒數量小於 20,則不進行後續計算,直接設為 0
if count < 20 then
    value1 = 0
else
begin
    // 計算過去 20 根紅 K 棒的差值
    diff_sum = 0;  // 重置差值總和
    count = 0;     // 重置紅 K 棒數量
    i = 0;         // 從當前 K 棒開始
    while count < 20 and i < CurrentBar begin
        if close[i] > open[i] then  // 判斷是否為紅 K 棒
        begin
            diff_sum = diff_sum + (open[i] - low[i]);  // 計算差值並累加
            count = count + 1;  // 累計紅 K 棒的數量
        end;
        i = i + 1;  // 移動到前一根 K 棒
    end;  // 結束 'while' 迴圈

    // 計算平均差值並繪製
    value1 = diff_sum / count;
end;

plot1(value1);  // 繪製平均差值

XS小編 發文於   2024/12/03

Hello gto,

 

小編補充,您後來的腳本不需要用兩個while迴圈。

只需要後面那個while迴圈運算完後判斷count決定要用哪個value1即可,不需要第一個迴圈。

舉例來說:

 

Var: diff_sum(0);    // 儲存差值總和

Var: count(0);       // 計算紅 K 棒的數量

Var: i(0);

 

diff_sum = 0;  // 重置差值總和

count = 0;     // 重置紅 K 棒數量

i = 0;         // 從當前 K 棒開始

while count < 20 and i < CurrentBar begin

    if close[i] > open[i] then  // 判斷是否為紅 K 棒

    begin

        diff_sum = diff_sum + (open[i] - low[i]);  // 計算差值並累加

        count = count + 1;  // 累計紅 K 棒的數量

    end;

    i = i + 1;  // 移動到前一根 K 棒

end;  // 結束 'while' 迴圈

 

// 計算平均差值並繪製

if count < 20 then value1 = 0 else value1 = diff_sum / count;

plot1(value1);

gto 發文於   2024/12/06

hi XS小編,

   好的!謝謝您

發表回覆
Close