![]() |
在這個頁面顯示本主題全部的 8 個文章 |
奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- IF then else 迴圈 之寫法 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=22170)
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迴圈方式,效能上何者為優呢?
回覆: 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迴圈方式,效能上何者為優呢?
謝謝總版主,我重新修改了,麻煩您幫我
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;
引用:
最初由 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;
謝謝總版主,您的公式結果完全與我的結果吻合
但是..................
迴圈公式測試結果回報:我使用這公式加入<數據列表>(定製表頭欄目)中,運算1700檔個股,效能測試結果如下
我的土法方式3秒VS版主迴圈公式12秒
以下提問麻煩解答
1. 迴圈方式效能反而拖累,為了效能考量是否應該採用我原來的方式呢?
2. 您的寫法應該是比較優質的語法,為何效能反而比較慢呢? 提升奇狐的運算效能關鍵到底為何?
3. 一般學習寫程式者,應該是需要學會這種 Else if 的東西,但是我比較能夠理解我自己的條件式(雖然比較冗長)
請問我是否應該繼續使用自己的方式?
4. 請問我如果只是為了跑出正確結果,有需要學習嗎?
引用:
最初由 tycoon868 發表
謝謝總版主,您的公式結果完全與我的結果吻合
但是..................
迴圈公式測試結果回報:我使用這公式加入<數據列表>(定製表頭欄目)中,運算1700檔個股,效能測試結果如下
我的土法方式3秒VS版主迴圈公式12秒
以下提問麻煩解答
1. 迴圈方式效能反而拖累,為了效能考量是否應該採用我原來的方式呢?
2. 您的寫法應該是比較優質的語法,為何效能反而比較慢呢? 提升奇狐的運算效能關鍵到底為何?
3. 一般學習寫程式者,應該是需要學會這種 Else if 的東西,但是我比較能夠理解我自己的條件式(雖然比較冗長)
請問我是否應該繼續使用自己的方式?
4. 請問我如果只是為了跑出正確結果,有需要學習嗎?
充分了解,感謝
引用:
最初由 tycoon868 發表
充分了解,感謝
| 全部時間均為台灣時間, 現在時間為10:56 | 在這個頁面顯示本主題全部的 8 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.