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

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


由 Markchu7 在 2024-02-05 21:57 發表:

[問題]以前蒙總版主協助之公式再請協助

分鐘首K:=ISREGULARFBAR;
換日首K:=TRADEDATE<>REF(TRADEDATE,1);
歷史首K:=BARPOS=1;
DBCK:=IF((DATATYPE=1 OR DATATYPE=12) AND STKLABEL='FITX1+',TIME=084600 OR TIME=150100,IF(DATATYPE=1 OR DATATYPE=11 OR DATATYPE=2,分鐘首K OR 換日首K,歷史首K)),LINETHICK;
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
外盤:=STKINDI('','新盤差引用.外盤(0)',0,0),COLORRED,LINETHICK0;
內盤:=STKINDI('','新盤差引用.內盤(1)',0,0),COLORBLUE,LINETHICK0;
POWER:(外盤-內盤),COLOR000000,LINETHICK2;
NN:=300; Now多空:=0;
ZAry:=POWER*0; ST:=lbound(ZAry);
F多守:=POWER[ST]-NN; F空守:=POWER[ST]+NN;
多空:ZAry linethick;
籌守:ZAry linethick COLOR000000;
for i= ST+1 to datacount do begin
多空[i]:=Now多空;
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*NN;
end else if Now多空=1 then begin //多方
籌守[i]:=max(POWER[i]-NN,籌守[i-1]);
if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空
多空[i]:=-1; 籌守[i]:=POWER[i]+NN;
end;
end else if Now多空=-1 then begin //空方
籌守[i]:=min(POWER[i]+NN,籌守[i-1]);
if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多
多空[i]:=1; 籌守[i]:=POWER[i]-NN;
end;
end;
Now多空:=多空[i];
end;
破過:=(ref(多空,1)<>多空)*多空;
VERTLINE(破過=1),COLORRED;
VERTLINE(破過=-1),COLORBLUE,LINEDOT;
PARTLINE(多空=0,F多守) COLORBLUE,LINEDOT;
PARTLINE(多空=0,F空守) COLORRED,LINEDOT;
PARTLINE(sum(多空<>0,2)=2,籌守) COLOR000000,LINEDOT;

1,以上公式中的常數NN可否是數列?


由 Markchu7 在 2024-02-05 22:11 發表:

附圖是將'盤差'改為'收盤價'帶入!
以下是源碼!
分鐘首K:=ISREGULARFBAR;
換日首K:=TRADEDATE<>REF(TRADEDATE,1);
歷史首K:=BARPOS=1;
DBCK:=IF((DATATYPE=1 OR DATATYPE=12) AND STKLABEL='FITX1+',TIME=084600 OR TIME=150100,IF(DATATYPE=1 OR DATATYPE=11 OR DATATYPE=2,分鐘首K OR 換日首K,歷史首K)),LINETHICK;
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
//CKMM13:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=13,CKSP,13),13),LINETHICK;
//CKMM13RG:MA(H-L,CKMM13),LINETHICK;

POWER:C,COLOR000000,LINETHICK2;
NN:=30; Now多空:=0;
ZAry:=POWER*0; ST:=lbound(ZAry);
F多守:=POWER[ST]-NN; F空守:=POWER[ST]+NN;
多空:ZAry linethick;
籌守:ZAry linethick COLOR000000;
for i= ST+1 to datacount do begin
多空[i]:=Now多空;
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*NN;
end else if Now多空=1 then begin //多方
籌守[i]:=max(POWER[i]-NN,籌守[i-1]);
if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空
多空[i]:=-1; 籌守[i]:=POWER[i]+NN;
end;
end else if Now多空=-1 then begin //空方
籌守[i]:=min(POWER[i]+NN,籌守[i-1]);
if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多
多空[i]:=1; 籌守[i]:=POWER[i]-NN;
end;
end;
Now多空:=多空[i];
end;
破過:=(ref(多空,1)<>多空)*多空;
VERTLINE(破過=1),COLORRED;
VERTLINE(破過=-1),COLORBLUE,LINEDOT;
PARTLINE(多空=0,F多守) COLORBLUE,LINEDOT;
PARTLINE(多空=0,F空守) COLORRED,LINEDOT;

