小幫手 你好
我嚐試在函數中使用 EMA, 不論我變化任何期數, 它永遠送回同一數值 ?
value1 = EMA(Close,5); //計算5期收盤價的XQ EMA
在函數裡是否無法使用 EMA 功能
- 321
- 最後發表 蔣大哥 2024 八月 04
函數裡面呼叫函數是OK的。
//函數腳本名稱:test
input: days(numeric,"天數");
ret=ema(close,days);
//交易腳本名稱:test
print(date,time,test(5));
執行交易腳本,監控股票:2330台積電,頻率5分鐘,運作正常。
我想從函數中一次傳回五個不同期數的EMA , 勞請許教授幫忙指正以下程式碼, 何處有誤, 以致VC34,VC144,VC169,VC576,VC676 等永遠傳回都是相同數值,
//====== VegasChannel function ====== VegasChannel function ====2024/08/03
//====== TO REURN VALUE 1 IF IN ASCENDING ORDER
//====== TO REURN VALUE -1 IF IN DECENDING ORDER
//====== TO REURN VALUE 0 WHATEVER ELSE
//======= VALUE1 = EMA_Function(VC34,VC144,VC169,VC576,VC676);
SetBarMode(2);
input :
VC34( numericref, "EMA34"),
VC144(numericref, "EMA144"),
VC169(numericref, "EMA169"),
VC576(numericref, "EMA576"),
VC676(numericref, "EMA676");
//---------------------------------------------
VAR : RTNV(0);
VC34 = EMA( Getfield("Close","D"), 34);
VC144 = EMA( Getfield("Close","D"),144);
VC169 = EMA( Getfield("Close","D"),169);
VC576 = EMA( Getfield("Close","D"),576);
VC676 = EMA( Getfield("Close","D"),676);
//---------------------------------------------
IF VC34 > 0.5*(VC144 + VC169 ) and (VC144 + VC169 ) > (VC576 + VC676 )
then RTNV = 1
else
IF VC34 < 0.5*(VC144 + VC169 ) and (VC144 + VC169 ) < (VC576 + VC676 )
then RTNV = -1;
EMA_Function = RTNV ;
程式沒有問題,我用2330台積電的日資料測試,都正常。你的問題可能出在準備的資料太少,EMA需要大量資料,我這邊設6000筆。
//交易腳本名稱:test_EMA
setTotalBar(6000);
value101=EMA_Function(value1,value2,value3,value4,value5);
print(date,value1,value2,value3,value4,value5,value101);

感謝許教授指點, 果然是沒有指定足夠資料所致!
4 評論