(選股)請問 100天內第1次收盤創100天內新高的股票

  •   90 
  • 最後發表   發仔  2025 十一月 02
發仔 發文於   2025/09/25

參考了這篇

https://www.xq.com.tw/xstrader/%E5%89%B5%E6%96%B0%E9%AB%98%E8%82%A1%E8%83%BD%E4%B8%8D%E8%83%BD%E9%80%86%E5%8B%A2%E4%B8%8A%E6%BC%B2%EF%BC%9F/

修改了一下

變成100天以來第1次收盤 創100天內新高的股票

語法如下:

condition1=c cross over highest(h[1],100);

 

if condition1

and countif(condition1,100)=1

then ret=1;

======

發現有些選出來的股票並不符合這個第1次的條件

舉例:

2025/8/25 選出 2329

2025/6/4 也選出 2329

從K線圖來看

6/4 的2329有符合

但8/25的2329就沒有符合第1次創新高這個條件, 因為6/4已經創新高了, 而6/4就在8/25的100天內!

 

紫色框框為8/25的100天內

1.我想了解這樣的語法哪裡出了問題?

2.要如何改寫才能寫出符合==>第1次創100天新高的股票 ?  如果用軟體選股內建的條件去選的話, 只能選出創100天新高的股票, 如果隔天還是創新高, 就會再度選出. 想設定在第1根創100天新高這個條件.

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

看看這樣是否符合需求。

setTotalBar(100);
setBackBar(100);
setBarFreq("D");
if isLastBar then
    if c>highest(h[1],100) then
        begin
            value1=countIf(c>highest(h[1],100),100);
            if value1=1 then ret=1;
        end;

發仔 發文於   2025/09/26

感謝教授的答覆

完全解決了問題

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

發仔,

不清楚你是否用我建議的方式解決了問題,我發現使用countif函數計算次數是錯誤的。正確的答案應該如下:

setTotalBar(1);
var: i(0), sum(0);
if isLastBar then
    begin
        value1=highest(h[1],100);
        if c>value1 then
            begin           
                value2=highestBar(h[1],100)+1;
                sum=0;
                for i=1 to value2
                    if c[i-1]>value1 then sum=sum+1;
                if sum=1 then ret=1;
            end;
    end;

發表回覆
Close