奇狐社區論壇
在這個頁面顯示本主題全部的 10 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [問題]傻問題請教 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=24483)


由 Markchu7 在 2026-04-20 04:35 發表:

[問題]傻問題請教

起算點:=BARPOS=1;
起算點_SP:=BARSLAST(起算點)+1;
CKMM13:=MIN(13,BARPOS);
TOP13:=HHV(H,CKMM13),COLORAAAAAA; 頂13:起算點 OR (H=TOP13 AND TOP13>REF(TOP13,1)); 頂13:=if(barpos<lbound(頂13) or lbound(頂13)=0,0,頂13);
BOT13:=LLV(L,CKMM13),COLORAAAAAA; 底13:起算點 OR (L=BOT13 AND BOT13<REF(BOT13,1)); 底13:=if(barpos<lbound(底13) or lbound(底13)=0,0,底13);
B_頂13:=BARSLAST(頂13); 頂13_SP:=B_頂13+1; 頂13_SP:=if(barpos<lbound(頂13_SP) or lbound(頂13_SP)=0,起算點_SP,頂13_SP);
B_底13:=BARSLAST(底13); 底13_SP:=B_底13+1; 底13_SP:=if(barpos<lbound(底13_SP) or lbound(底13_SP)=0,起算點_SP,底13_SP);

以上公式中,
因為頂13底13從第1根K棒就存在,所以
頂13:=if(barpos<lbound(頂13) or lbound(頂13)=0,0,頂13);
底13:=if(barpos<lbound(底13) or lbound(底13)=0,0,底13);
頂13_SP:=if(barpos<lbound(頂13_SP) or lbound(頂13_SP)=0,起算點_SP,頂13_SP);
底13_SP:=if(barpos<lbound(底13_SP) or lbound(底13_SP)=0,起算點_SP,底13_SP);
這4條公式是否為多餘?其中關鍵是否為:第1個條件成立點的位置?

沒有基本功的傻問題請教!謝謝!


由 cgjj 在 2026-04-20 09:10 發表:

回覆: [問題]傻問題請教

引用:
最初由 Markchu7 發表
起算點:=BARPOS=1;
起算點_SP:=BARSLAST(起算點)+1;
CKMM13:=MIN(13,BARPOS);
TOP13:=HHV(H,CKMM13),COLORAAAAAA; 頂13:起算點 OR (H=TOP13 AND TOP13>REF(TOP13,1)); 頂13:=if(barpos<lbound(頂13) or lbound(頂13)=0,0,頂13);
BOT13:=LLV(L,CKMM13),COLORAAAAAA; 底13:起算點 OR (L=BOT13 AND BOT13<REF(BOT13,1)); 底13:=if(barpos<lbound(底13) or lbound(底13)=0,0,底13);
B_頂13:=BARSLAST(頂13); 頂13_SP:=B_頂13+1; 頂13_SP:=if(barpos<lbound(頂13_SP) or lbound(頂13_SP)=0,起算點_SP,頂13_SP);
B_底13:=BARSLAST(底13); 底13_SP:=B_底13+1; 底13_SP:=if(barpos<lbound(底13_SP) or lbound(底13_SP)=0,起算點_SP,底13_SP);

以上公式中,
因為頂13底13從第1根K棒就存在,所以
頂13:=if(barpos<lbound(頂13) or lbound(頂13)=0,0,頂13);
底13:=if(barpos<lbound(底13) or lbound(底13)=0,0,底13);
頂13_SP:=if(barpos<lbound(頂13_SP) or lbound(頂13_SP)=0,起算點_SP,頂13_SP);
底13_SP:=if(barpos<lbound(底13_SP) or lbound(底13_SP)=0,起算點_SP,底13_SP);
這4條公式是否為多餘?其中關鍵是否為:第1個條件成立點的位置?

沒有基本功的傻問題請教!謝謝!



