奇狐社區論壇 總頁數 (2): [1] 2 »
在這個頁面顯示本主題全部的 17 個文章

奇狐社區論壇 (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=24093)


由 Markchu7 在 2024-09-27 21:22 發表:

[問題]另開規則簡單的新主題

FK:=BARPOS=1 or ref(time,1)<084500 and time>=084500;
DBCK:=if(datatype=0 or datatype=12,FK,IF(datatype=1 or datatype=11 or datatype=2,TradeDate<>REF(TradeDate,1) or IsRegularFBar,BARPOS=1));
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
CKMM4:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=4,CKSP,4),4),LINETHICK;
CKMM15:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=15,CKSP,15),15),LINETHICK;
當日高:=HHV(H,CKSP); 當日低:=LLV(L,CKSP),COLORRED;
IF DATATYPE=12 OR DATATYPE=1 OR DATATYPE=2 THEN RG:當日高-當日低,COLOR000000,LINETHICK;
CKMM15RG:MA(IF(DBCK,REFX(H-L,1),H-L),CKMM15),LINETHICK,NOAXIS;
出場RG參數1:MAX(IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)),CKMM15RG*2);

/////(部分省略)
上下XDS:=上下UP-上下DN;
上下XDSS:=REF(上下XDS,BARSLAST(上下XDS<>0));
上下XD:if(barpos<lbound(上下XDSS) or lbound(上下XDSS)=0,0,上下XDSS),COLOR000000,LINETHICK,NOAXIS;//從首根K棒就有數值
首訊多:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=1; 首訊空:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=-1; 首訊:IF(首訊多,1,IF(首訊空,-1,0)),COLOR000000;
VERTLINE(首訊<>0 AND 首訊多),COLORRED;
VERTLINE(首訊<>0 AND 首訊空),COLORBLUE,LINEDOT;
空守:LLV(L,BARSLAST(首訊空))+出場RG參數1,COLORBLUE;
多守:HHV(H,BARSLAST(首訊多))-出場RG參數1,COLORRED;

首訊只會出現一次!
以附圖中首訊空成立為例說明規則==
1,首訊空成立-->防守:空守;
2,收盤價>防守-->防守:=多守;
如此多空交替下,畫出防守這條折線!
(因為要將後面的數值,丟回前面運算,超出能力範圍了)
謝謝!


由 cgjj 在 2024-09-29 19:17 發表:

回覆: [問題]另開規則簡單的新主題

引用:
最初由 Markchu7 發表
FK:=BARPOS=1 or ref(time,1)<084500 and time>=084500;
DBCK:=if(datatype=0 or datatype=12,FK,IF(datatype=1 or datatype=11 or datatype=2,TradeDate<>REF(TradeDate,1) or IsRegularFBar,BARPOS=1));
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
CKMM4:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=4,CKSP,4),4),LINETHICK;
CKMM15:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=15,CKSP,15),15),LINETHICK;
當日高:=HHV(H,CKSP); 當日低:=LLV(L,CKSP),COLORRED;
IF DATATYPE=12 OR DATATYPE=1 OR DATATYPE=2 THEN RG:當日高-當日低,COLOR000000,LINETHICK;
CKMM15RG:MA(IF(DBCK,REFX(H-L,1),H-L),CKMM15),LINETHICK,NOAXIS;
出場RG參數1:MAX(IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)),CKMM15RG*2);

/////(部分省略)
上下XDS:=上下UP-上下DN;
上下XDSS:=REF(上下XDS,BARSLAST(上下XDS<>0));
上下XD:if(barpos<lbound(上下XDSS) or lbound(上下XDSS)=0,0,上下XDSS),COLOR000000,LINETHICK,NOAXIS;//從首根K棒就有數值
首訊多:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=1; 首訊空:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=-1; 首訊:IF(首訊多,1,IF(首訊空,-1,0)),COLOR000000;
VERTLINE(首訊<>0 AND 首訊多),COLORRED;
VERTLINE(首訊<>0 AND 首訊空),COLORBLUE,LINEDOT;
空守:LLV(L,BARSLAST(首訊空))+出場RG參數1,COLORBLUE;
多守:HHV(H,BARSLAST(首訊多))-出場RG參數1,COLORRED;

