贏家選股 這兩個條件我寫不出來 回測都跟贏家選股不同

  •   6 
  • 最後發表   Hsyih  45 分鐘前
Hsyih 發文於   2026/08/12

 

{@type:filter}

// ============================================

// 腳本名稱(版本): 爆量巨幅_20MA大於60MA選股 (v1.0)

// 核心目的:

// 1. 20日均線 > 60日均線

// 2. 股價 > 20元

// 3. 當日振幅 > 前10日平均振幅的10倍

// 4. 前10日平均成交量 > 3000張

// 5. 當日成交量 > 前10日平均成交量的2倍

// 修正重點:

// 1. 振幅直接使用XQ選股欄位「振幅」

// 2. 10日基準皆使用昨日以前10個交易日,不讓今日異常值污染平均

// 3. 加入振幅與均量分母防呆

// 撰寫者: XQ程式機器人

// ============================================

 

SetTotalBar(70);

 

input:

 _ShortMALength(20),       // 短均線期數

 _LongMALength(60),        // 長均線期數

 _MinPrice(20),            // 最低股價,預設20元

 _AmplitudeLength(10),     // 振幅平均期數,預設前10日

 _AmplitudeMultiple(10),   // 振幅放大倍數,預設10倍

 _VolumeLength(10),        // 均量計算期數,預設前10日

 _MinAvgVolume(3000),      // 10日平均成交量最低門檻,單位張

 _VolumeMultiple(2);       // 今日成交量相對10日均量倍數

 

var:

 _ShortMA(0),              // 20日平均收盤價

 _LongMA(0),               // 60日平均收盤價

 _TodayAmplitude(0),       // 當日振幅(%)

 _AvgAmplitude10(0),       // 前10日平均振幅(%)

 _TodayVolume(0),          // 當日成交量(張)

 _AvgVolume10(0);          // 前10日平均成交量(張)

 

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

// 1. 計算20日與60日均線

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

_ShortMA = Average(GetField("收盤價", "D"), _ShortMALength);

_LongMA = Average(GetField("收盤價", "D"), _LongMALength);

 

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

// 2. 計算當日振幅與前10日平均振幅

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

// XQ「振幅」定義:

// (當期最高價 - 當期最低價) * 100 / 參考價

_TodayAmplitude = GetField("振幅", "D");

 

// 使用[1]從昨日開始計算,避免今日巨大振幅被納入自己的比較基準

_AvgAmplitude10 = Average(GetField("振幅", "D")[1], _AmplitudeLength);

 

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

// 3. 計算今日成交量與前10日平均成交量

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

_TodayVolume = GetField("成交量", "D");

 

// 同樣由昨日開始往前10日計算正常均量

_AvgVolume10 = Average(GetField("成交量", "D")[1], _VolumeLength);

 

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

// 4. 五項選股條件

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

// 條件1:20日均線高於60日均線

condition1 = _ShortMA > _LongMA;

 

// 條件2:目前股價大於20元

condition2 = GetField("收盤價", "D") > _MinPrice;

 

// 條件3:當日振幅大於前10日平均振幅10倍

condition3 = _AvgAmplitude10 > 0

 and _TodayAmplitude > _AvgAmplitude10 * _AmplitudeMultiple;

 

// 條件4:前10日平均成交量大於3000張

condition4 = _AvgVolume10 > _MinAvgVolume;

 

// 條件5:當日成交量大於前10日平均成交量2倍

condition5 = _AvgVolume10 > 0

 and _TodayVolume > _AvgVolume10 * _VolumeMultiple;

 

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

// 5. 全部條件成立才選出

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

if condition1

 and condition2

 and condition3

 and condition4

 and condition5 then

begin

 ret = 1;

end;

 

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

// 6. 輸出欄位,方便檢查選股結果

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

OutputField1(_ShortMA, "20日均線");

OutputField2(_LongMA, "60日均線");

OutputField3(_TodayAmplitude, "當日振幅%");

OutputField4(_AvgAmplitude10, "前10日平均振幅%");

OutputField5(_TodayAmplitude / _AvgAmplitude10, "振幅倍數");

OutputField6(_AvgVolume10, "前10日均量");

OutputField7(_TodayVolume, "當日成交量");

OutputField8(_TodayVolume / _AvgVolume10, "成交量倍數");

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

成交量大於10日均量的兩倍:

condition1=v>average(v, 10)*2;

當日振幅大於10日平均振幅的兩倍:

value1=range/getField("參考價"); //振幅

condition2=value1>average(value1, 10)*2;

Hsyih 發文於   2026/08/12

謝謝教授

當日振幅大於10日平均振幅的兩倍:

value1=range/getField("參考價"); //振幅

condition2=value1>average(value1, 10)*2;

但這個條件好像不太對,我在研究是不是振幅 變化率

發表回覆
Close