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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [問題]找出特定K線後取後值 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=22959)


由 bill25789 在 2021-05-03 11:44 發表:

[問題]找出特定K線後取後值

版主 您好

目前想在5日內選出“最大振幅+紅K+為漲”的K線後,取其開收高低價存入變數後做計算,並希望與後面行情的數據做比較,但也可能該條件就是最近1日,不知該如何處理。

情境如下:
週五盤後,以本週星期一至星期五的K線為範圍,並先找到“最大振幅+紅K+為漲”的K線,例如:
若是星期二。此時希望能往後抓星期三至星期五的最高價及最低價,以供後續做計算。

但若最大振幅的紅漲K線是星期五,就直接取開收高低等4個價位,做後續計算。

目前寫法如下,但面臨到會排除最近1根K線(也就是星期五),以及因為基準K線是變動的,要往後多少日做取值也是變動,而不知道該怎麼寫

高低區:= H-L;
紅K:= C >O;

CondBar:=HHVbars(高低區 and 紅K,5);//近5日最大高低區紅K線
MBO:=ref(O,CondBar); //取該K線之開
MBC:=ref(C,CondBar); //取該K線之收
MBH:=ref(H,CondBar); //取該K線之高
MBL:=ref(L,CondBar); //取該K線之低
幅度:=(MBH-MBL)/MBL*100;//高低幅度




CondBar2:=if( CondBar > 1,CondBar-1,0);//取近5日最大高低K後一日K線
MBO2:=ref(O,CondBar2); //取該K線之開
MBC2:=ref(C,CondBar2); //取該K線之收
MBH2:=ref(H,CondBar2); //取該K線之高
MBL2:=ref(L,CondBar2); //取該K線之低
幅度2:=(MBH2-MBL2)/MBL2*100;//高低幅度

謝謝您

祝 順心


由 cgjj 在 2021-05-03 12:03 發表:

回覆: [問題]找出特定K線後取後值

引用:
最初由 bill25789 發表
版主 您好

目前想在5日內選出“最大振幅+紅K+為漲”的K線後,取其開收高低價存入變數後做計算,並希望與後面行情的數據做比較,但也可能該條件就是最近1日,不知該如何處理。

情境如下:
週五盤後,以本週星期一至星期五的K線為範圍,並先找到“最大振幅+紅K+為漲”的K線,例如:
若是星期二。此時希望能往後抓星期三至星期五的最高價及最低價,以供後續做計算。

但若最大振幅的紅漲K線是星期五,就直接取開收高低等4個價位,做後續計算。

目前寫法如下,但面臨到會排除最近1根K線(也就是星期五),以及因為基準K線是變動的,要往後多少日做取值也是變動,而不知道該怎麼寫

紅漲幅:=(C/ref(c,1)-1)*100>0 and C>O;

CondBar:=HHVbars(紅漲幅,5);//近5日最大高低區K線
MBO:=ref(O,CondBar); //取該K線之開
MBC:=ref(C,CondBar); //取該K線之收
MBH:=ref(H,CondBar); //取該K線之高
MBL:=ref(L,CondBar); //取該K線之低
幅度:=(MBH-MBL)/MBL*100;//高低幅度




CondBar2:=if( CondBar > 1,CondBar-1,0);//取近5日最大高低K後一日K線
MBO2:=ref(O,CondBar2); //取該K線之開
MBC2:=ref(C,CondBar2); //取該K線之收
MBH2:=ref(H,CondBar2); //取該K線之高
MBL2:=ref(L,CondBar2); //取該K線之低
幅度2:=(MBH2-MBL2)/MBL2*100;//高低幅度

謝謝您

祝 順心



奇狐裡的 振幅 和 漲幅 是不一樣的東西
您解說用振幅,程式卻是採漲幅。
請問您要用何者?

該週如果最大幅度的是黑k,如何處理呢? (未見說明)


由 bill25789 在 2021-05-03 16:15 發表:

回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 cgjj 發表
奇狐裡的 振幅 和 漲幅 是不一樣的東西
您解說用振幅,程式卻是採漲幅。
請問您要用何者?