首訊只會出現一次!
以附圖中首訊空成立為例說明規則==
1,首訊空成立-->防守:空守;
2,收盤價>防守-->防守:=多守;
如此多空交替下,畫出防守這條折線!
(因為要將後面的數值,丟回前面運算,超出能力範圍了)
謝謝!



請給我完整可以跑的公式!!!

僅給部分源碼,公式無法執行
難以見到相同狀態,不好對照測試,恕無法協助!


由 Markchu7 在 2024-09-30 10:53 發表:

重貼完整公式請協助,謝謝!

FK:=BARPOS=1 or ref(time,1)<084500 and time>=084500;
DBCK:=if(datatype=0 or datatype=12,FK,IF(datatype=1 or datatype=11 or datatype=2,TradeDate<>REF(TradeDate,1) or IsRegularFBar,BARPOS=1));
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
CKMM4:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=4,CKSP,4),4),LINETHICK;
CKMM15:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=15,CKSP,15),15),LINETHICK;
當日高:=HHV(H,CKSP); 當日低:=LLV(L,CKSP),COLORRED;
IF DATATYPE=12 OR DATATYPE=1 OR DATATYPE=2 THEN RG:當日高-當日低,COLOR000000,LINETHICK;
CKMM15RG:MA(IF(DBCK,REFX(H-L,1),H-L),CKMM15),LINETHICK,NOAXIS;
出場RG參數1:MAX(IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)),CKMM15RG*2);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
上:=LLV(H,CKMM4),COLORBLUE,LINETHICK;
下:=HHV(L,CKMM4),COLORRED,LINETHICK;
上R1S:=REF(REF(上,1),BARSLAST(上<>REF(上,1)));
下R1S:=REF(REF(下,1),BARSLAST(下<>REF(下,1)));
上R1:=if(barpos<lbound(上R1S) or lbound(上R1S)=0,上,上R1S);
下R1:=if(barpos<lbound(下R1S) or lbound(下R1S)=0,下,下R1S);
上升:=CROSS(IF(DBCK,0,上>上R1),0.8); 上降:=CROSS(IF(DBCK,0,上<上R1),0.8); 下升:=CROSS(IF(DBCK,0,下>下R1),0.8); 下降:=CROSS(IF(DBCK,0,下<下R1),0.8);

上XDS:=上升-上降; 上XD:=IF(DBCK,0,IF(SUM(上升 OR 上降,CKSP)=0,0,REF(上XDS,BARSLAST(DBCK OR 上XDS<>0)))),COLOR000000,LINETHICK,NOAXIS;
下XDS:=下升-下降; 下XD:=IF(DBCK,0,IF(SUM(下升 OR 下降,CKSP)=0,0,REF(下XDS,BARSLAST(DBCK OR 下XDS<>0)))),COLOR000000,LINETHICK,NOAXIS;
上下UP:=CROSS(上XD=1 AND 下XD=1,0.8) OR (CROSS(上<下,0.8) AND 下>REF(下,1)); 上下DN:=CROSS(上XD=-1 AND 下XD=-1,0.8) OR (CROSS(上<下,0.8) AND 上<REF(上,1));
上下XDS:=上下UP-上下DN;
上下XDSS:=REF(上下XDS,BARSLAST(上下XDS<>0));
上下XD:if(barpos<lbound(上下XDSS) or lbound(上下XDSS)=0,0,上下XDSS),COLOR000000,LINETHICK,NOAXIS;//從首根K棒就有數值
首訊多:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=1; 首訊空:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=-1; 首訊:IF(首訊多,1,IF(首訊空,-1,0)),COLOR000000;
VERTLINE(首訊<>0 AND 首訊多),COLORRED;
VERTLINE(首訊<>0 AND 首訊空),COLORBLUE,LINEDOT;

空守:LLV(L,BARSLAST(首訊空)+1)+出場RG參數1,COLORBLUE;
多守:HHV(H,BARSLAST(首訊多)+1)-出場RG參數1,COLORRED;

KLINE(O,H,L,C,0);


由 cgjj 在 2024-09-30 12:15 發表:

引用:
最初由 Markchu7 發表
重貼完整公式請協助,謝謝!