PARTLINE(sum(多空<>0,2)=2,籌守) COLOR000000,LINEDOT;

PARTLINE(多空=0,REF(L+NN,BARSLAST(DBCK))) COLOR00FF00,LINETHICK2;
PARTLINE(多空=0,REF(H-NN,BARSLAST(DBCK))) COLORFF00FF,LINETHICK2;

想請總版主幫忙:
1,NN可以是常數或是數列!
2,將F空守改為REF(L+NN,BARSLAST(DBCK));
F多守改為REF(H-NN,BARSLAST(DBCK));

不知邏輯有無錯誤之處?實際是否可行?
請協助!謝謝!


由 cgjj 在 2024-02-06 09:09 發表:

回覆: [問題]以前蒙總版主協助之公式再請協助

引用:
最初由 Markchu7 發表
分鐘首K:=ISREGULARFBAR;
換日首K:=TRADEDATE<>REF(TRADEDATE,1);
歷史首K:=BARPOS=1;
DBCK:=IF((DATATYPE=1 OR DATATYPE=12) AND STKLABEL='FITX1+',TIME=084600 OR TIME=150100,IF(DATATYPE=1 OR DATATYPE=11 OR DATATYPE=2,分鐘首K OR 換日首K,歷史首K)),LINETHICK;
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
外盤:=STKINDI('','新盤差引用.外盤(0)',0,0),COLORRED,LINETHICK0;
內盤:=STKINDI('','新盤差引用.內盤(1)',0,0),COLORBLUE,LINETHICK0;
POWER:(外盤-內盤),COLOR000000,LINETHICK2;
NN:=300; Now多空:=0;
ZAry:=POWER*0; ST:=lbound(ZAry);
F多守:=POWER[ST]-NN; F空守:=POWER[ST]+NN;
多空:ZAry linethick;
籌守:ZAry linethick COLOR000000;
for i= ST+1 to datacount do begin
多空[i]:=Now多空;
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*NN;
end else if Now多空=1 then begin //多方
籌守[i]:=max(POWER[i]-NN,籌守[i-1]);
if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空
多空[i]:=-1; 籌守[i]:=POWER[i]+NN;
end;
end else if Now多空=-1 then begin //空方
籌守[i]:=min(POWER[i]+NN,籌守[i-1]);
if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多
多空[i]:=1; 籌守[i]:=POWER[i]-NN;
end;
end;
Now多空:=多空[i];
end;
破過:=(ref(多空,1)<>多空)*多空;
VERTLINE(破過=1),COLORRED;
VERTLINE(破過=-1),COLORBLUE,LINEDOT;
PARTLINE(多空=0,F多守) COLORBLUE,LINEDOT;
PARTLINE(多空=0,F空守) COLORRED,LINEDOT;
PARTLINE(sum(多空<>0,2)=2,籌守) COLOR000000,LINEDOT;

1,以上公式中的常數NN可否是數列?



將 NN:=300;
改為 NN:=XXX; //其中XXX為您欲帶入的數列

F多守:=POWER[ST]-NN; F空守:=POWER[ST]+NN;

F多守:=POWER[ST]-NN[ST]; F空守:=POWER[ST]+NN[ST];

其餘 NN
改為 NN[i]


由 cgjj 在 2024-02-06 09:44 發表:

引用:
最初由 Markchu7 發表
附圖是將'盤差'改為'收盤價'帶入!
以下是源碼!
分鐘首K:=ISREGULARFBAR;
換日首K:=TRADEDATE<>REF(TRADEDATE,1);
歷史首K:=BARPOS=1;
DBCK:=IF((DATATYPE=1 OR DATATYPE=12) AND STKLABEL='FITX1+',TIME=084600 OR TIME=150100,IF(DATATYPE=1 OR DATATYPE=11 OR DATATYPE=2,分鐘首K OR 換日首K,歷史首K)),LINETHICK;
CKSP:=BARSLAST(DBCK)+1,LINETHICK;
//CKMM13:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=13,CKSP,13),13),LINETHICK;
//CKMM13RG:MA(H-L,CKMM13),LINETHICK;

