 |
tycoon868
資深會員

註冊日期: Oct 2008
來 自:
文章數量: 313 |
|
IF then else 迴圈 之寫法
總版主您好:
目前可以成功跑出結果的原碼如下:
#######################
M1:=EMA(C,18),linethick5,colorgreen,precision2;
BA1:=((C-M1)/M1)*2000,precision1;
BA1P1:=BA1*0.5;
BA1P2:=120*0.416+(BA1-120)*0.3;
BA1P3:=120*0.416+(210-120)*0.36+(BA1-210)*0.12;
BATP1:=if(Between(BA1,0,120),BA1P1,0);
BATP2:=if(Between(BA1,120,210),BA1P2,0);
BATP3:=if(BA1>210,BA1P3,0);
BATP:=BATP1+BATP2+BATP3;
BAT1P:=IF(BATP>100,100,BATP);
BA1Q1:=BA1*0.416;
BA1Q2:=-120*0.416+(BA1+120)*0.36;
BA1Q3:=-120*0.416+(-210+120)*0.36+(BA1+210)*0.18;
BATQ1:=if(Between(BA1,0,-120),BA1Q1,0);
BATQ2:=if(Between(BA1,-120,-210),BA1Q2,0);
BATQ3:=if(BA1<-210,BA1Q3,0);
BATQ:=BATQ1+BATQ2+BATQ3;
BAT1Q:=IF(BATQ<-100,-100,BATQ);
BAT1:=BAT1P+BATQ;
##########################
需求 : 上列公式 正、負值各有三個區間條件,外加 超過一百者視為一百(上限值)
我目前以土法方式逐條列出這八個條件,結果是正確的
我很希望可以用 類似 IF then else 這種方式來呈現,很希望可以學會這樣的程式與法
麻煩您幫我修改,我會仔細學習
問題: 比較兩者 土法條列vs迴圈方式,效能上何者為優呢?
|
|
向版主報告此篇 |  |
|
2019-11-26 15:07 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18234 |
|
回覆: IF then else 迴圈 之寫法
引用: 最初由 tycoon868 發表
總版主您好:
目前可以成功跑出結果的原碼如下:
#######################
M1:=EMA(C,18),linethick5,colorgreen,precision2;
BA1:=((C-M1)/M1)*2000,precision1;
BA1P1:=BA1*0.5;
BA1P2:=120*0.416+(BA1-120)*0.3;
BA1P3:=120*0.416+(210-120)*0.36+(BA1-210)*0.12;
BATP1:=if(Between(BA1,0,120),BA1P1,0);
BATP2:=if(Between(BA1,120,210),BA1P2,0);
BATP3:=if(BA1>210,BA1P3,0);
BATP:=BATP1+BATP2+BATP3;
BAT1P:=IF(BATP>100,100,BATP);
BA1Q1:=BA1*0.416;
BA1Q2:=-120*0.416+(BA1+120)*0.36;
BA1Q3:=-120*0.416+(-210+120)*0.36+(BA1+210)*0.18;
BATQ1:=if(Between(BA1,0,-120),BA1Q1,0);
BATQ2:=if(Between(BA1,-120,-210),BA1Q2,0);
BATQ3:=if(BA1<-210,BA1Q3,0);
BATQ:=BATQ1+BATQ2+BATQ3;
BAT1Q:=IF(BATQ<-100,-100,BATQ);
BAT1:=BAT1P+BATQ;
##########################
需求 : 上列公式 正、負值各有三個區間條件,外加 超過一百者視為一百(上限值)
我目前以土法方式逐條列出這八個條件,結果是正確的
我很希望可以用 類似 IF then else 這種方式來呈現,很希望可以學會這樣的程式與法
麻煩您幫我修改,我會仔細學習
問題: 比較兩者 土法條列vs迴圈方式,效能上何者為優呢?
BAT1:=BAT1P+BATQ;
應該是下面這樣吧?
BAT1:=BAT1P+BAT1Q;
另外還有一個潛在問題!!!
Between(BA1,0,120)
Between(BA1,120,210)
這兩行這樣組合處理,其實是有遺漏的
當N=120 或 N=210 會處理不到
Between(N,120,210)
它是判斷成 N>120 and N<210, 並非 N>=120 and N<=210
|
|
向版主報告此篇 |  |
|
2019-11-26 15:48 |
|
|
|  |
 |