FK:=BARPOS=1 or ref(time,1)<084500 and time>=084500;
DBCK:=if(datatype=0 or datatype=12,FK,IF(datatype=1 or datatype=11 or datatype=2,TradeDate<>REF(TradeDate,1) or IsRegularFBar,BARPOS=1));
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
CKMM4:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=4,CKSP,4),4),LINETHICK;
CKMM15:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=15,CKSP,15),15),LINETHICK;
當日高:=HHV(H,CKSP); 當日低:=LLV(L,CKSP),COLORRED;
IF DATATYPE=12 OR DATATYPE=1 OR DATATYPE=2 THEN RG:當日高-當日低,COLOR000000,LINETHICK;
CKMM15RG:MA(IF(DBCK,REFX(H-L,1),H-L),CKMM15),LINETHICK,NOAXIS;
出場RG參數1:MAX(IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)),CKMM15RG*2);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
上:=LLV(H,CKMM4),COLORBLUE,LINETHICK;
下:=HHV(L,CKMM4),COLORRED,LINETHICK;
上R1S:=REF(REF(上,1),BARSLAST(上<>REF(上,1)));
下R1S:=REF(REF(下,1),BARSLAST(下<>REF(下,1)));
上R1:=if(barpos<lbound(上R1S) or lbound(上R1S)=0,上,上R1S);
下R1:=if(barpos<lbound(下R1S) or lbound(下R1S)=0,下,下R1S);
上升:=CROSS(IF(DBCK,0,上>上R1),0.8); 上降:=CROSS(IF(DBCK,0,上<上R1),0.8); 下升:=CROSS(IF(DBCK,0,下>下R1),0.8); 下降:=CROSS(IF(DBCK,0,下<下R1),0.8);

上XDS:=上升-上降; 上XD:=IF(DBCK,0,IF(SUM(上升 OR 上降,CKSP)=0,0,REF(上XDS,BARSLAST(DBCK OR 上XDS<>0)))),COLOR000000,LINETHICK,NOAXIS;
下XDS:=下升-下降; 下XD:=IF(DBCK,0,IF(SUM(下升 OR 下降,CKSP)=0,0,REF(下XDS,BARSLAST(DBCK OR 下XDS<>0)))),COLOR000000,LINETHICK,NOAXIS;
上下UP:=CROSS(上XD=1 AND 下XD=1,0.8) OR (CROSS(上<下,0.8) AND 下>REF(下,1)); 上下DN:=CROSS(上XD=-1 AND 下XD=-1,0.8) OR (CROSS(上<下,0.8) AND 上<REF(上,1));
上下XDS:=上下UP-上下DN;
上下XDSS:=REF(上下XDS,BARSLAST(上下XDS<>0));
上下XD:if(barpos<lbound(上下XDSS) or lbound(上下XDSS)=0,0,上下XDSS),COLOR000000,LINETHICK,NOAXIS;//從首根K棒就有數值
首訊多:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=1; 首訊空:=SUM(上下XD<>0,CKSP)=1 AND 上下XD=-1; 首訊:IF(首訊多,1,IF(首訊空,-1,0)),COLOR000000;
VERTLINE(首訊<>0 AND 首訊多),COLORRED;
VERTLINE(首訊<>0 AND 首訊空),COLORBLUE,LINEDOT;

空守:LLV(L,BARSLAST(首訊空)+1)+出場RG參數1,COLORBLUE;
多守:HHV(H,BARSLAST(首訊多)+1)-出場RG參數1,COLORRED;

KLINE(O,H,L,C,0);



按您給的公式~~~
空守:LLV(L,BARSLAST(首訊空)+1)+出場RG參數1,COLORBLUE;
多守:HHV(H,BARSLAST(首訊多)+1)-出場RG參數1,COLORRED;

若首訊為空,空守為有效數列,多守為無效數列
若首訊為多,多守為有效數列,空守為無效數列

也就是說
僅有單邊的守存在有效數列,這是您程式中最大的問題,根本設計錯誤!!!

例如
首訊為多時,空守為無效數列
用空守[i]去取值當防守,得到的可能會是個亂數
千萬不要對一個無效數列去取值使用!


由 Markchu7 在 2024-09-30 21:21 發表:

果然是程式小白!不僅詞不達意,兼且多此一舉!

報告總版主,根本沒有多守,空守這兩條線!只有一條線'防守',且讓我以今日盤勢之時間順序做一說明!

1,TIME=084620,首訊條件成立且=1,此時在下方畫防守:=HHV(H,BARSLAST(首訊)+1)-出場RG參數1!
2,TIME=085900,跌破防守成立,此時在上方畫防守:=LLV(L,BARSLAST(跌破防守)+1)+出場RG參數1!
3,TIME=090200,突破防守成立,此時在下方畫防守:=HHV(H,BARSLAST(突破防守)+1)-出場RG參數1!
如此依序的畫防守!
如果首訊=-1,就相反是一上一下的防守畫法!
就像附圖一般!
感謝協助!