該週如果最大幅度的是黑k,如何處理呢? (未見說明)




抱歉,應是最大高低差(H-L),我誤寫成漲幅。
另外,基準K線若是黑K,自己不知到怎麼排除,只能選股完用人工處理,亦或程式能處理?


選股邏輯是想找到5日內出現最大振幅後,後續的振幅及高低價有顯著縮小或在差不多的價位。

再煩請版主協助,謝謝您!

CondBar:=HHVbars(H-L,5);//近5日最大高低區K線

MBO:=ref(O,CondBar); //取該K線之開
MBC:=ref(C,CondBar); //取該K線之收
MBH:=ref(H,CondBar); //取該K線之高
MBL:=ref(L,CondBar); //取該K線之低
幅度:=(MBH-MBL)/MBL*100;//高低幅度

CondBar2:=if( CondBar > 1,CondBar-1,0);//取近5日最大高低K後一日K線
MBO2:=ref(O,CondBar2); //取該K線之開
MBC2:=ref(C,CondBar2); //取該K線之收
MBH2:=ref(H,CondBar2); //取該K線之高
MBL2:=ref(L,CondBar2); //取該K線之低


由 cgjj 在 2021-05-03 16:40 發表:

回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 bill25789 發表
抱歉,應是最大高低差(H-L),我誤寫成漲幅。
另外,基準K線若是黑K,自己不知到怎麼排除,只能選股完用人工處理,亦或程式能處理?


選股邏輯是想找到5日內出現最大振幅後,後續的振幅及高低價有顯著縮小或在差不多的價位。

再煩請版主協助,謝謝您!

CondBar:=HHVbars(H-L,5);//近5日最大高低區K線

MBO:=ref(O,CondBar); //取該K線之開
MBC:=ref(C,CondBar); //取該K線之收
MBH:=ref(H,CondBar); //取該K線之高
MBL:=ref(L,CondBar); //取該K線之低
幅度:=(MBH-MBL)/MBL*100;//高低幅度

CondBar2:=if( CondBar > 1,CondBar-1,0);//取近5日最大高低K後一日K線
MBO2:=ref(O,CondBar2); //取該K線之開
MBC2:=ref(C,CondBar2); //取該K線之收
MBH2:=ref(H,CondBar2); //取該K線之高
MBL2:=ref(L,CondBar2); //取該K線之低



Re:基準K線若是黑K,自己不知到怎麼排除,只能選股完用人工處理,亦或程式能處理?

要寫為程式就要有明確的規則定義!
您必須要給我遇到黑K時的處置方法
這樣才算規則完整~~


由 bill25789 在 2021-05-03 18:31 發表:

回覆: 回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 cgjj 發表
Re:基準K線若是黑K,自己不知到怎麼排除,只能選股完用人工處理,亦或程式能處理?

要寫為程式就要有明確的規則定義!
您必須要給我遇到黑K時的處置方法
這樣才算規則完整~~



好的,假設從星期1至星期5區間抓到星期2為最大高低振幅基準K線,
若是紅K,就是對後面星期3-5的K線的最高價及最低價取值,當〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線最低價>基準K最低價*0.95倍”〕(後面稱B條件)。此時選股,條件成立。

但若是〔黑K〕或〔屬於紅K但B條件不成立〕,那就再找星期3-5間最大振幅為另一個新基準K線。

若另一新的基準K線是星期3,
若是紅K,就取值並執行B條件,判斷選股是否條件成立。
但若星期3仍是〔黑K〕或〔屬於紅K但B條件不成立〕,再找星期4-5間最大振幅為新基準K線。

若新基準K是星期4,
若是紅K,因為後面只剩1根星期5的K線,故改判斷〔最高價(星期5)<基準K(星期4)收盤價+最低價(星期5)>基準K(星期4)開盤價〕(後續稱C條件),若符合,此時選股,條件成立。

若是〔黑K〕或〔屬於紅K但C條件不成立〕,那就對最後1根K線之星期5計算:〔最低價>前1根(星期四)高低幅度之二分之一以上〕(條件D),若符合,選股條件成立;反之,選股條件不成立。


