市場寬度

  •   16 
  • 最後發表   2315712dale  41 分鐘前
2315712dale 發文於   2025/12/11

/// 腳本類型:指標腳本

// 腳本名稱:Group統計大於均線百分比

 




使用AI幫忙編程式最後能跑出來的資料,好像會跟著股票的數量呈反比。

如果是電子全部下面指標可以顯示3個月,上市普通股全部只有一個月

這種問題不知道是AI程式的邏輯問題?  還是是資料讀取有上限?

想請問要怎麼處理呢

附加文件

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

沒看到程式碼,很難得知問題出在哪裡。照理說,使用日資料,不應該只得到這麼少的指標數據。

2315712dale 發文於   2025/12/14

沒看到程式碼,很難得知問題出在哪裡。照理說,使用日資料,不應該只得到這麼少的指標數據。




這個是請AI修的 麻煩許大幫我看一下問題出在哪?
我把程式碼放截圖 直接貼都被擋

附加文件

虎科大許教授 發文於   2025/12/14

你的程式碼有問題。你把原始碼貼上來,我來修改看看。

2315712dale 發文於   2025/12/14

/// 腳本類型:指標腳本

// 腳本名稱:Group統計大於均線百分比

 

// ----------------------------------------------------------------------------

// 0. 強制擴大歷史資料引用範圍 (幫助老股回溯)

// ----------------------------------------------------------------------------

// 提醒:指標回溯長度仍受限於群組內上市時間最短的股票,但此設定能盡量回溯。

SetTotalBar(500); 

 

// ----------------------------------------------------------------------------

// 1. 設定參數與變數宣告 (請遵守 XS 規範:var 只含名稱與初始值)

// ----------------------------------------------------------------------------

// 檢查執行頻率:此腳本只支援日K或還原日K

if BarFreq <> "D" and BarFreq <> "AD" then

    raiseRunTimeError("此腳本只支援日K或還原日K");

 

input: _TargetGroup(group, "指定群組"); // 指定欲統計的股票群組名稱 (例如: 上市普通股)

input: _MALength(60, "均線期數");       // 將 MA 期數的參數保留,並在迴圈內使用

 

var: _Idx(0);       // 遍歷股票清單用的索引變數

var: _Count(0);     // 統計符合「站上均線」條件的股票家數

var: _TotalSize(0); // 群組內的總股票檔數

var: _Percent(0);   // 符合條件家數佔總家數的百分比

 

// ----------------------------------- 計算變數 -----------------------------------

var: _PriceSum(0);     // 計算 MA 時的收盤價總和

var: _MAValue(0);      // 計算出的 MA 數值

var: _CurrentClose(0); // 取得前一日收盤價 (判斷基準)

var: _j(0);            // 遍歷 MA 期數用的索引變數

var: _HistoryClose(0); // 取得歷史收盤價

var: _ValidBarCount(0); // 有效 K 棒數量

 

// ----------------------------------------------------------------------------

// 2. 執行運算:統計符合站上前日均線條件的家數

2315712dale 發文於   2025/12/14

// ----------------------------------------------------------------------------

 

_Count = 0;       // 將計數器歸零

_TotalSize = GroupSize(_TargetGroup);

_Percent = 0;     // 將百分比結果初始化

 

// 判斷條件:確保群組內有股票 //

if _TotalSize > 0 then

begin

    // 遍歷群組中的每一檔股票,索引從 1 到總檔數 //

    for _Idx = 1 to _TotalSize

    begin

        // --- 核心邏輯:檢查歷史資料是否足夠,不足則跳過所有計算 ---

 

        // ?? 判斷:檢查該股票在 _MALength 期前是否有收盤價

        // 只有當 GetSymbolField 能夠取到 _MALength 期的資料時,我們才執行後續的計算區塊。

        if GetSymbolField(_TargetGroup[_Idx], "Close", "D")[_MALength] > 0 then

        begin

            // 該股票有足夠的歷史資料,可以計算 MA

 

            // 1. 初始化總和與有效K棒計數

            _PriceSum = 0;

            _ValidBarCount = 0; 

            

            // 2. 遍歷 MA 期數,取得該股票過去 N 日的收盤價總和

            for _j = 1 to _MALength

            begin

                // 取得 N 期前的收盤價

                _HistoryClose = GetSymbolField(_TargetGroup[_Idx], "Close", "D")[_j];

                

                // 只將有效的 (收盤價 > 0) 資料納入計算

                if _HistoryClose > 0 then

                begin

                    _PriceSum = _PriceSum + _HistoryClose;

                    _ValidBarCount = _ValidBarCount + 1;

                end;

            end;

            

            // 3. 計算 MA 數值

            if _ValidBarCount > 0 then

                _MAValue = _PriceSum / _ValidBarCount 

            else

                _MAValue = 0; 

            

            // 4. 取得判斷基準:前一日收盤價 (Close[1])

            _CurrentClose = GetSymbolField(_TargetGroup[_Idx], "Close", "D")[1];

            

            // 5. 判斷是否站上均線

            if _CurrentClose > 0 and _MAValue > 0 and _CurrentClose > _MAValue then

                _Count = _Count + 1;

                

        end; // End of if GetSymbolField... > 0 (資料足夠的股票才進行計算)

        

    end; // End of for _Idx

 

    // 計算百分比:符合條件家數(_Count) / 總家數(_TotalSize) * 100 //

    _Percent = (_Count / _TotalSize) * 100; // 計算結果為百分比

end;

// ----------------------------------------------------------------------------

// 3. 繪製結果

// ----------------------------------------------------------------------------

 

// 繪製結果:Plot1 繪製計算出的百分比序列 //

Plot1(_Percent, "大於均線百分比");

發表回覆
Close