穿越EMA20語法

  •   122 
  • 最後發表   Dorfairl  2025 八月 19
Dorfairl 發文於   2025/08/14

請問各位大大,我的語法哪邊有問題呢?

我想要當日穿越EMA20,但選出來的都是昨日都已經站上EMA20

 

value1 = EMA(Close,20); //計算45EMA

condition1 = ( close cross over value1 );//股價穿越20EMA

if condition1  then ret =1 ;

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

今天收盤之前,選股策略都是用昨天的收盤資料選股。若要盤中即時選股,需要使用警示腳本或交易腳本。你的語法並沒有問題。

Dorfairl 發文於   2025/08/15

input:Leng1(20);

 

variable: ema1(0);

 

SetInputName(1,"EMA20");

 

settotalbar(maxlist(Leng1) + 480);

 

ema1 = ema(close, Leng1);

 

condition1 = close[1] < ema1;

condition2 = close > ema1;

 

if condition1 and condition2 then ret = 1;

 

後續我改成這樣就可以了,但是我想請教的是480這個數字為何要讀取這麼多呢?

虎科大許教授 發文於   2025/08/15

EMA的計算會使用到前期資料,若資料筆數不足,算出來的數值會與系統看到的不一樣。

Dorfairl 發文於   2025/08/18

許教授  我又來了

那我想要使用30分鐘  穿過EMA20要怎麼寫呢?可以跟日K的EMA寫在一起嗎

虎科大許教授 發文於   2025/08/18

(1)主頻率設定為30分鐘。

(2)30分鐘收盤價(盤中為即時成交價)穿越20日的EMA,寫法如下:

if getField("收盤價","30") cross over xfMin_EMA("D",getField("收盤價","D"),20) then ret=1;

Dorfairl 發文於   2025/08/19

剛剛試了一下,好像不行

 

如果我改為警示腳本,即時價位要穿越EMA20,這要怎麼修改呢?讀取的K棒需要多少呢

 

getField("close","30") cross over xfMin_EMA("30",getField("close","30"),20);

 

虎科大許教授 發文於   2025/08/19

(1)你說,試了一下,好像不行,是否用的是選股?若是選股腳本,不能用分鐘頻率,要用日以上的頻率。分鐘頻率只能在警示腳本或交易腳本使用。

(2)xfMin_的函數是跨頻率使用的函數。跨頻率一定是小跨大,亦即你不能在日頻率之下,跨頻率處理30分鐘的EMA。

(3)我提供的程式碼是跨頻率的程式碼,假設你用小於30分鐘(或30分鐘)的頻率當作主頻率,跨頻率去抓30分鐘價格是否對20日EMA黃金交叉,就像我那樣寫即可。若主頻率是30分鐘,要抓價格是否對30分鐘的20期EMA黃金交叉,不需要跨頻率,直接寫成:

condition1=c cross over EMA(c,20);

Dorfairl 發文於   2025/08/19

請問如果用close的話是那一根bar跑完才計算對吧,還是可以用q_last呢

虎科大許教授 發文於   2025/08/19

若有勾選逐筆洗價,則盤中close代表即時成交價。close[1]代表前一根K棒的收盤價。

發表回覆
Close