是多餘的
因為在首根必定會成立的情況下,不需要這麼做!

無效數據的部份是否需要歸零,要看您程式特性與寫法

若對象本身如果是數值(非條件),歸零方法:
變數:=if(barpos>=LBOUND(變數) and LBOUND(變數),變數,0);

若對象本身如果是條件(僅為0和1),可這樣簡便歸零:
條件:=條件 or barpos=0;


由 Markchu7 在 2026-04-20 10:19 發表:

感謝!又多學到一招!


由 Markchu7 在 2026-04-23 10:20 發表:

小白又來了!
請教:
一,
A寫法:
條件1:=條件1 or barpos=0;
條件2:=條件2 or barpos=0;
條件3:=條件3 or barpos=0;

條件:=條件1 or 條件2 or 條件3;

B寫法:
條件1:=條件1;
條件2:=條件2;
條件3:=條件3;

條件:=條件1 or 條件2 or 條件3 or barpos=0;

B寫法會比A寫法節省資源有效率嗎?
寫在起頭或是結尾,是否有其他特別的限制?

二,
barpos=0 常常用到!設個變數名,
填空:=barpos=0;來使用是否更有效率?

感謝!


由 Markchu7 在 2026-04-23 10:36 發表:

想想不對!更詳細說明!
B寫法:
條件1:=條件1;
條件2:=條件2;
條件3:=條件3;

條件:=條件1 or 條件2 or 條件3 or barpos=0;

條件3與條件之間不會使用到條件1,2,3則可使用!
若須用到條件1,2,3則須用A寫法!

如此理解是否正確?


由 cgjj 在 2026-04-23 10:46 發表:

引用:
最初由 Markchu7 發表
小白又來了!
請教:
一,
A寫法:
條件1:=條件1 or barpos=0;
條件2:=條件2 or barpos=0;
條件3:=條件3 or barpos=0;

條件:=條件1 or 條件2 or 條件3;

B寫法:
條件1:=條件1;
條件2:=條件2;
條件3:=條件3;

條件:=條件1 or 條件2 or 條件3 or barpos=0;

B寫法會比A寫法節省資源有效率嗎?
寫在起頭或是結尾,是否有其他特別的限制?

二,
barpos=0 常常用到!設個變數名,
填空:=barpos=0;來使用是否更有效率?

感謝!



Re: 一
A 和 B 速度上幾乎差沒有多少(B當然會稍快)

若採用B
當各個子條件還有各自應用在程式內其他地方時,會容易被忘記處置!

其實也不一定必須這樣處置
實際看要您後續怎樣應用~

Re: 二
沒什必要,(自己好理解程式就可)


由 Markchu7 在 2026-04-23 13:25 發表:

感謝指導!謝謝!


由 Markchu7 在 2026-05-11 09:10 發表:

一定要搞懂!

請問以下的公式!
UP_S:=(可進場時段 AND (CROSS(變化率_21>IF((TIME>=084500 AND TIME<=103000) OR (TIME>=020000 AND TIME<=050000),51,57) AND C>AMA_21,0.8))) OR BARPOS=0;
DN_S:=(可進場時段 AND (CROSS(IF((TIME>=084500 AND TIME<=103000) OR (TIME>=020000 AND TIME<=050000),49,43)>變化率_21 AND C<AMA_21,0.8))) OR BARPOS=0;
UP_START:=REF(UP_S,1)=1 AND 變化率_21>REF(變化率_21,1);
DN_START:=REF(DN_S,1)=1 AND 變化率_21<REF(變化率_21,1);
UP_START:=UP_START AND SUM(UP_START OR DN_START,起算點_SP)=1;
DN_START:=DN_START AND SUM(UP_START OR DN_START,起算點_SP)=1;
UP_DUR:=UP_S AND SUM(UP_START OR DN_START,起算點_SP)>0;
DN_DUR:=DN_S AND SUM(UP_START OR DN_START,起算點_SP)>0;
UP:=UP_START OR UP_DUR;
DN:=DN_START OR DN_DUR;
XD:=UP-DN; XD:=IF(強出時段,0,REF(XD,BARSLAST(XD<>0))); XD:if(barpos<lbound(XD) or lbound(XD)=0,0,XD),COLOR000000,LINETHICK,NOAXIS;