由 cgjj 在 2024-09-30 22:13 發表:

引用:
最初由 Markchu7 發表
果然是程式小白!不僅詞不達意,兼且多此一舉!

報告總版主,根本沒有多守,空守這兩條線!只有一條線'防守',且讓我以今日盤勢之時間順序做一說明!

1,TIME=084620,首訊條件成立且=1,此時在下方畫防守:=HHV(H,BARSLAST(首訊)+1)-出場RG參數1!
2,TIME=085900,跌破防守成立,此時在上方畫防守:=LLV(L,BARSLAST(跌破防守)+1)+出場RG參數1!
3,TIME=090200,突破防守成立,此時在下方畫防守:=HHV(H,BARSLAST(突破防守)+1)-出場RG參數1!
如此依序的畫防守!
如果首訊=-1,就相反是一上一下的防守畫法!
就像附圖一般!
感謝協助!



原碼:
FK:=BARPOS=1 or ref(time,1)<084500 and time>=084500; DBCK:=if(datatype=0 or datatype=12,FK,IF(datatype=1 or datatype=11 or datatype=2,TradeDate<>REF(TradeDate,1) or IsRegularFBar,BARPOS=1)); CKSP:=BARSLAST(DBCK)+1,LINETHICK; CKMM4:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=4,CKSP,4),4),LINETHICK; CKMM15:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=15,CKSP,15),15),LINETHICK; 當日高:=HHV(H,CKSP); 當日低:=LLV(L,CKSP),COLORRED; IF DATATYPE=12 OR DATATYPE=1 OR DATATYPE=2 THEN RG:當日高-當日低,COLOR000000,LINETHICK; CKMM15RG:MA(IF(DBCK,REFX(H-L,1),H-L),CKMM15),LINETHICK,NOAXIS; 出場RG參數1:MAX(IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)),CKMM15RG*2) linethick; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 上:=LLV(H,CKMM4),COLORBLUE,LINETHICK; 下:=HHV(L,CKMM4),COLORRED,LINETHICK; 上R1S:=REF(REF(上,1),BARSLAST(上<>REF(上,1))); 下R1S:=REF(REF(下,1),BARSLAST(下<>REF(下,1))); 上R1:=if(barpos<lbound(上R1S) or lbound(上R1S)=0,上,上R1S); 下R1:=if(barpos<lbound(下R1S) or lbound(下R1S)=0,下,下R1S); 上升:=CROSS(IF(DBCK,0,上>上R1),0.8); 上降:=CROSS(IF(DBCK,0,上<上R1),0.8); 下升:=CROSS(IF(DBCK,0,下>下R1),0.8); 下降:=CROSS(IF(DBCK,0,下<下R1),0.8); 上XDS:=上升-上降; 上XD:=IF(DBCK,0,IF(SUM(上升 OR 上降,CKSP)=0,0,REF(上XDS,BARSLAST(DBCK OR 上XDS<>0)))),COLOR000000,LINETHICK,NOAXIS; 下XDS:=下升-下降; 下XD:=IF(DBCK,0,IF(SUM(下升 OR 下降,CKSP)=0,0,REF(下XDS,BARSLAST(DBCK OR 下XDS<>0)))),COLOR000000,LINETHICK,NOAXIS; 上下UP:=CROSS(上XD=1 AND 下XD=1,0.8) OR (CROSS(上<下,0.8) AND 下>REF(下,1)); 上下DN:=CROSS(上XD=-1 AND 下XD=-1,0.8) OR (CROSS(上<下,0.8) AND 上<REF(上,1)); 上下XDS:=上下UP-上下DN; 防守:BARSSINCE(上下XDS<>0)*0 linethick0; 多空:C*0 linethick; HH:=H; LL:=L; CC:=C; Dir:=0; for i=lbound(DBCK) to datacount do begin 多空[i]:=Dir; if DBCK[i] then Dir:=0; if Dir=0 then begin Dir:=上下XDS[i]; if Dir=1 then begin MHL:=HH[i]; 防守[i]:=MHL-出場RG參數1[i]; end else if Dir=-1 then begin MHL:=LL[i]; 防守[i]:=MHL+出場RG參數1[i]; end; end else if Dir=1 then begin if HH[i]>MHL then MHL:=HH[i]; 防守[i]:=MHL-出場RG參數1[i]; if CC[i]<防守[i] then begin Dir:=-1; MHL:=LL[i]; end; end else if Dir=-1 then begin if LL[i]<MHL then MHL:=LL[i]; 防守[i]:=MHL+出場RG參數1[i]; if CC[i]>防守[i] then begin Dir:=1; MHL:=HH[i]; end; end; end; PARTLINE(sum(多空,2)=2,防守) colorred; PARTLINE(sum(多空,2)=-2,防守) colorblue;


