請問開高走低與前幾天K棒的寫法

  •   175 
  • 最後發表   Lex  2023 三月 08
Lex 發文於   2023/02/21

想請問小幫手

我想寫一個選股條件

1. 均線A均黃金交叉B均或是A均高於B均

2. 今天開高走低

3. 前天漲停或是大紅K

4. 大前天漲停或是大紅K

5. RSI 6 大於 RSI 12

 

程式如下,value3的開高走低不知道怎麼寫比較好

 

value1=average(c,5); //5均線

value2=average(c,20); //20均線

value3=開高走低

value4=GetField("收盤價", "D")[1] = GetField("最高價", "D")[1]

or GetField("收盤價", "D")[1]=GetField("漲停價", "D")[1]; // 前天大紅K或是漲停

value5=GetField("收盤價", "D")[2] = GetField("最高價", "D")[2]

or GetField("收盤價", "D")[2]=GetField("漲停價", "D")[2]; // 大前天大紅K或是漲停

 

condition1=value1 cross Above value2 or value1 > value2;

condition2= RSI(c,6) cross Above RSI(c,12);

 

if condition1 and condition2 and value4 and value5 and value3 then ret=1;

 

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/03/01

 Hello Lex,

 

value1 等變數只能夠保存數字,不包含布林值。

所以像是 value4=GetField("收盤價", "D")[1] = GetField("最高價", "D")[1] 這種寫法是錯的,您需要使用 condition1 等條件變數來記錄布林值。

另外,由於選股只能夠執行在日以上的頻率,所以 今天開高走低 其實就相當於今日開盤價大於今日收盤價。

所以就會是 condition3 = getfield("Open", "D") > getfield("Close", "D");

 

Lex 發文於   2023/03/02

Hi 小幫手

想請你幫忙看這樣修改對不對

 

value1=average(c,5); //5均線

value2=average(c,20); //20均線

 

condition1=value1 cross Above value2 or value1 > value2; //5均高於20均

 

condition2= RSI(c,6) cross Above RSI(c,12) or RSI(c,6) > RSI(c,12); // RSI 6 高於 RSI 12

 

condition3= getfield("Open", "D") > getfield("Close", "D"); //今日開高走低

 

condition4= GetField("收盤價", "D")[1] = GetField("最高價", "D")[1] //昨日漲停或是大紅K

or GetField("收盤價", "D")[1]=GetField("漲停價", "D")[1];

 

condition5= GetField("收盤價", "D")[2] = GetField("最高價", "D")[2] //前日漲停或是大紅K

or GetField("收盤價", "D")[2]=GetField("漲停價", "D")[2];

 

if condition1 and condition2 and condition3 and condition4 and condition5 then ret=1;

 

 

 

 Hello Lex,

 

value1 等變數只能夠保存數字,不包含布林值。

所以像是 value4=GetField("收盤價", "D")[1] = GetField("最高價", "D")[1] 這種寫法是錯的,您需要使用 condition1 等條件變數來記錄布林值。

另外,由於選股只能夠執行在日以上的頻率,所以 今天開高走低 其實就相當於今日開盤價大於今日收盤價。

所以就會是 condition3 = getfield("Open", "D") > getfield("Close", "D");

 

 

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

Hello Lex,

 

RSI是會用到前期值的指標,所以小幫手會建議您不要放在condition裡面計算,避免可能發生因為前半部條件為True導致後半部沒計算到出錯。

 

condition2= RSI(c,6) cross Above RSI(c,12) or RSI(c,6) > RSI(c,12); // RSI 6 高於 RSI 12

可以改為

value1 = RSI(c,6);

value2 = RSI(c,12);

conditoin2 = value1 cross above value2 or value1 > value2;

 

另外 value1 > value2 其實也會包含 cross above (除了等於的狀況),所以可以考慮只寫 value1 > value2 即可。

您可以使用print函數將相關數值印出檢查。

 

網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。

發表回覆
Close