XS選股機器人中,有 "突破糾結均線" 的選股腳本,但是如果想要指定突破糾結均線的時間點是 N 日前,該如何修改?
例如 "四日前突破糾結均線",然後可以篩出下圖這檔。

XS選股機器人中,有 "突破糾結均線" 的選股腳本,但是如果想要指定突破糾結均線的時間點是 N 日前,該如何修改?
例如 "四日前突破糾結均線",然後可以篩出下圖這檔。

我是初學者 , 試著寫看看 , 如果要所有均線朝上 , 再自行加一下條件
var:ma5(0);
var:ma10(0);
var:ma20(0);
var:ma60(0);
var:B5DHigh(0);
ma5=average(c,5);
ma10=average(c,10);
ma20=average(c,20);
ma60=average(c,60);
B5DHigh=maxlist(ma5[5],ma10[5],ma20[5],ma60[5]);
condition1=trueall(ma5>ma10,4);
condition2=trueall(ma10>ma20,4);
condition3=trueall(ma20>ma60,4);
condition4=ma5[5]<>B5DHigh;
if condition1 and condition2 and condition3 and condition4 then
ret=1;
謝謝教授的回答 , 剛剛一覺醒來 , 也覺得其中一個條件式不夠嚴謹
(4)(5)我今天消化消化 , 解讀一下其中的用意 , 再來修改看看
學到了 , isLastBar , 謝謝許教授
晚上我改一下 , 再麻煩教授有空上來時順便看一下
抱歉,因為只有晚上下班才有時間上論壇、研究腳本,回覆晚了;
感謝許教授指點!!
(1) ~ (5) 大致都理解意思,就是要先找出糾結、然後(6)代表突破了,
但是還不太清楚怎麼透過 isLastBar 來達到 N 天前的條件,
我再去做點功課、觀摩一下其他前輩的腳本!
小白兔學長,感謝回覆,再拜託您分享一下 isLastBar 的應用,感激不盡!!
這是選股機器人中 "突破糾結均線" 的範例程式碼,不知道要如何把 isLastBar 的用法套用進去 :
setbarfreq("AD");
input: shortlength(5); setinputname(1,"短期均線期數");
input: midlength(10); setinputname(2,"中期均線期數");
input: Longlength(20); setinputname(3,"長期均線期數");
input: Percent(5); setinputname(4,"均線糾結區間%");
input: XLen(20); setinputname(5,"均線糾結期數");
input: Volpercent(25); setinputname(6,"放量幅度%");//帶量突破的量是超過最長期的均量多少%
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: AvgHLp(0),AvgH(0),AvgL(0);
shortaverage = average(close,shortlength);
midaverage = average(close,midlength);
Longaverage = average(close,Longlength);
AvgH = maxlist(shortaverage,midaverage,Longaverage);
AvgL = minlist(shortaverage,midaverage,Longaverage);
if AvgL > 0 then AvgHLp = 100*AvgH/AvgL -100;
condition1 = trueAll(AvgHLp < Percent,XLen);
condition2 = V > average(V[1],XLen)*(1+Volpercent/100) ;
condition3 = C > AvgH *(1.02) and H > highest(H[1],XLen);
condition4 = average(volume[1], 5) >= 1000;
ret = condition1 and condition2 and condition3 and condition4;
outputfield(1,AvgH,2,"均線上緣", order := -1);
outputfield(2,AvgL,2,"均線下緣");
isLastBar用法如下
只要找出最後一天符合條件的股票
所以針對最後一根K棒計算即可
這樣是可以跑出你想要的股票
但許教授寫的還有幾項我沒有領悟,所以沒有寫進去
還未完善,但可以先參考看看
input:ND_mul(4,"已經多頭排列期數");
input:shortD(5,"短均線期數");
input:midD1(10,"中均線1的期數");
input:midD2(20,"中均線2的期數");
input:longD(60,"長均線的期數");
var:shortaverage(0);
var:midD1average(0);
var:midD2average(0);
var:longaverage(0);
var:AvgH(0);
var:AvgL(0);
shortaverage=average(c,shortD);
midD1average=average(c,midD1);
midD2average=average(c,midD2);
longaverage=average(c,longD);
AvgH=maxlist(shortaverage[ND_mul+1],midD1average[ND_mul+1],midD2average[ND_mul+1],Longaverage[ND_mul+1]);
AvgL=minlist(shortaverage[ND_mul+1],midD1average[ND_mul+1],midD2average[ND_mul+1],Longaverage[ND_mul+1]);
condition1=trueall(shortaverage>midD1average,ND_mul);
condition2=trueall(midD1average>midD2average,ND_mul);
condition3=trueall(midD2average>longaverage,ND_mul);
condition4=shortaverage[ND_mul+1]<AvgH and shortaverage[ND_mul+1]>AvgL;
condition5=c[ND_mul]>maxlist(shortaverage[ND_mul],midD1average[ND_mul],midD2average[ND_mul],Longaverage[ND_mul]);
if islastBar=true then
begin
if condition1 and condition2 and condition3 and condition4 and condition5 then
ret=1;
end;
Hello 皓子,
小編補充,內建的 condition 是個布林變數,和 value1 一樣可以取得前期值。
故若您的條件和原本的內建腳本相同,只是要取得前N期是否符合條件的話,可以將
ret = condition1 and condition2 and condition3 and condition4;
修改為
input: _n(5); //假設是要5期前突破糾結均線
ret = condition1[_n] and condition2[_n] and condition3[_n] and condition4[_n];
也會有相同的效果 (只是就無法用 islastbar 來節省效能,因為要有運算過才會有前期值)。
網站上有教學區和教學影片,裡面有XS語法的基礎和應用可以閱覽。
感謝 鍵盤上的小白兔 和 虎科大許教授 的熱心回覆。
感謝小編,我有照你的方法試出來了!!
目前看起來篩選出來的算是有符合我預期要的結果;
但因為我目前使用的是免費版,測試過程用掉可用次數了,
我會繼續驗證,並再繼續研究看看加入其他條件,
感謝您提供的協助與教學資訊,
謝謝!!~~
10 評論