若星期5才是最大高低振幅基準K線時,因為後面已無K線作比較,就對其判斷,
當屬紅K時,判斷〔(H-L)L*100 >4〕,若符合選股條件成立,反之不成立。

若屬黑K,直接為選股條件不成立。


謝謝您


由 cgjj 在 2021-05-04 09:04 發表:

回覆: 回覆: 回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 bill25789 發表
好的,假設從星期1至星期5區間抓到星期2為最大高低振幅基準K線,
若是紅K,就是對後面星期3-5的K線的最高價及最低價取值,當〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線最低價>基準K最低價*0.95倍”〕(後面稱B條件)。此時選股,條件成立。

但若是〔黑K〕或〔屬於紅K但B條件不成立〕,那就再找星期3-5間最大振幅為另一個新基準K線。

若另一新的基準K線是星期3,
若是紅K,就取值並執行B條件,判斷選股是否條件成立。
但若星期3仍是〔黑K〕或〔屬於紅K但B條件不成立〕,再找星期4-5間最大振幅為新基準K線。

若新基準K是星期4,
若是紅K,因為後面只剩1根星期5的K線,故改判斷〔最高價(星期5)<基準K(星期4)收盤價+最低價(星期5)>基準K(星期4)開盤價〕(後續稱C條件),若符合,此時選股,條件成立。

若是〔黑K〕或〔屬於紅K但C條件不成立〕,那就對最後1根K線之星期5計算:〔最低價>前1根(星期四)高低幅度之二分之一以上〕(條件D),若符合,選股條件成立;反之,選股條件不成立。


若星期5才是最大高低振幅基準K線時,因為後面已無K線作比較,就對其判斷,
當屬紅K時,判斷〔(H-L)L*100 >4〕,若符合選股條件成立,反之不成立。

若屬黑K,直接為選股條件不成立。


謝謝您



(H-L)L*100 >4
這個運算式有問題,請修正

另外
一星期中的交易天數可能不足5天,甚至只有僅交易一天


由 bill25789 在 2021-05-04 11:53 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 cgjj 發表
(H-L)L*100 >4
這個運算式有問題,請修正

另外
一星期中的交易天數可能不足5天,甚至只有僅交易一天




抱歉應該是(H-L)/L*100 >4,高低振幅大於4%

另外以一星期寫,是這樣寫情境範例可能比較明瞭,K線數範圍不一定要5根,也不會限定要用在哪個週期,之後會以參數方式調整。


謝謝您


由 cgjj 在 2021-05-04 16:02 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 bill25789 發表
抱歉應該是(H-L)/L*100 >4,高低振幅大於4%

另外以一星期寫,是這樣寫情境範例可能比較明瞭,K線數範圍不一定要5根,也不會限定要用在哪個週期,之後會以參數方式調整。


謝謝您



原碼:
Sel:0; KN:=5; RK:=C>O; OO:=O; HH:=H; LL:=L; CC:=C; HL:=H-L; for i= datacount-KN+1 to datacount do begin MaxHL:=-1; for j=i to KN do begin if HL[j]>MaxHL then begin MaxHL:=HL[j]; i:=j; end; end; if i=datacount then begin if RK[i] then Sel:=(HH[i]-LL[i])/LL[i]*100>4; end else if i=datacount-1 then begin if RK[i] then Sel:=HH[i+1]<CC[i] and LL[i+1]>OO[i]; if Sel=0 then Sel:=LL[i+1]>(HH[i]+LL[i])/2; end else begin if RK[i] then begin for j=i+1 to datacount do begin if Not(HH[j]<HH[i]*1.05 and LL[j]>LL[i]*0.95) then break; end; Sel:=j=datacount+1; end; end; if Sel>0 then break; end;