是這樣寫就可以,還是UP_START,DN_START,UP_DUR,DN_DUR都要加上OR BARPOS=0?

謝謝!


由 cgjj 在 2026-05-11 09:44 發表:

引用:
最初由 Markchu7 發表
一定要搞懂!

請問以下的公式!
UP_S:=(可進場時段 AND (CROSS(變化率_21>IF((TIME>=084500 AND TIME<=103000) OR (TIME>=020000 AND TIME<=050000),51,57) AND C>AMA_21,0.8))) OR BARPOS=0;
DN_S:=(可進場時段 AND (CROSS(IF((TIME>=084500 AND TIME<=103000) OR (TIME>=020000 AND TIME<=050000),49,43)>變化率_21 AND C<AMA_21,0.8))) OR BARPOS=0;
UP_START:=REF(UP_S,1)=1 AND 變化率_21>REF(變化率_21,1);
DN_START:=REF(DN_S,1)=1 AND 變化率_21<REF(變化率_21,1);
UP_START:=UP_START AND SUM(UP_START OR DN_START,起算點_SP)=1;
DN_START:=DN_START AND SUM(UP_START OR DN_START,起算點_SP)=1;
UP_DUR:=UP_S AND SUM(UP_START OR DN_START,起算點_SP)>0;
DN_DUR:=DN_S AND SUM(UP_START OR DN_START,起算點_SP)>0;
UP:=UP_START OR UP_DUR;
DN:=DN_START OR DN_DUR;
XD:=UP-DN; XD:=IF(強出時段,0,REF(XD,BARSLAST(XD<>0))); XD:if(barpos<lbound(XD) or lbound(XD)=0,0,XD),COLOR000000,LINETHICK,NOAXIS;

是這樣寫就可以,還是UP_START,DN_START,UP_DUR,DN_DUR都要加上OR BARPOS=0?

謝謝!



以此例來說,整合為XD 前,做處置即可

UP_S:=(可進場時段 AND (CROSS(變化率_21>IF((TIME>=084500 AND TIME<=103000) OR (TIME>=020000 AND TIME<=050000),51,57) AND C>AMA_21,0.8)));
DN_S:=(可進場時段 AND (CROSS(IF((TIME>=084500 AND TIME<=103000) OR (TIME>=020000 AND TIME<=050000),49,43)>變化率_21 AND C<AMA_21,0.8)));
UP_START:=REF(UP_S,1)=1 AND 變化率_21>REF(變化率_21,1);
DN_START:=REF(DN_S,1)=1 AND 變化率_21<REF(變化率_21,1);
UP_START:=UP_START AND SUM(UP_START OR DN_START,起算點_SP)=1;
DN_START:=DN_START AND SUM(UP_START OR DN_START,起算點_SP)=1;
UP_DUR:=UP_S AND SUM(UP_START OR DN_START,起算點_SP)>0;
DN_DUR:=DN_S AND SUM(UP_START OR DN_START,起算點_SP)>0;
UP:=UP_START OR UP_DUR OR BARPOS=0;
DN:=DN_START OR DN_DUR OR BARPOS=0;
XD:=UP-DN; XD:=IF(強出時段,0,REF(XD,BARSLAST(XD<>0))); XD:if(barpos<lbound(XD) or lbound(XD)=0,0,XD),COLOR000000,LINETHICK,NOAXIS;


由 Markchu7 在 2026-05-11 13:06 發表:

收到!感謝指導!


全部時間均為台灣時間, 現在時間為13:57
在這個頁面顯示本主題全部的 10 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.