腳本中有一段如下,想過濾掉過去沒出現過大紅k的個股。
但3293 02/29沒抓到,預期應該要抓到才對,肉眼去看有超過3%的紅k棒如下圖,黃色箭頭都是超過3%。
input:j(100);
value12 = close/close[1];
value13 = countif(value12 > 1.03, j);
condition11 = value13 > 1;
 
        
        腳本中有一段如下,想過濾掉過去沒出現過大紅k的個股。
但3293 02/29沒抓到,預期應該要抓到才對,肉眼去看有超過3%的紅k棒如下圖,黃色箭頭都是超過3%。
input:j(100);
value12 = close/close[1];
value13 = countif(value12 > 1.03, j);
condition11 = value13 > 1;
順便附上整個腳本
//突破前高
input:N(2);
condition5 = GetField("收盤價") >= Highest(GetField("最高價")[1],N);
condition6 = close>close[1]*1.024; //
//=================================================================
//價量
input:VolumeLimit(10000);
input:VolumeCloseLimit(800000); //參考 價100, 8000張 //當沖可能要設更高 150*8000 = 1200000 ?
Value1 = GetField("成交量");
If close < 50 Then
condition11 = Volume > 3000;
If close > 50 and close < 200 Then
condition11 = Volume > 2000;
If close >= 200 and close <= 500 Then
condition11 = Volume > 1000;
If close > 500 Then
condition11 = Volume > 100;
// Volume*close > VolumeCloseLimit-1 Then
condition7 = Volume > Average(Volume[1], 5) * 2;
condition12 = Volume > Volume[1] * 2;
//Else
//condition7 = Volume > Average(Volume[1], 5) * 2.5;
condition8 = Value1 > VolumeLimit-1;
condition9 = Volume*close > VolumeCloseLimit-1;
//if condition7 and (condition8 or condition9) then ret =1;
//=================================================================
//====後續篩選,均線糾結程度===============================================================
Value1 = average(close, 5);
Value2 = average(close, 10);
Value3 = average(close, 20);
value5 = MaxList(Value1, Value2, Value3); //均線取最大
value6 = MaxList2(Value1, Value2, Value3); //均線第二大
value7 = MinList(Value1, Value2, Value3);
value8 = MinList2(Value1, Value2, Value3);
input:DistMaxMin(1.0371);
input:DistMaxMid(1.026);
input:DistMidMin(1.026);
condition1 = close > value7; //收盤價大於最低的均線
value9 = value5/value7;
condition2 = value9 < DistMaxMin; //差距最大的兩條均線,差距需小於0.35
value10 = value5/value6;
condition3 = value10 < DistMaxMid; //最大均線跟第二大均線,差距小於0.26
value11 = value6/value7;
condition4 = value11 < DistMidMin; //第二大均線跟最小均線,差距小於0.26
input:DistCloseMax(1.04);
condition10 = close/value5 < DistCloseMax;
//condition11 = close
//=============================================================
//過去三個月是否有紅k棒 超過3%? 過濾平穩股票 //但會錯過鴻海 2317 03/04
input:j(100);
value12 = close/close[1];
value13 = countif(value12 > 1.03, j);
condition11 = value13 > 1;
//=============================================================
input:k(5);
condition999 = (condition5 and condition6) and ((condition7 or condition12) and (condition8 or condition9));
condition111 = TrueAny(condition999, k);
if condition11 and condition1 and condition2 and (condition3 or condition4) and condition10 and condition111 then ret =1;
有看小編提供的圖,不確定我有沒有搞錯意思,
我看 PLOT只有1? 代表只抓到一個大於3%?
還是說是指上面給的腳本能順利抓到2/29 3293?
預期 2/27 ,1/29 都漲幅超過3%。
==========================================
countif 會檢查過去100筆,這句有點不懂
我這邊的設定 input:j(100);  原本理解是往前100天
//過去三個月是否有紅k棒 超過3%? 過濾平穩股票 //
input:j(100);
value12 = close/close[1];
value13 = countif(value12 > 1.03, j);
condition11 = value13 > 1;
Hello 里歐,
小編建議您先觀看網站上的教學區和教學影片,裡面有XS語法的基礎和應用可以閱覽。
小編上面plot畫出的是 condition11 ,而 condition11 是判斷 value13 (countif 的次數) 是否有大於1。
當condition11為True的時候,畫出來的會是1,condition11為False則畫出為0。
這代表著在 2024/02/29 的時候,至少有2根Bar或以上符合條件,因為 value13 > 1 符合。
countif(value12 > 1.03, j); 會往前檢查 j 根Bar (這邊的j設定為100)。
故腳本在判斷時會確認過去100根Bar中 value12 是否有大於 1.03。
而value12是變數,要腳本有在前100根Bar中運算過才會有值,故資料讀取筆數需要設定為100,否則沒運算過的Bar value12就會是預設值0。
可參考 資料讀取範圍與腳本執行的關係。
我只留condition11  相關的腳本 重跑一次如下,還是沒找到預期的個股3293
(肉眼看 2/27跟1/29都大於前一日3%以上。)
會跟確認%後幾位小數點有關嗎? 2/27漲幅離3%較近。
不過改成>1.029也沒找到。
腳本
2/29 沒抓到
03/01 有抓到
也可以在程式碼加入 settotalbar或setbarback
要設定足夠的歷史資料筆數 才能得到正確結果
可參考 https://www.xq.com.tw/lesson/xspractice/%e8%a8%ad%e7%bd%ae%e6%8c%87%e5%ae%9a%e9%a0%bb%e7%8e%87%e5%bc%95%e7%94%a8%e7%ad%86%e6%95%b8%e7%9a%84%e6%87%89%e7%94%a8/
7 評論