tycoon868
資深會員

註冊日期: Oct 2008
來 自:
文章數量: 313 |
|
謝謝總版主,我重新修改了,麻煩您幫我
M1:=EMA(C,18),linethick5,colorgreen,precision2;
BA1:=((C-M1)/M1)*2000,precision1;
BA1P1:=BA1*0.5;
BA1P2:=120*0.416+(BA1-120)*0.3;
BA1P3:=120*0.416+(210-120)*0.36+(BA1-210)*0.12;
BATP1:=if(BA1>0 and BA1<=120,BA1P1,0);
BATP2:=if(BA1>120 and BA1<=210,BA1P2,0);
BATP3:=if(BA1>210,BA1P3,0);
BATP:=BATP1+BATP2+BATP3;
BAT1P:=IF(BATP>100,100,BATP);
BA1Q1:=BA1*0.416;
BA1Q2:=-120*0.416+(BA1+120)*0.36;
BA1Q3:=-120*0.416+(-210+120)*0.36+(BA1+210)*0.18;
BATQ1:=if(BA1<0 and BA1>=-120,BA1Q1,0);
BATQ2:=if(BA1<-120 and BA1>=-210,BA1Q2,0);
BATQ3:=if(BA1<-210,BA1Q3,0);
BATQ:=BATQ1+BATQ2+BATQ3;
BAT1Q:=IF(BATQ<-100,-100,BATQ);
BAT1:=BAT1P+BAT1Q;
|
|
向版主報告此篇 |  |
|
2019-11-26 16:21 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18234 |
|
引用: 最初由 tycoon868 發表
謝謝總版主,我重新修改了,麻煩您幫我
M1:=EMA(C,18),linethick5,colorgreen,precision2;
BA1:=((C-M1)/M1)*2000,precision1;
BA1P1:=BA1*0.5;
BA1P2:=120*0.416+(BA1-120)*0.3;
BA1P3:=120*0.416+(210-120)*0.36+(BA1-210)*0.12;
BATP1:=if(BA1>0 and BA1<=120,BA1P1,0);
BATP2:=if(BA1>120 and BA1<=210,BA1P2,0);
BATP3:=if(BA1>210,BA1P3,0);
BATP:=BATP1+BATP2+BATP3;
BAT1P:=IF(BATP>100,100,BATP);
BA1Q1:=BA1*0.416;
BA1Q2:=-120*0.416+(BA1+120)*0.36;
BA1Q3:=-120*0.416+(-210+120)*0.36+(BA1+210)*0.18;
BATQ1:=if(BA1<0 and BA1>=-120,BA1Q1,0);
BATQ2:=if(BA1<-120 and BA1>=-210,BA1Q2,0);
BATQ3:=if(BA1<-210,BA1Q3,0);
BATQ:=BATQ1+BATQ2+BATQ3;
BAT1Q:=IF(BATQ<-100,-100,BATQ);
BAT1:=BAT1P+BAT1Q;
原碼: M1:=EMA(C,18),linethick5,colorgreen,precision2;
BA1:=((C-M1)/M1)*2000,precision1;
BAT1:BA1*0;
for i=lbound(BA1) to datacount do begin
BA1i:=BA1[i]; BATP:=0;
if BA1i>0 and BA1i<=120 then begin
BATP:=BA1i*0.5;
end else if BA1i>120 and BA1i<=210 then begin
BATP:=120*0.416+(BA1i-120)*0.3;
end else if BA1i>210 then begin
BATP:=120*0.416+(210-120)*0.36+(BA1i-210)*0.12;
end else if BA1i<0 and BA1i>=-120 then begin
BATP:=BA1i*0.416;
end else if BA1i<-120 and BA1i>=-210 then begin
BATP:=-120*0.416+(BA1i+120)*0.36;
end else if BA1i<-210 then begin
BATP:=-120*0.416+(-210+120)*0.36+(BA1i+210)*0.18;
end;
if BATP>100 then BATP:=100;
if BATP<-100 then BATP:=-100;
BAT1[i]:=BATP;
end;
|
|
向版主報告此篇 |  |
|
2019-11-26 16:34 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|