POWER:C,COLOR000000,LINETHICK2;
NN:=30; Now多空:=0;
ZAry:=POWER*0; ST:=lbound(ZAry);
F多守:=POWER[ST]-NN; F空守:=POWER[ST]+NN;
多空:ZAry linethick;
籌守:ZAry linethick COLOR000000;
for i= ST+1 to datacount do begin
多空[i]:=Now多空;
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*NN;
end else if Now多空=1 then begin //多方
籌守[i]:=max(POWER[i]-NN,籌守[i-1]);
if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空
多空[i]:=-1; 籌守[i]:=POWER[i]+NN;
end;
end else if Now多空=-1 then begin //空方
籌守[i]:=min(POWER[i]+NN,籌守[i-1]);
if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多
多空[i]:=1; 籌守[i]:=POWER[i]-NN;
end;
end;
Now多空:=多空[i];
end;
破過:=(ref(多空,1)<>多空)*多空;
VERTLINE(破過=1),COLORRED;
VERTLINE(破過=-1),COLORBLUE,LINEDOT;
PARTLINE(多空=0,F多守) COLORBLUE,LINEDOT;
PARTLINE(多空=0,F空守) COLORRED,LINEDOT;

PARTLINE(sum(多空<>0,2)=2,籌守) COLOR000000,LINEDOT;

PARTLINE(多空=0,REF(L+NN,BARSLAST(DBCK))) COLOR00FF00,LINETHICK2;
PARTLINE(多空=0,REF(H-NN,BARSLAST(DBCK))) COLORFF00FF,LINETHICK2;

想請總版主幫忙:
1,NN可以是常數或是數列!
2,將F空守改為REF(L+NN,BARSLAST(DBCK));
F多守改為REF(H-NN,BARSLAST(DBCK));

不知邏輯有無錯誤之處?實際是否可行?
請協助!謝謝!



原碼:
分鐘首K:=ISREGULARFBAR; 換日首K:=TRADEDATE<>REF(TRADEDATE,1); 歷史首K:=BARPOS=1; DBCK:=IF((DATATYPE=1 OR DATATYPE=12) AND STKLABEL='FITX1+',TIME=084600 OR TIME=150100,IF(DATATYPE=1 OR DATATYPE=11 OR DATATYPE=2,分鐘首K OR 換日首K,歷史首K)),LINETHICK; CKSP:=BARSLAST(DBCK)+1,LINETHICK; //CKMM13:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=13,CKSP,13),13),LINETHICK; //CKMM13RG:MA(H-L,CKMM13),LINETHICK; POWER:C,COLOR000000,LINETHICK2; HH:=H; LL:=L; DBCKSP:=BARSLAST(DBCK); ZAry:=DBCKSP*0; NN:=ZAry+XXX; //XXX請帶入常數或數列 ST:=lbound(DBCKSP); RSP:=DBCKSP[ST]; Now多空:=0; F空守:=LL[ST-RSP]+NN[ST-RSP]; F多守:=HH[ST-RSP]-NN[ST-RSP]; 多空:ZAry linethick; 籌守:ZAry linethick COLOR000000; for i= ST+1 to datacount do begin 多空[i]:=Now多空; RSP:=DBCKSP[i]; if Now多空=0 then begin //初始 多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]); if 多空[i]=1 then 籌守[i]:=HH[i-RSP]-NN[i-RSP]; if 多空[i]=-1 then 籌守[i]:=LL[i-RSP]+NN[i-RSP]; end else if Now多空=1 then begin //多方 籌守[i]:=max(HH[i-RSP]-NN[i-RSP],籌守[i-1]); if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空 多空[i]:=-1; 籌守[i]:=LL[i-RSP]+NN[i-RSP]; end; end else if Now多空=-1 then begin //空方 籌守[i]:=min(LL[i-RSP]+NN[i-RSP],籌守[i-1]); if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多 多空[i]:=1; 籌守[i]:=HH[i-RSP]-NN[i-RSP]; end; end; Now多空:=多空[i]; end; 破過:=(ref(多空,1)<>多空)*多空; VERTLINE(破過=1),COLORRED; VERTLINE(破過=-1),COLORBLUE,LINEDOT; PARTLINE(多空=0,F多守) COLORBLUE,LINEDOT; PARTLINE(多空=0,F空守) COLORRED,LINEDOT; PARTLINE(sum(多空<>0,2)=2,籌守) COLOR000000,LINEDOT; PARTLINE(多空=0,REF(L+NN,DBCKSP)) COLOR00FF00,LINETHICK2; PARTLINE(多空=0,REF(H-NN,DBCKSP)) COLORFF00FF,LINETHICK2;


