EasyTrader ArtNo 162
K 線型態對從事金融商品主觀交易而言是一個很常用的方法,通常它會搭配其他指標來衡量市場運動方向,但是從量化角度來看, 若能使用計量的方法作為技術分析的依據,無疑是另一種可考慮的方式,這裡介紹一個K棒二進位評分方法,作為我們開發新策略元素的基礎:上圖為K棒的基本定義,我們將它區分為幾個部份作為評分的主項目,分別是K棒的顏色、實體、上影線與下影線,並用七個二位元空格來作K棒型態的記錄:
- K棒的顏色是最重要的特性,代表著多方/空方的方向,因此在這裡給它最高的權重.在二位元評價中紅K代表1 ,黑K代表 0
- K棒的開盤價與收盤價在四個價格中算是最重要的兩個,並且這兩個價格範圍反應了多空力道強弱,因此權重的位置排在顏色之後.
- K棒各元素依據它們的大小長度給與不同的權重
- 實體大小或上下影線的長短標準則是利用 N 根K棒的標準差來作範圍界定 , 超過上線者為大實體或長影線 ,小於下限者為小實體或短影線
PS: 這樣的評價定義也可以自行作修改
函數程式碼 { # function _CandleCode }
inputs: BBLength( numericsimple ), { recommended value of input: 55 }
BBNumDevs( numericsimple ); { recommended value of input: .5 }
variables: BodyHi(0), BodyLo(0), Body(0), UpperShadow(0), LowerShadow(0), ThBot_Body(0), ThTop_Body(0), ThBot_US(0), ThTop_US(0), ThBot_LS(0),ThTop_LS(0), ColorCode(0), BodyCode(0), USCode(0), LSCode(0);
BodyHi = MaxList(Open, Close);
BodyLo = MinList(Open, Close);
Body = BodyHi - BodyLo;
UpperShadow = High - BodyHi;
LowerShadow = BodyLo - Low;
{ 計算期間內標準差,界定上下限 }
ThBot_Body = BollingerBand(Body, BBLength, -BBNumDevs);
ThTop_Body = BollingerBand(Body, BBLength, BBNumDevs);
ThBot_US = BollingerBand(UpperShadow, BBLength, -BBNumDevs);
ThTop_US = BollingerBand(UpperShadow, BBLength, BBNumDevs);
ThBot_LS = BollingerBand(LowerShadow, BBLength, -BBNumDevs);
ThTop_LS = BollingerBand(LowerShadow, BBLength, BBNumDevs);
{ 實體 + 顏色評分 }
if Close >= Open then
begin
ColorCode = 64; {紅K }
if Body = 0 then {十字線 }
BodyCode = 0
else if Body < ThBot_Body then { 低於標準差下限為小實體 }
BodyCode = 16
else if Body < ThTop_Body then { 介於標準差上下限為中實體 }
BodyCode = 32
else
BodyCode = 48; { 高於標準差上限為大實體 }
end else begin
ColorCode = 0; {黑K }
if Body = 0 then
BodyCode = 48
else if Body < ThBot_Body then
BodyCode = 32
else if Body < ThTop_Body then
BodyCode = 16
else
BodyCode = 0;
end;
{ 上影線評分 }
if UpperShadow = 0 then
USCode = 0
else if UpperShadow < ThBot_US then { 低於標準差下限為短影線 }
USCode = 4
else if UpperShadow < ThTop_US then { 介於標準差上下限為中影線 }
USCode = 8
else
USCode = 12; { 高於標準差上限為長影線 }
{ 下影線評分 }
if LowerShadow = 0 then
LSCode = 3
else if LowerShadow < ThBot_LS then
LSCode = 2
else if LowerShadow < ThTop_LS then
LSCode = 1
else
LSCode = 0;
inputs: BBLength( numericsimple ), { recommended value of input: 55 }
BBNumDevs( numericsimple ); { recommended value of input: .5 }
variables: BodyHi(0), BodyLo(0), Body(0), UpperShadow(0), LowerShadow(0), ThBot_Body(0), ThTop_Body(0), ThBot_US(0), ThTop_US(0), ThBot_LS(0),ThTop_LS(0), ColorCode(0), BodyCode(0), USCode(0), LSCode(0);
BodyHi = MaxList(Open, Close);
BodyLo = MinList(Open, Close);
Body = BodyHi - BodyLo;
UpperShadow = High - BodyHi;
LowerShadow = BodyLo - Low;
{ 計算期間內標準差,界定上下限 }
ThBot_Body = BollingerBand(Body, BBLength, -BBNumDevs);
ThTop_Body = BollingerBand(Body, BBLength, BBNumDevs);
ThBot_US = BollingerBand(UpperShadow, BBLength, -BBNumDevs);
ThTop_US = BollingerBand(UpperShadow, BBLength, BBNumDevs);
ThBot_LS = BollingerBand(LowerShadow, BBLength, -BBNumDevs);
ThTop_LS = BollingerBand(LowerShadow, BBLength, BBNumDevs);
{ 實體 + 顏色評分 }
if Close >= Open then
begin
ColorCode = 64; {紅K }
if Body = 0 then {十字線 }
BodyCode = 0
else if Body < ThBot_Body then { 低於標準差下限為小實體 }
BodyCode = 16
else if Body < ThTop_Body then { 介於標準差上下限為中實體 }
BodyCode = 32
else
BodyCode = 48; { 高於標準差上限為大實體 }
end else begin
ColorCode = 0; {黑K }
if Body = 0 then
BodyCode = 48
else if Body < ThBot_Body then
BodyCode = 32
else if Body < ThTop_Body then
BodyCode = 16
else
BodyCode = 0;
end;
{ 上影線評分 }
if UpperShadow = 0 then
USCode = 0
else if UpperShadow < ThBot_US then { 低於標準差下限為短影線 }
USCode = 4
else if UpperShadow < ThTop_US then { 介於標準差上下限為中影線 }
USCode = 8
else
USCode = 12; { 高於標準差上限為長影線 }
{ 下影線評分 }
if LowerShadow = 0 then
LSCode = 3
else if LowerShadow < ThBot_LS then
LSCode = 2
else if LowerShadow < ThTop_LS then
LSCode = 1
else
LSCode = 0;
0 留言:
張貼留言
如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!