由 Markchu7 在 2024-10-01 08:33 發表:

謝謝總版主鼎力相助!這兩天好好體會學習!
十分感激!


由 Markchu7 在 2024-10-01 08:38 發表:

感謝總版主鼎力相助!這兩天好好體會觀察!
十分感激!


由 Markchu7 在 2024-10-01 10:57 發表:

感謝總版主的協助!使用後發現3個疑問,還請指導!
1,附圖中垂直虛線位置為上下XDS第一個不為0成立之K棒為何第一個多空<>0成立不是在此根K棒?是否與2的原因有關?
2,上下XDS第一個不為0成立之K棒的次一根K棒上下XDS=0有關此狀況是否加一句REF(上下XDS,BARSLAST(上下XDS<>0));可以解決?
3,在多空=1的狀態下,防守應該是只高不低,但圖中A,B兩處卻呈現下降情形!
以上問題,有勞總版主指導!謝謝!


由 Markchu7 在 2024-10-01 10:58 發表:

補圖!


由 cgjj 在 2024-10-01 11:20 發表:

引用:
最初由 Markchu7 發表
感謝總版主的協助!使用後發現3個疑問,還請指導!
1,附圖中垂直虛線位置為上下XDS第一個不為0成立之K棒為何第一個多空<>0成立不是在此根K棒?是否與2的原因有關?
2,上下XDS第一個不為0成立之K棒的次一根K棒上下XDS=0有關此狀況是否加一句REF(上下XDS,BARSLAST(上下XDS<>0));可以解決?
3,在多空=1的狀態下,防守應該是只高不低,但圖中A,B兩處卻呈現下降情形!
以上問題,有勞總版主指導!謝謝!



Re1&2:
多空這個變數,揭示的是該根做動作前的狀態,並非是該根做動作後的狀態
例如原有狀態是處於多方,碰到收盤價跌破防守價,變化為空方
多空這個變數在此根會被記載為多方,於下一根開始記載為空方
同樣的,上下XDS第一個不為0成立之K棒
做動作前它的多空=0,做動作後才不為0

Re3
那是因為 "出場RG參數1" 數值在該處有變化所引起的!


由 Markchu7 在 2024-10-01 13:07 發表:

感謝總版主的解說!
因為防守關係到多空數值的變化!請問可以設定成
HHV(MHL-出場RG參數1[i],XXX)之類只升不降或只降不升的形式嗎?
程式小白的提問,勿見怪!


由 cgjj 在 2024-10-01 13:15 發表:

引用:
最初由 Markchu7 發表
感謝總版主的解說!
因為防守關係到多空數值的變化!請問可以設定成
HHV(MHL-出場RG參數1[i],XXX)之類只升不降或只降不升的形式嗎?
程式小白的提問,勿見怪!



改為
HHV(MHL-出場RG參數1[i],XXX)
也是相同的問題,目前迴圈中就是如此算的!

出場RG參數1
若為常數(固定值),就會只升不降或只降不升
若為數列,值忽大忽小,就無法只升不降或只降不升


由 Markchu7 在 2024-10-01 13:26 發表:

所以改為
出場RG參數1:IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)) linethick;
就可以式嗎?


由 cgjj 在 2024-10-01 13:45 發表:

引用:
最初由 Markchu7 發表
所以改為
出場RG參數1:IF(RG<=150,30.1,IF(RG>150 AND RG<=250,40.1,50.1)) linethick;
就可以式嗎?



未必可以
因為RG是值會變化的數列
故得到的 出場RG參數1 並非固定值


全部時間均為台灣時間, 現在時間為23:23 總頁數 (2): [1] 2 »
在這個頁面顯示本主題全部的 17 個文章


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

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