由 Markchu7 在 2024-02-06 09:47 發表:

感謝總版主協助!
祝奇狐團隊新春愉快,業績蒸蒸日上!


由 Markchu7 在 2024-02-06 10:37 發表:

貼圖中,主圖是新公式,副圖是舊公式!
是我未說明清楚,所以跟我想要的好像有一些差異!


由 Markchu7 在 2024-02-06 10:38 發表:

0849已跌破F多守,所以多空=-1,
而籌守則應為18006
只有第一次的'過或破'是以H,L來決定
之後的'過或破'都是以C來決定
粗線條就是個人希望得到的劃線效果!


由 cgjj 在 2024-02-06 11:04 發表:

引用:
最初由 Markchu7 發表
0849已跌破F多守,所以多空=-1,
而籌守則應為18006
只有第一次的'過或破'是以H,L來決定
之後的'過或破'都是以C來決定
粗線條就是個人希望得到的劃線效果!



原碼:
分鐘首K:=ISREGULARFBAR; 換日首K:=TRADEDATE<>REF(TRADEDATE,1); 歷史首K:=BARPOS=1; DBCK:=IF((DATATYPE=1 OR DATATYPE=12) AND STKLABEL='FITX1+',TIME=084600 OR TIME=150100,IF(DATATYPE=1 OR DATATYPE=11 OR DATATYPE=2,分鐘首K OR 換日首K,歷史首K)),LINETHICK; CKSP:=BARSLAST(DBCK)+1,LINETHICK; //CKMM13:=IF(DATATYPE=12 OR DATATYPE=11 OR DATATYPE=1 OR DATATYPE=2,IF(CKSP<=13,CKSP,13),13),LINETHICK; //CKMM13RG:MA(H-L,CKMM13),LINETHICK; POWER:C,COLOR000000,LINETHICK2; HH:=H; LL:=L; DBCKSP:=BARSLAST(DBCK); ZAry:=DBCKSP*0; NN:=ZAry+XXX; //XXX請帶入常數或數列 ST:=lbound(DBCKSP); RSP:=DBCKSP[ST]; Now多空:=0; F空守:=LL[ST-RSP]+NN[ST-RSP]; F多守:=HH[ST-RSP]-NN[ST-RSP]; 多空:ZAry linethick; 籌守:ZAry linethick COLOR000000; for i= ST+1 to datacount do begin 多空[i]:=Now多空; RSP:=DBCKSP[i]; if Now多空=0 then begin //初始 多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]); if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*NN[i]; end else if Now多空=1 then begin //多方 籌守[i]:=max(POWER[i]-NN[i],籌守[i-1]); if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空 多空[i]:=-1; 籌守[i]:=POWER[i]+NN[i]; end; end else if Now多空=-1 then begin //空方 籌守[i]:=min(POWER[i]+NN[i],籌守[i-1]); if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多 多空[i]:=1; 籌守[i]:=POWER[i]-NN[i]; end; end; Now多空:=多空[i]; end; 破過:=(ref(多空,1)<>多空)*多空; VERTLINE(破過=1),COLORRED; VERTLINE(破過=-1),COLORBLUE,LINEDOT; PARTLINE(多空=0,F多守) COLORBLUE,LINEDOT; PARTLINE(多空=0,F空守) COLORRED,LINEDOT; PARTLINE(sum(多空<>0,2)=2,籌守) COLOR000000,LINEDOT; PARTLINE(多空=0,REF(L+NN,DBCKSP)) COLOR00FF00,LINETHICK2; PARTLINE(多空=0,REF(H-NN,DBCKSP)) COLORFF00FF,LINETHICK2;