由 bill25789 在 2021-05-04 19:57 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 cgjj 發表
原碼:
Sel:0; KN:=5; RK:=C>O; OO:=O; HH:=H; LL:=L; CC:=C; HL:=H-L; for i= datacount-KN+1 to datacount do begin MaxHL:=-1; for j=i to KN do begin if HL[j]>MaxHL then begin MaxHL:=HL[j]; i:=j; end; end; if i=datacount then begin if RK[i] then Sel:=(HH[i]-LL[i])/LL[i]*100>4; end else if i=datacount-1 then begin if RK[i] then Sel:=HH[i+1]<CC[i] and LL[i+1]>OO[i]; if Sel=0 then Sel:=LL[i+1]>(HH[i]+LL[i])/2; end else begin if RK[i] then begin for j=i+1 to datacount do begin if Not(HH[j]<HH[i]*1.05 and LL[j]>LL[i]*0.95) then break; end; Sel:=j=datacount+1; end; end; if Sel>0 then break; end;




謝謝版主幫忙,自己測試後發現自己的條件不夠嚴苛,有選跟沒選差不多。

若把基準紅K再做設定為(開收價差)>(上引線長度)+(下引線度) AND (下引線長度)>(上引線長度)(下面稱甲條件)

這部分不確定是否直接往後加條件
RK:=C>O and (C-O)>(H-C)+(O-L) and (O-L)>(H-C);

--------
另外,想再增加基準K不是範圍內第1根的條件:次基準紅K對比前面K線,其最高價要超過前面1根高低振福1/2以上(也就是條件D邏輯),

用前面情境舉例,若星期二為基準紅K且符合甲條件時,因為星期一判為最大高低振幅的黑K,此時,多一個D條件,星期二這根基準紅K的最高價要超過星期一高低振幅的二分之一以上。

同理,若星期三為基準紅K且符合甲條件時,多加判斷D條件,它的最高價是否有超過星期二高低振幅的二分之一以上。


這部分不知道該怎麼塞入程式碼裡

------
另外發現(B條件)〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線最低價>基準K最低價*0.95倍”〕也過於寬鬆,
若也加入(D條件)邏輯,〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線[最低價]均超過基準K高低振幅的二分之一以上”〕。

可否將這部分程式碼
if Not(HH[j]<HH[i]*1.05 and LL[j]>LL[i]*0.95) then break;
直接改成
if Not(HH[j]<HH[i]*1.05 and (LL[j]-LL[i])/(HH[i]-LL[i])>0.5) then break;


謝謝您


由 cgjj 在 2021-05-05 11:45 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: [問題]找出特定K線後取後值

引用:
最初由 bill25789 發表
謝謝版主幫忙,自己測試後發現自己的條件不夠嚴苛,有選跟沒選差不多。

若把基準紅K再做設定為(開收價差)>(上引線長度)+(下引線度) AND (下引線長度)>(上引線長度)(下面稱甲條件)

這部分不確定是否直接往後加條件
RK:=C>O and (C-O)>(H-C)+(O-L) and (O-L)>(H-C);

--------
另外,想再增加基準K不是範圍內第1根的條件:次基準紅K對比前面K線,其最高價要超過前面1根高低振福1/2以上(也就是條件D邏輯),

用前面情境舉例,若星期二為基準紅K且符合甲條件時,因為星期一判為最大高低振幅的黑K,此時,多一個D條件,星期二這根基準紅K的最高價要超過星期一高低振幅的二分之一以上。

同理,若星期三為基準紅K且符合甲條件時,多加判斷D條件,它的最高價是否有超過星期二高低振幅的二分之一以上。


這部分不知道該怎麼塞入程式碼裡

------
另外發現(B條件)〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線最低價>基準K最低價*0.95倍”〕也過於寬鬆,
若也加入(D條件)邏輯,〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線[最低價]均超過基準K高低振幅的二分之一以上”〕。

可否將這部分程式碼
if Not(HH[j]<HH[i]*1.05 and LL[j]>LL[i]*0.95) then break;
直接改成
if Not(HH[j]<HH[i]*1.05 and (LL[j]-LL[i])/(HH[i]-LL[i])>0.5) then break;


謝謝您



