請問 副圖 XS 內建 EMA-SMA 指標 策略編寫

  •   1.2K 
  • 最後發表   GE670801  2018 八月 17
GE670801 發文於   2018/01/16

請問小編

如何用策略選出  12 EMA-SMA   26 EMA-SMA  50EMA-SMA  此3個同時為正數

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

Hi GE670801,

可以使用警示腳本撰寫,

撰寫完成 12 EMA-SMA   26 EMA-SMA  50EMA-SMA 這三個數值後,

再用 if 去判斷同時為正數時 ret = 1; 提示策略觸發,

以上說明,若撰寫上有問題歡迎詢問,謝謝。

GE670801 發文於   2018/01/17

小編你好

我用資料寫12但無法編譯

input:period(12,"計算期間");

value1=EMA(close,period);
value2=average(close,period);
if close<>0 then
 value3=(value1-value2)/close*100;

plot1(value3,"EMA-SMA");
if  EMA(close, ShortLength) > EMA(close, MiddleLength)
and EMA(close, MiddleLength)> EMA(close, LongLength) then
Ret = 1

XQ小幫手 發文於   2018/01/17

 Hi GE670801,

您這樣寫不太對唷,小幫手嘗試編譯後,在寫一個範例提供給您參考,謝謝。

XQ小幫手 發文於   2018/01/17

Hi GE670801,

請您試試看以下警示腳本範例,謝謝。

input:ShortLength(12,"短天期數"),MiddleLength(26,"中天期數"),LongLength(50,"長天期數");

value1=EMA(close,ShortLength);
value2=average(close,ShortLength);

value3=EMA(close,MiddleLength);
value4=average(close,MiddleLength);

value5=EMA(close,LongLength);
value6=average(close,LongLength);

if value1 - value2 > 0 
and value3 - value4 > 0 
and value5 - value6 > 0
then ret = 1;

print(date,value1,value3,value5);

若有問題歡迎詢問,謝謝。

 

另外,您原來的Code無法編譯成功是因為

1. plot1 不支援警示腳本

2. ret = 1 少了 ";"

3. ShortLength、MiddleLength、LongLength 沒有宣告變數

以上說明,謝謝。

  • 按讚來自於
  • magichouse
GE670801 發文於   2018/01/18

請問小編這不能編譯是哪有問題

Input:
    Length(12),
    UpperBand(1.2),
    ShortLength(50),
    MiddleLength(120),
    LongLength(240),
    EMA_L(12),
    SMA_L(12);

settotalbar(maxlist(maxlist(ShortLength, MiddleLength, LongLength) + 40,Length + 3));

SetInputName(1, "期數");
SetInputName(2, "通道上緣");
SetInputName(3, "EMA短期");
SetInputName(4, "EMA中期");
SetInputName(5, "EMA長期");
SetInputName(6, "EMA額外期數");
SetInputName(7, "SMA額外期數");

if  EMA(close, ShortLength) > EMA(close, MiddleLength)
and EMA(close, MiddleLength)> EMA(close, LongLength) then
Ret = close >= bollingerband(Close, Length, UpperBand) and EMA(close, EMA_L) > average(close, SMA_L);
input:ShortLength(12,"短天期數"),MiddleLength(26,"中天期數"),LongLength(50,"長天期數");

value1=EMA(close,ShortLength);
value2=average(close,ShortLength);

value3=EMA(close,MiddleLength);
value4=average(close,MiddleLength);

value5=EMA(close,LongLength);
value6=average(close,LongLength);

if value1 - value2 > 0
and value3 - value4 > 0
and value5 - value6 > 0
then ret = 1;

print(date,value1,value3,value5);

XQ小幫手 發文於   2018/01/18

Hi GE670801,

您好,因為 input 的 ShortLength 變數 重複宣告,故編譯失敗,以上說明,謝謝。

GE670801 發文於   2018/01/18

請問那要如何表示

 

XQ小幫手 發文於   2018/01/19

Hi GE670801,

您好,將第二次出現的 input 裡的 ShortLength 變數,換成其他名稱即可,

記得後面用到重複變數的部分也要進行修改唷~ 

若有問題歡迎再詢問,謝謝。

GE670801 發文於   2018/01/26

請問要換哪種名稱

 

 

 

silentwisdom 發文於   2018/01/26

我試著幫小編說的更清楚,小幫手的意思其實是你這兩個shortlength重複,電腦不知道你要哪一個,
變數就像吃火鍋的時候桌上放火鍋料的盤子,腳本就像是煮火鍋的步驟,而這步驟的寫法都是在告訴電腦,要放哪個盤子的料到鍋子,電腦他只認盤子


但你第一段跟電腦說一個名為
shortlength的盤子放50片肉,
第二段又跟電腦指定
shortlength的這個盤子放12片肉,
然後又叫電腦去
把那個叫shortlength的盤子上的肉丟進去火鍋煮,
這時候電腦會不知道他該拿50片肉的那盤還是12片肉的那盤
所以你可以把其中一個放12片或50片肉的盤子隨便改一個不是shortlength名稱的盤子

改完名字之後,你後面指定50片肉的盤子跟12片肉的盤子就各自有了不跟其他重複的名稱,電腦才可以知道什麼時候該放什麼盤子的料,至於你想改什麼名字那都沒關係

所以假設你現在把50片肉的那盤子改過叫做shortday 你後面的步驟也要把本來要用到50片肉的步驟的叫做shortlength的盤子改成shortday的盤子,否則電腦又會拿成放12片肉叫做shortlength的盤子,這樣就不對了

顯示更多回應 發表回覆
Close