由 Markchu7 在 2024-02-06 11:24 發表:

正是我要的效果,感謝總版主!
祝您新年快樂!


由 cgjj 在 2024-02-06 11:45 發表:

引用:
最初由 Markchu7 發表
正是我要的效果,感謝總版主!
祝您新年快樂!



不客氣,也祝您新年快樂


由 Markchu7 在 2024-02-06 13:10 發表:

請問:畫這二條粗黑線的公式要如何寫?


由 cgjj 在 2024-02-06 13:20 發表:

引用:
最初由 Markchu7 發表
請問:畫這二條粗黑線的公式要如何寫?


看不清楚!
圖中大範圍僅一條,另一條是?


由 Markchu7 在 2024-02-06 17:43 發表:

就是連接F空守~籌守 及 就是連接F多守~籌守
謝謝!


由 Markchu7 在 2024-02-06 18:42 發表:

研究出來了!如下
DRAWLINE(多空=0 AND REFX(多空,1)<>0,F空守,SUM(多空<>0,CKSP)=1,籌守,0),COLOR000000,LINETHICK3,PXDN6;
DRAWLINE(多空=0 AND REFX(多空,1)<>0,F多守,SUM(多空<>0,CKSP)=1,籌守,0),COLOR000000,LINETHICK3,PXDN6;

請問總版主:有關條件之公式寫法有無更精簡的寫法?
謝謝!


由 cgjj 在 2024-02-07 00:11 發表:

引用:
最初由 Markchu7 發表
研究出來了!如下
DRAWLINE(多空=0 AND REFX(多空,1)<>0,F空守,SUM(多空<>0,CKSP)=1,籌守,0),COLOR000000,LINETHICK3,PXDN6;
DRAWLINE(多空=0 AND REFX(多空,1)<>0,F多守,SUM(多空<>0,CKSP)=1,籌守,0),COLOR000000,LINETHICK3,PXDN6;

請問總版主:有關條件之公式寫法有無更精簡的寫法?
謝謝!



單就此例目前的狀況而言,可簡化為:
DRAWLINE(多空=0,F空守,多空<>0,籌守,0),COLOR000000,LINETHICK3,PXDN6;
DRAWLINE(多空=0,F多守,多空<>0,籌守,0),COLOR000000,LINETHICK3,PXDN6;


由 Markchu7 在 2024-02-07 09:23 發表:

感謝指導!
請問DRAWLINE函數是'第一個'COND2之成立K,並去找'最後一個'COND1之成立K這樣嗎?


由 cgjj 在 2024-02-07 10:04 發表:

引用:
最初由 Markchu7 發表
感謝指導!
請問DRAWLINE函數是'第一個'COND2之成立K,並去找'最後一個'COND1之成立K這樣嗎?



DRAWLINE(COND1,PRICE1,COND2,PRICE2,EXPAND)
當COND1條件滿足時,在PRICE1位置畫直線起點
當COND2條件滿足時,在PRICE2位置畫直線終點


由 Markchu7 在 2024-02-07 11:03 發表:

感謝!


由 Markchu7 在 2024-02-20 10:14 發表:

如附圖!
對不起!個人能力有限,光看公式尚無法精確地明瞭,必須碰到了才知道!
有關開盤第一根K棒就漲過籌空守或跌破籌多守似乎有些出入!
第一根K棒收盤已經跌破籌多守,
所以應該是多空=-1!

思考的是設一個RANGE為最大虧損!
以此例子而言,個人
1,在第一根K棒沒有進場,如果後面價格一直下跌,將會沒有進場機會!
2,假如有進場,那最多就是虧損XXX這樣的RANGE而已!

不好意思!可以請總版主再幫我修改嗎?
謝謝!


由 cgjj 在 2024-02-20 16:49 發表:

引用:
最初由 Markchu7 發表
如附圖!
對不起!個人能力有限,光看公式尚無法精確地明瞭,必須碰到了才知道!
有關開盤第一根K棒就漲過籌空守或跌破籌多守似乎有些出入!
第一根K棒收盤已經跌破籌多守,
所以應該是多空=-1!