看看是否為您要的結果:
原碼:
Sel:0; KN:=5; RK:=C>O and (C-O)>(H-C)+(O-L) and (O-L)>(H-C); OO:=O; HH:=H; LL:=L; CC:=C; HL:=H-L; StNo:=datacount-KN+1; for i= StNo to datacount do begin MaxHL:=-1; for j=i to KN do begin if HL[j]>MaxHL then begin MaxHL:=HL[j]; i:=j; end; end; if i=datacount then begin if RK[i] then Sel:=(HH[i]-LL[i])/LL[i]*100>4; end else if i=datacount-1 then begin if RK[i] then Sel:=HH[i+1]<CC[i] and LL[i+1]>OO[i]; if Sel=0 then Sel:=LL[i+1]>(HH[i]+LL[i])/2; end else begin CK:=RK[i]; if i>StNo then CK:=RK[i] and HH[i]>(HH[i-1]+LL[i-1])/2; if CK then begin for j=i+1 to datacount do begin if Not(HH[j]<HH[i]*1.05 and LL[j]>(HH[i]+LL[i])/2) then break; end; Sel:=j=datacount+1; end; end; if Sel>0 then break; end;


由 bill25789 在 2021-05-05 12:36 發表:

版主 您好

測試後挑出的股票有點怪怪的,附檔為1313聯成2021/5/4-60分線,區間範圍仍是5。

編號1:為大根有上下引線的黑K<=最大振幅但黑K所以非基準K
編號2:為有下引線的紅K<=應是被程式判定為基準K
編號3-5:都是黑K

疑問1:
編號2的最高價(27.85$)並沒有超過編號1高低振幅1/2(27.87$)
也就是〔次基準紅K對比前面K線,其最高價要超過前面1根高低振福1/2以上〕,應不能判為基準K才是,除非條件改為〔次基準紅K對比前面K線,其最高價要超過前面1根高低振福1/3以上〕條件才會成立。

疑問:
假設編號2基準K是正確的
編號3-5的最低價26.55$、26.05$、26.95$並沒有超過基準K高低振福1/2(26.95$),與〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線[最低價]均超過基準K高低振幅的二分之一以上” 〕條件不相符


再請版主協助 謝謝您


由 cgjj 在 2021-05-05 13:07 發表:

引用:
最初由 bill25789 發表
版主 您好

測試後挑出的股票有點怪怪的,附檔為1313聯成2021/5/4-60分線,區間範圍仍是5。

編號1:為大根有上下引線的黑K<=最大振幅但黑K所以非基準K
編號2:為有下引線的紅K<=應是被程式判定為基準K
編號3-5:都是黑K

疑問1:
編號2的最高價(27.85$)並沒有超過編號1高低振幅1/2(27.87$)
也就是〔次基準紅K對比前面K線,其最高價要超過前面1根高低振福1/2以上〕,應不能判為基準K才是,除非條件改為〔次基準紅K對比前面K線,其最高價要超過前面1根高低振福1/3以上〕條件才會成立。

疑問:
假設編號2基準K是正確的
編號3-5的最低價26.55$、26.05$、26.95$並沒有超過基準K高低振福1/2(26.95$),與〔”每根K線最高價<基準K最高價*1.05倍”+”每根K線[最低價]均超過基準K高低振幅的二分之一以上” 〕條件不相符


再請版主協助 謝謝您



它會成立是因為倒數第二根!!!

也就是您寫的以下這個部分:

若新基準K是星期4,
若是紅K,因為後面只剩1根星期5的K線,故改判斷〔最高價(星期5)<基準K(星期4)收盤價+最低價(星期5)>基準K(星期4)開盤價〕(後續稱C條件),若符合,此時選股,條件成立。
若是〔黑K〕或〔屬於紅K但C條件不成立〕,那就對最後1根K線之星期5計算:〔最低價>前1根(星期四)高低幅度之二分之一以上〕(條件D),若符合,選股條件成立;反之,選股條件不成立。"


由 bill25789 在 2021-05-05 23:16 發表:

謝謝版主協助!不好意思沒有注意到。


由 cgjj 在 2021-05-05 23:54 發表:

引用:
最初由 bill25789 發表
謝謝版主協助!不好意思沒有注意到。


不客氣^^


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


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

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