xs腳本寫法 請益 (強勢股壓回/盤整,接近均線)

  •   786 
  • 最後發表   里歐  2023 六月 09
里歐 發文於   2022/12/04

如標題,想找到下圖這種,飆股壓回或高檔盤整,
盤到接近均線時的線型

不知道可以有什麼寫法
1.n日內上漲n%股票
2.壓回/盤整
3.接近均線

2跟3不太清楚怎麼寫好,尤其是3
只能手動判斷每日的收盤或低點跟均線差多少%嗎? 能function能用差幾"檔"來算?



排序方式: 標準 | 最新
XQ小幫手 發文於   2022/12/06

Hello 里歐,

 

2.這要看您怎麼定義盤整/壓回。

舉例來說,您可以使用近n期的最高最低值要在一定比例內(盤整),或是n期的最高價都在一定價格內(壓回)。

 

3.最簡單的方法就是用收盤價和均線值的百分比,如果需要持續n天的話用 trueall ,任一天的話 trueany

要計算幾檔的話,您可以自行撰寫函數判斷1檔為多少元,再去換算收盤價和均線的差值為多少檔。

rightman 發文於   2023/03/21

這個有解嗎? 我也想知道,謝謝

XQ小幫手 發文於   2023/03/29

Hello rightman,

 

如同上面回覆,要先麻煩您描述定義 盤整/壓回 和 接近均線 的條件,小幫手才有辦法建議。

舉例來說,近20期的最高最低價在2%內算是盤整:

value1 = highest(high, 20);

value2 = lowest(low, 20);

condition1 = 100 * (value1 - value2) / value2 < 2;

 

至於幾檔,您可以撰寫條件判斷一檔為多少點。

舉例來說,台股的話:

if close < 10 then value1 = 0.01

else if close < 50 then value1 = 0.05

else if close < 100 then valeu1 = 0.1

else if close < 500 then value1 = 0.5

else if close < 1000 then value1 = 1

else value1 = 5

藍靖 發文於   2023/06/03

請教小幫手,想法如這版大差不多,請教如圖1.2.的寫法

1-上漲之後壓回"還原"50均線整理(如圖紅圈處)

2-至少四天碰到"還原"50均線(如圖紅圈處)

 

XQ小幫手 發文於   2023/06/07

Hello 藍靖,

 

1.您可以用變數記錄價格是否有向上遠離50均線後又靠近。

舉例來說:

value1 = close - average(getfield("Close", Adjusted:=true), 50);

 

if highest(value1, 10) > 10 and value1 < 3 then condition1 = True;

這樣當近10根Bar中收盤價有比均線大10以上,且接下來收盤價有靠近均線到3以內的話,condition1 就會維持在True。

 

2.您可以用 trueall 來判斷。

舉例來說:

value2 = average(getfield("Close", Adjusted:=true), 50);

condition2 = trueall(high > value2 and low < value2, 4);

這樣就會判斷近四根Bar的均線要藉於Bar的高低之間。

 

藍靖 發文於   2023/06/08

請問小幫手:

  他所謂的adjusted指定頻率, 是指均線還是日線?

編譯不出來,這二種是需要分開程式嗎?請小幫手指教,  附上檔案

附加文件

XQ小幫手 發文於   2023/06/09

Hello 藍靖,

 

小幫手建議您先閱覽網站上的教學區,裡面有XS語法的基礎和應用。

 

這是指 getfield 取資料若指定要還原資料的話 (Adjusted:=true) 時要指定頻率,由於小幫手不知道您要使用的頻率所以空著。

如果要使用日頻率的話,可以這樣寫 getfield("Close", "D",Adjusted:=true)。

另外您需要條件觸發後篩選出來,但腳本裡沒有。

附上小幫手修改後的腳本。

value1 = close - average(getfield("Close", "D",Adjusted:=true), 50);

if highest(value1, 10) > 10 and value1 < 3 then condition1 = True;

 

value2 = average(getfield("Close", "D",Adjusted:=true), 50);

condition2 = trueall(high > value2 and low < value2, 4);

 

if condition2 then begin

    condition1 = false;

    ret = 1;

    end;

發表回覆
Close