 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18193 |
回覆: 根據不同條件而自動調整參數
引用: 最初由 tycoon868 發表
請教總版主
M1:EMA(C,N),linethick2,colorgreen;
MQ:=EMA(C,3),precision2;
MT:=EMA(C,40),precision2;
MTB:=((MQ-MT)/MT)*1000;
賣出:=Cross(M1,C);
當中的M1參數N希望依照以下條件自動跑出
MTB>100,則 N=15
MTB>60 and MTB<100,則 N=10
MTB>30 and MTB<60,則 N=8
MTB>0 and MTB<30,則 N=5
請教正確的寫法為何?
謝謝您
MTB 是個數列, 每根的數值皆可能不同
然而您的 M1, 是採用 EMA 做計算
請思考一個問題 EMA( C,N )
EMA 的計算原理, 其是需要累算的
不是僅算最近的N根, 就可得到正確數值
必須自歷史首根累算到當前位置
EMA( C,N ) 當您的 N值希望隨著 MTB 變化時
N值亦會隨著改變(每根的數值可能不同)
也就是說
每一根K棒的 M1 值
都要自歷史首根重新開始累算
若N值為常數, 自頭到尾值不不變
EMA( C,N ) 這行僅需被計算一次
而您現在的要求
是每一根K棒都得要重算, 就像
EMA( C, N[i] )
程式撰寫上並非不可行
但請您想清楚
這樣所造成的計算量
可不是原來的十倍百倍這麼少而已
電腦算的動嗎?
EMA 不像 MA 只用近期幾根就可算出
請慎重思考
|
|
向版主報告此篇 |  |
|
2013-04-23 09:02 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18193 |
引用: 最初由 tycoon868 發表
謝謝
若MTB<=0,則 N=3
原碼:
MQ:=EMA(C,3),precision2;
MT:=EMA(C,40),precision2;
MTB:=((MQ-MT)/MT)*1000;
M1:C*0; CC:=C;
NN:if(MTB>100,15,if(MTB>60,10,if(MTB>30,8,if(MTB>0,5,3)))) linethick;
//計算 MA(CC,NN[i])
LBSET:=lbound(NN)+15;
for i=LBSET to datacount do begin
for j=i-NN[i]+1 to i do begin
M1[i]:=M1[i]+CC[j];
end;
M1[i]:=M1[i]/NN[i];
end;
x:=SETLBOUND(M1,LBSET)
|
|
向版主報告此篇 |  |
|
2013-04-25 09:24 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|