思考的是設一個RANGE為最大虧損!
以此例子而言,個人
1,在第一根K棒沒有進場,如果後面價格一直下跌,將會沒有進場機會!
2,假如有進場,那最多就是虧損XXX這樣的RANGE而已!

不好意思!可以請總版主再幫我修改嗎?
謝謝!



按您的規則
在60秒線首根K棒,[籌守]和[多空]均等於零
第二根才開始才會有可算的數值
故首根根本不會有進場的動作

別忘了!你的初始條件是
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
它是需要前一根的值來算的!!! (至少需要兩根K棒)


由 Markchu7 在 2024-02-20 17:46 發表:

感謝總版主的說明,如此一來,算是了解了!
謝謝!


由 Markchu7 在 2024-09-27 10:49 發表:

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;
預F空守:LLV(L,BARSLAST(首訊空))+出場RG參數1,COLORBLUE;
預F多守:HHV(H,BARSLAST(首訊多))-出場RG參數1,COLORRED;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
POWER:=C,COLOR000000,LINETHICK2;
HH:=H; LL:=L; BL_DBCK:=BARSLAST(DBCK);

ZAry:=BL_DBCK*0; 出場RG參數2:=ZAry+出場RG參數1; //XXX請帶入常數或數列
ST:=lbound(BL_DBCK); RSP:=BL_DBCK[ST]; Now多空:=0;
F空守:LL[ST-RSP]+出場RG參數2[ST-RSP],COLORBLUE,LINETHICK1;
F多守:HH[ST-RSP]-出場RG參數2[ST-RSP],COLORRED,LINETHICK1;

多空:ZAry linethick;
籌守:ZAry linethick COLOR000000,LINETHICK2;
for i= ST+1 to datacount do begin
多空[i]:=Now多空; RSP:=BL_DBCK[i];
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*出場RG參數2[i];
end else if Now多空=1 then begin //多方
籌守[i]:=max(POWER[i]-出場RG參數2[i],籌守[i-1]);
if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空
多空[i]:=-1; 籌守[i]:=POWER[i]+出場RG參數2[i];
end;
end else if Now多空=-1 then begin //空方
籌守[i]:=min(POWER[i]+出場RG參數2[i],籌守[i-1]);
if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多
多空[i]:=1; 籌守[i]:=POWER[i]-出場RG參數2[i];
end;
end;
Now多空:=多空[i];
end;
破過:=(ref(多空,1)<>多空)*多空;

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


重新貼上公式,加上要添加的部分(總版主指導部分僅有更改為自己容易記憶的變數名稱)!

因為會有全部時間都沒有訊號的狀況!
所以請總版主幫我更改規則為===
1,第一個多空<>0的訊號早於首訊<>0訊號,則沿用原本的'F空守'與'F多守'!
2,首訊<>0的訊號早於第一個多空<>0訊號,則改用'預F空守'或'預F多守'!直到多空<>0的訊號發生(指得是突破'預F空守'或是跌破'預F多守'),就回到原本'F空守'與'F多守'的規則!

不知有無邏輯疏漏,規則衝突之情況,還請總版主指正,感謝總版主的協助,並祝周休愉快!


由 cgjj 在 2024-09-27 12:13 發表:

引用:
最初由 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;
預F空守:LLV(L,BARSLAST(首訊空))+出場RG參數1,COLORBLUE;
預F多守:HHV(H,BARSLAST(首訊多))-出場RG參數1,COLORRED;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
POWER:=C,COLOR000000,LINETHICK2;
HH:=H; LL:=L; BL_DBCK:=BARSLAST(DBCK);

ZAry:=BL_DBCK*0; 出場RG參數2:=ZAry+出場RG參數1; //XXX請帶入常數或數列
ST:=lbound(BL_DBCK); RSP:=BL_DBCK[ST]; Now多空:=0;
F空守:LL[ST-RSP]+出場RG參數2[ST-RSP],COLORBLUE,LINETHICK1;
F多守:HH[ST-RSP]-出場RG參數2[ST-RSP],COLORRED,LINETHICK1;

