![]() |
在這個頁面顯示本主題全部的 17 個文章 |
奇狐社區論壇 (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=17185)
[求救]陣列運算能否從K線往前算
版主你好
在陣列教學中有 一例子如下
N1:=datacount-50+1;
N2:=datacount;
GetHH:=H;
x:=SORT(GetHH, 1, N1, N2);
前一高:GetHH[N1];
前二高:GetHH[N1+1];
PosHH:=H;
x:=SORTPOS(PosHH, 1, N1, N2);
前一高位置:PosHH[N1] LINETHICK0;
前二高位置:PosHH[N1+1] LINETHICK0;
本例是從最後一根K線往前算前50天
在不用sysparam(1) 的前提下,請問能否從每根K線(即barpos的位子)往前算呢?
回覆: [求救]陣列運算能否從K線往前算
引用:
最初由 P8176 發表
版主你好
在陣列教學中有 一例子如下
N1:=datacount-50+1;
N2:=datacount;
GetHH:=H;
x:=SORT(GetHH, 1, N1, N2);
前一高:GetHH[N1];
前二高:GetHH[N1+1];
PosHH:=H;
x:=SORTPOS(PosHH, 1, N1, N2);
前一高位置:PosHH[N1] LINETHICK0;
前二高位置:PosHH[N1+1] LINETHICK0;
本例是從最後一根K線往前算前50天
在不用sysparam(1) 的前提下,請問能否從每根K線(即barpos的位子)往前算呢?
原碼:
MAXKBAR:=500; //設定運算近期N根(0為全部) StPos:=datacount-MAXKBAR+1; if StPos<1 or MAXKBAR=0 then StPos:=1; 前一高:C*0; 前二高:前一高; 前一高位置:前一高 LINETHICK0; 前二高位置:前一高 LINETHICK0; for i=datacount downto StPos do begin N2:=i; N1:=i-50+1; if N1<1 then begin StPos:=i+1; break; end; SH:=H; x:=SETLBOUND(SH,N1); x:=SORT(SH, 1, N1, N2); 前一高[i]:=SH[N1]; 前二高[i]:=SH[N1+1]; SH:=H; x:=SETLBOUND(SH,N1); x:=SORTPOS(SH, 1, N1, N2); 前一高位置[i]:=SH[N1]; 前二高位置[i]:=SH[N1+1]; end; x:=SETLBOUND(前一高,StPos); x:=SETLBOUND(前二高,StPos); x:=SETLBOUND(前一高位置,StPos); x:=SETLBOUND(前二高位置,StPos);
謝謝版主快速的解答,
我目前是把公式改成
N1:=sysparam(2);
N2:=sysparam(3);
GetHH:=H;
x:=SORT(GetHH, 1, N1, N2);
前一高:GetHH[N1];
前二高:GetHH[N1+1];
PosHH:=H;
x:=SORTPOS(PosHH, 1, N1, N2);
前一高位置:PosHH[N1] LINETHICK0;
前二高位置:PosHH[N1+1] LINETHICK0;
如此訊號則可隨游標的移動而移動, 但我若把N2改成
n2=barpos;
則出現"操作數類型"錯誤, 請問這是為甚麼呢?
引用:
最初由 P8176 發表
謝謝版主快速的解答,
我目前是把公式改成
N1:=sysparam(2);
N2:=sysparam(3);
GetHH:=H;
x:=SORT(GetHH, 1, N1, N2);
前一高:GetHH[N1];
前二高:GetHH[N1+1];
PosHH:=H;
x:=SORTPOS(PosHH, 1, N1, N2);
前一高位置:PosHH[N1] LINETHICK0;
前二高位置:PosHH[N1+1] LINETHICK0;
如此訊號則可隨游標的移動而移動, 但我若把N2改成
n2=barpos;
則出現"操作數類型"錯誤, 請問這是為甚麼呢?
版主你好
今天試了一下公式,好像跑的有點慢且我寫的也不盡完美,要麻煩版主看看是否有更好的寫法,思路邏輯如下
H1:20天內最大成交量的max(c,o)連接線
L1:20天內最大成交量的min(c,o)連接線
H2:20天內第2大成交量的max(c,o)連接線
L2:20天內第2大成交量的min(c,o)連接線
有效的H1,L1:因創最近20天新高量
無效的H1 L1:因時間遞延而改變的 H1,L1,即20天內沒有新高量
維持原有效的 H1,L1連接線
希望過濾掉無效的 H1, L1, 維持原有效的 H1,L1連接線
有效的 H2,L2: 有二
A 因創最近20天新高量 H2 L2 隨之改變
B 創最近20天內第2大成交量(小於最大成交量但大於原來第 二大成交量
無效的H2 L2:因時間遞延而改變的 H2,L2,即20天內沒有新高量 或 新第二大成交量
維持原有效的 H2, L2 連接線
若收盤價跌破有效的 min(L1,L2) 則找尋之前最接近收盤價 且"有效的" H1 L1 以及 H2 L2
並輔以虛線表示 如附圖所示
謝謝
附圖如下
附圖如下
附圖2
附圖說明
引用:
最初由 P8176 發表
版主你好
今天試了一下公式,好像跑的有點慢且我寫的也不盡完美,要麻煩版主看看是否有更好的寫法,思路邏輯如下
H1:20天內最大成交量的max(c,o)連接線
L1:20天內最大成交量的min(c,o)連接線
H2:20天內第2大成交量的max(c,o)連接線
L2:20天內第2大成交量的min(c,o)連接線
有效的H1,L1:因創最近20天新高量
無效的H1 L1:因時間遞延而改變的 H1,L1,即20天內沒有新高量
維持原有效的 H1,L1連接線
希望過濾掉無效的 H1, L1, 維持原有效的 H1,L1連接線
有效的 H2,L2: 有二
A 因創最近20天新高量 H2 L2 隨之改變
B 創最近20天內第2大成交量(小於最大成交量但大於原來第 二大成交量
無效的H2 L2:因時間遞延而改變的 H2,L2,即20天內沒有新高量 或 新第二大成交量
維持原有效的 H2, L2 連接線
若收盤價跌破有效的 min(L1,L2) 則找尋之前最接近收盤價 且"有效的" H1 L1 以及 H2 L2
並輔以虛線表示 如附圖所示
謝謝
MAXKBAR:=350; //設定運算近期N根(0為全部)
StPos:=datacount-MAXKBAR+1;
if StPos<1 or MAXKBAR=0 then StPos:=1;
前1高:=V*0;
前2高:=前1高;
前1高位置:=前1高 LINETHICK0;
前2高位置:=前1高 LINETHICK0;
for i=datacount downto StPos do begin
N2:=i; N1:=i-30+1;
if N1<1 then begin
StPos:=i+1; break;
end;
SH:=V; x:=SETLBOUND(SH,N1);
x:=SORT(SH, 1, N1, N2);
前1高[i]:=SH[N1];
前2高[i]:=SH[N1+1];
SH:=V; x:=SETLBOUND(SH,N1);
x:=SORTPOS(SH, 1, N1, N2);
前1高位置[i]:=SH[N1];
前2高位置[i]:=SH[N1+1];
end;
x:=SETLBOUND(前1高,StPos);
x:=SETLBOUND(前2高,StPos);
x:=SETLBOUND(前1高位置,StPos);
x:=SETLBOUND(前2高位置,StPos);
BARP:BARPOS,linethick0;
前1高位置d:=barp-前1高位置,linethick0;
前2高位置d:=barp-前2高位置,linethick0;
前1高H:REF(MAX(C,O),BARP-前1高位置),COLORYELLOW,linedot;
前1高L:REF(MIN(C,O),BARP-前1高位置),COLORYELLOW;
前2高Hv:=ref(v,barp-前2高位置),linethick0;
前2高H:=REF(MAX(C,O),BARP-前2高位置),COLORCYAN,linedot;
前2高L:=REF(MIN(C,O),BARP-前2高位置),COLORCYAN;
PARTLINE(前1高H=REF(前1高H,1),前1高H),COLORYELLOW,pointdot;
PARTLINE(前1高L=REF(前1高L,1),前1高L),pointdot,COLORYELLOW,linethick1;
公式如上,並沒有用到sysparam函數 我的問題是要如何過濾掉"無效的訊號"
無效的訊號定義:某一天出現30天最大量,在這跟K棒後30天內有一個第二大量,這根第二大量在以後因為時間的遞延有 可能變成30天內的第一大量,我要俗和過濾掉它?
例如1/1日是30天內的最大量,在1/1日到1/30日之中,若沒有出現比1/1日更大的量,其訊號全部忽略。 若1/31號出現一根大量比1/2~1/30都大,則視為有效訊號。
請板主再幫我看看,謝謝
引用:
最初由 P8176 發表
MAXKBAR:=350; //設定運算近期N根(0為全部)
StPos:=datacount-MAXKBAR+1;
if StPos<1 or MAXKBAR=0 then StPos:=1;
前1高:=V*0;
前2高:=前1高;
前1高位置:=前1高 LINETHICK0;
前2高位置:=前1高 LINETHICK0;
for i=datacount downto StPos do begin
N2:=i; N1:=i-30+1;
if N1<1 then begin
StPos:=i+1; break;
end;
SH:=V; x:=SETLBOUND(SH,N1);
x:=SORT(SH, 1, N1, N2);
前1高[i]:=SH[N1];
前2高[i]:=SH[N1+1];
SH:=V; x:=SETLBOUND(SH,N1);
x:=SORTPOS(SH, 1, N1, N2);
前1高位置[i]:=SH[N1];
前2高位置[i]:=SH[N1+1];
end;
x:=SETLBOUND(前1高,StPos);
x:=SETLBOUND(前2高,StPos);
x:=SETLBOUND(前1高位置,StPos);
x:=SETLBOUND(前2高位置,StPos);
BARP:BARPOS,linethick0;
前1高位置d:=barp-前1高位置,linethick0;
前2高位置d:=barp-前2高位置,linethick0;
前1高H:REF(MAX(C,O),BARP-前1高位置),COLORYELLOW,linedot;
前1高L:REF(MIN(C,O),BARP-前1高位置),COLORYELLOW;
前2高Hv:=ref(v,barp-前2高位置),linethick0;
前2高H:=REF(MAX(C,O),BARP-前2高位置),COLORCYAN,linedot;
前2高L:=REF(MIN(C,O),BARP-前2高位置),COLORCYAN;
PARTLINE(前1高H=REF(前1高H,1),前1高H),COLORYELLOW,pointdot;
PARTLINE(前1高L=REF(前1高L,1),前1高L),pointdot,COLORYELLOW,linethick1;
公式如上,並沒有用到sysparam函數 我的問題是要如何過濾掉"無效的訊號"
無效的訊號定義:某一天出現30天最大量,在這跟K棒後30天內有一個第二大量,這根第二大量在以後因為時間的遞延有 可能變成30天內的第一大量,我要俗和過濾掉它?
例如1/1日是30天內的最大量,在1/1日到1/30日之中,若沒有出現比1/1日更大的量,其訊號全部忽略。 若1/31號出現一根大量比1/2~1/30都大,則視為有效訊號。
請板主再幫我看看,謝謝
就是紅圈處的線條,其應與前幾天一樣直線位置
引用:
最初由 P8176 發表
就是紅圈處的線條,其應與前幾天一樣直線位置
原碼:
N:=20;
MAXKBAR:=350; //設定運算近期N根(0為全部)
StPos:=datacount-MAXKBAR+N;
if StPos<1 or MAXKBAR=0 then StPos:=N;
if StPos>datacount then exit; //K棒不足
HH:=H; VV:=V;
MK:=C*0; OldV1P:=-N;
for i=StPos to datacount do begin
V1:=-1;
for j=i-N+1 to i do begin
if VV[j]>V1 then begin
V1:=VV[j];
if OldV1P<0 or j-OldV1P+1>N then begin
V1P:=j;
end else begin
if V1>VV[OldV1P] then begin
V1P:=j;
end;
end;
end;
end;
MK[V1P]:=1; OldV1P:=V1P;
end;
XX:=BARSSINCE(MK)>=0;
MH:H*XX*MK; MH:=ref(MH,barslast(MH<>0)) LINEDASHDOT coloryellow;
ML:L*XX*MK; ML:=ref(ML,barslast(ML<>0)) LINEDOT coloryellow;
是的,謝謝
我想出一個方法
BIGV20:=if(v=hhv(v,20),v,0);
bigvp:=barslast(BIGV20>0);
h1:ref(max(c,o),bigvp),coloryellow;
l1:ref(min(c,o),bigvp),coloryellow;
不過我還需要20天內第二大量的連線,我試了笨方法如下,不過好像不太對,最大量的K線在許多天後可能變成第二大量,可是這個方法已經把它給過濾掉了,所以...請問有沒有辦法可找出第二大量的K線?
A:=HHV(VOL,20);
VT1:=IF(VOL<A,VOL,0);
VT2:=IF(REF(VOL,1)<A,REF(VOL,1),0);
......
VT20:=IF(REF(VOL,19)<A,REF(VOL,19),0);
MAX1:=MAX(VT1,VT2);
MAX2:=MAX(VT3,VT4);
MAX3:=MAX(VT5,VT6);
....
MAXFINAL:=MAX(MAX17,MAX18);
BIGV2P:=BARSLAST(V=MAXFINAL);
BIGV2H:REF(MAX(C,O),BIGV2P),COLORCYAN,LINEDOT;
BIGV2L:REF(MIN(C,O),BIGV2P),COLORCYAN,POINTDOT;
引用:
最初由 P8176 發表
是的,謝謝
我想出一個方法
BIGV20:=if(v=hhv(v,20),v,0);
bigvp:=barslast(BIGV20>0);
h1:ref(max(c,o),bigvp),coloryellow;
l1:ref(min(c,o),bigvp),coloryellow;
^^
全部時間均為台灣時間, 現在時間為21:35 | 在這個頁面顯示本主題全部的 17 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.