多空:ZAry linethick;
籌守:ZAry linethick COLOR000000,LINETHICK2;
for i= ST+1 to datacount do begin
多空[i]:=Now多空; RSP:=BL_DBCK[i];
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*出場RG參數2[i];
end else if Now多空=1 then begin //多方
籌守[i]:=max(POWER[i]-出場RG參數2[i],籌守[i-1]);
if POWER[i]<籌守[i] and POWER[i-1]>=籌守[i-1] then begin //多轉空
多空[i]:=-1; 籌守[i]:=POWER[i]+出場RG參數2[i];
end;
end else if Now多空=-1 then begin //空方
籌守[i]:=min(POWER[i]+出場RG參數2[i],籌守[i-1]);
if POWER[i]>籌守[i] and POWER[i-1]<=籌守[i-1] then begin //空轉多
多空[i]:=1; 籌守[i]:=POWER[i]-出場RG參數2[i];
end;
end;
Now多空:=多空[i];
end;
破過:=(ref(多空,1)<>多空)*多空;

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


重新貼上公式,加上要添加的部分(總版主指導部分僅有更改為自己容易記憶的變數名稱)!

因為會有全部時間都沒有訊號的狀況!
所以請總版主幫我更改規則為===
1,第一個多空<>0的訊號早於首訊<>0訊號,則沿用原本的'F空守'與'F多守'!
2,首訊<>0的訊號早於第一個多空<>0訊號,則改用'預F空守'或'預F多守'!直到多空<>0的訊號發生(指得是突破'預F空守'或是跌破'預F多守'),就回到原本'F空守'與'F多守'的規則!

不知有無邏輯疏漏,規則衝突之情況,還請總版主指正,感謝總版主的協助,並祝周休愉快!




多空:ZAry linethick;
籌守:ZAry linethick COLOR000000,LINETHICK2;
for i= ST+1 to datacount do begin
多空[i]:=Now多空; RSP:=BL_DBCK[i];
if Now多空=0 then begin //初始
多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*出場RG參數2[i];

改為
多空:ZAry linethick;
籌守:ZAry linethick COLOR000000,LINETHICK2;
首訊SP:=BARSSINCE(首訊);
if lbound(首訊SP)>0 then 首訊PP:=datacount-首訊SP[datacount]; else 首訊PP:=datacount+1;
for i= ST+1 to datacount do begin
多空[i]:=Now多空; RSP:=BL_DBCK[i];
if Now多空=0 then begin //初始
if i>=首訊PP then 多空[i]:=(POWER[i]>預F空守[i] and POWER[i-1]<=預F空守[i])-(預F多守[i]>POWER[i] and 預F多守[i]<=POWER[i-1]);
if i<首訊PP then 多空[i]:=(POWER[i]>F空守 and POWER[i-1]<=F空守)-(F多守>POWER[i] and F多守<=POWER[i-1]);
if 多空[i]<>0 then 籌守[i]:=POWER[i]-多空[i]*出場RG參數2[i];


由 Markchu7 在 2024-09-27 16:13 發表:

更改後似乎仍非心目中所要的效果!
心目中的效果是首訊較早成立,就從首訊開始畫'籌守'這條階梯線!
有勞總版主再看看!不勝感激!


由 cgjj 在 2024-09-27 16:56 發表:

引用:
最初由 Markchu7 發表
更改後似乎仍非心目中所要的效果!
心目中的效果是首訊較早成立,就從首訊開始畫'籌守'這條階梯線!
有勞總版主再看看!不勝感激!



請先確認首訊成立後
下面這部分 "多空" 得到的值為何~~
多空[i]:=(POWER[i]>預F空守[i] and POWER[i-1]<=預F空守[i])-(預F多守[i]>POWER[i] and 預F多守[i]<=POWER[i-1]);
若 多空[i]=0 當然就沒有線(尚未進場)

您在程式最末端加入一行
Now首訊PP:首訊PP linethick;
看看 Now首訊PP 的值是多少(為首訊K棒位置)
線只會自首訊K棒那根K位置起畫 或是在 首訊K棒那根K位置之後起畫 (視利用 預F空守 算的多空值,是否為非零決定)


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

對不起!我認真看了,可是內容有點超出我的能力,再仔細想想自己有些畫蛇添足,我另開新主題!
謝謝!


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


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

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