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

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


由 cgjj 在 2004-04-05 12:37 發表:

減少計算K線總數,增加公式運算速度(用程式)

最近期指改新格式,由原來的約每5秒一筆變成約每2秒跳動一筆
有些人用的公式很複雜,導致5分鐘週期可能運算負擔過重
CPU和RAM 承受不了!

這個方法可改善此狀況
那就是減少計算K線的總數(不要算全部)
以下用最簡單的公式為例:

MAXKBAR 為指標參數,用來設定您要計算的總K線數
例如: 你要算最近的1000根K線,就將其設為1000


HH:H;
LL:L;
<%
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(HH)-MAXKBAR

FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
FFL.VarStartIndex("HH")=MaxSet
FFL.VarStartIndex("LL")=MaxSet
%>


其原理為將原來要使用的數據導入 VBS 中
用 VBS 設定該數據運算時的起點後再導出
(將運算起點由最前面向後挪)

注意:
  FFL.VarData("HH") = HH   <== 這行一定要於前
  FFL.VarStartIndex("HH")=MaxSet  <== 這行一定要於後


由 cgjj 在 2004-04-05 13:52 發表:

若您於公式中有使用兩次 VBS,每次於 VBS 導出前都要再處理一次
不然之前設的運算起點會失效
例如:

原來公式
HH:H;
LL:L;
<%
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(HH)-MAXKBAR
FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
FFL.VarStartIndex("HH")=MaxSet
FFL.VarStartIndex("LL")=MaxSet
%>
HHH:HH;
<%
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
%>
LLL:LL;

修正後的公式
HH:H;
LL:L;
<%
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(HH)-MAXKBAR
FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
FFL.VarStartIndex("HH")=MaxSet
FFL.VarStartIndex("LL")=MaxSet
%>
HHH:HH;
<%
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(HH)-MAXKBAR

FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
FFL.VarStartIndex("HH") = MaxSet
FFL.VarStartIndex("LL") = MaxSet

%>
LLL:LL;


由 cgjj 在 2004-04-06 09:29 發表:

處理總K線數不足的方法 (總K線數<MAXKBAR)
加入下列兩行即可(紅色)


HH:H;
LL:L;
<%
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(HH)-MAXKBAR
MinKBar= FFL.VarStartIndex("HH")
if MaxSet < MinKBar then MaxSet = MinKBar

FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
FFL.VarStartIndex("HH")=MaxSet
FFL.VarStartIndex("LL")=MaxSet
%>


由 cgjj 在 2004-04-06 09:40 發表:

以 KDJ 指標修改為例

原公式:

{Stochastic Indicator KDJ Line , KDJ , 隨機指標KDJ}
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3*K-2*D


修改後的公式:
{Stochastic Indicator KDJ Line , KDJ , 隨機指標KDJ}
CC:=C;
HH:=H;
LL:=L;
<%
CC = FFL.VarData("CC")
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(CC)-MAXKBAR
MinKBar= FFL.VarStartIndex("CC")
if MaxSet < MinKBar then MaxSet = MinKBar
FFL.VarData("CC") = CC
FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
FFL.VarStartIndex("CC")=MaxSet
FFL.VarStartIndex("HH")=MaxSet
FFL.VarStartIndex("LL")=MaxSet
%>
RSV:=(CC-LLV(LL,N))/(HHV(HH,N)-LLV(LL,N))*100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3*K-2*D


由 cgjj 在 2004-04-07 10:40 發表:

若 MAXKBAR=0 則計算所有k線,修改方法
加入下列兩行即可(紅色)


{Stochastic Indicator KDJ Line , KDJ , 隨機指標KDJ}
CC:=C;
HH:=H;
LL:=L;
<%
CC = FFL.VarData("CC")
HH = FFL.VarData("HH")
LL = FFL.VarData("LL")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(CC)-MAXKBAR
MinKBar= FFL.VarStartIndex("CC")
if MaxSet < MinKBar then MaxSet = MinKBar
FFL.VarData("CC") = CC
FFL.VarData("HH") = HH
FFL.VarData("LL") = LL
IF MAXKBAR > 0 THEN
FFL.VarStartIndex("CC")=MaxSet
FFL.VarStartIndex("HH")=MaxSet
FFL.VarStartIndex("LL")=MaxSet
END IF
%>
RSV:=(CC-LLV(LL,N))/(HHV(HH,N)-LLV(LL,N))*100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3*K-2*D

下面的檔案為 KDJ 修改最終的版本


由 cgjj 在 2004-04-07 12:09 發表:

再舉一實例,修改 快樂股市 中的 AMA 最佳移動平均

原公式:

{Adaptive Moving Average , AMA , 最佳移動平均}
Direction:=CLOSE - REF( CLOSE , N ) ;
XX:=ABS( CLOSE - REF( CLOSE , 1 ) ) ;
Volatility:=SUM( XX , N ) ;
ER:=ABS( Direction / Volatility ) ;
FastC:= 2 / ( p + 1 ) ;
SlowC:= 2 / ( q + 1 ) ;
SSC:=ER * ( FastC - SlowC ) + SlowC ;
Constant :=SSC * SSC , Linethick0;
YY:=REF( CLOSE , 1 ) + Constant * ( CLOSE - REF( CLOSE , 1 ) ) ;
AA:=IF( SUM( 1 , 0 )= N + 1 , YY , 0 ) ;
BB:=BarsLast( AA>0 ) ;
DD:=REF( C , BB ) ;
收盤價格:CLOSE , Linethick0 , Precision2;
CC:=CLOSE , Linethick0 ;
<%
NN= FFL.VarData("N")
VD= FFL.VarData("DD")
VC= FFL.VarData("CC")
Vonstant= FFL.VarData("Constant")
LT = UBound( VC )
for m=NN + 1 to LT
VD( m )=VD( m - 1 ) + Vonstant( m ) * ( VC( m ) - VD( m - 1 ) )
next
FFL.VarData("DD")=VD
%>
AMA:DD , Linethick0;
FFilter:=( K / 100 ) * Std( AMA - REF( AMA , 1 ) , N ) ;
XA:=IF( AMA<REF( AMA , 1 ) , AMA , 0 ) ;
XN:=BarsLast( XA>0 ) ;
AMALow :=REF( AMA , XN ) ;
YA:=IF( AMA>REF( AMA , 1 ) , AMA , 0 ) ;
YN:=BarsLast( YA>0 ) ;
AMAHigh :=REF( AMA , YN ) ;
RR:=IF( AMAHigh - AMA > FFilter , -1 , 0 ) ;
TT:=IF( AMA - AMALow > FFilter , 1 , RR ) ;
PartLine(TT=1,AMA) , ColorRed , Linethick2;
PartLine(TT= -1,AMA) , ColorGreen , Linethick2;
PartLine(TT= 0,AMA) , ColorWhite , Linethick2;

修改後的公式:
{Adaptive Moving Average , AMA , 最佳移動平均}
CC:=CLOSE , Linethick0 ;
<%
CC = FFL.VarData("CC")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(CC)-MAXKBAR
MinKBar= FFL.VarStartIndex("CC")
if MaxSet < MinKBar then MaxSet = MinKBar
FFL.VarData("CC") = CC
if MAXKBAR > 0 THEN FFL.VarStartIndex("CC")=MaxSet
%>
Direction:=CC - REF( CC , N ) ;
XX:=ABS( CC - REF( CC , 1 ) ) ;
Volatility:=SUM( XX , N ) ;
ER:=ABS( Direction / Volatility ) ;
FastC:= 2 / ( p + 1 ) ;
SlowC:= 2 / ( q + 1 ) ;
SSC:=ER * ( FastC - SlowC ) + SlowC ;
Constant :=SSC * SSC , Linethick0;
YY:=REF( CC , 1 ) + Constant * ( CC - REF( CC , 1 ) ) ;
AA:=IF( SUM( 1 , 0 )= N + 1 , YY , 0 ) ;
BB:=BarsLast( AA>0 ) ;
DD:=REF( CC , BB ) ;
收盤價格:CC , Linethick0 , Precision2;
<%
NN= FFL.VarData("N")
VD= FFL.VarData("DD")
VC= FFL.VarData("CC")
Vonstant= FFL.VarData("Constant")
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = ubound(VD)-MAXKBAR
MinKBar= FFL.VarStartIndex("DD")
if MaxSet < MinKBar then MaxSet = MinKBar
if MAXKBAR > 0 then NN = MaxSet
LT = UBound( VC )
for m=NN + 1 to LT
VD( m )=VD( m - 1 ) + Vonstant( m ) * ( VC( m ) - VD( m - 1 ) )
next
FFL.VarData("DD")=VD
if MAXKBAR > 0 THEN FFL.VarStartIndex("DD")=MaxSet
%>
AMA:DD , Linethick0;
FFilter:=( K / 100 ) * Std( AMA - REF( AMA , 1 ) , N ) ;
XA:=IF( AMA<REF( AMA , 1 ) , AMA , 0 ) ;
XN:=BarsLast( XA>0 ) ;
AMALow :=REF( AMA , XN ) ;
YA:=IF( AMA>REF( AMA , 1 ) , AMA , 0 ) ;
YN:=BarsLast( YA>0 ) ;
AMAHigh :=REF( AMA , YN ) ;
RR:=IF( AMAHigh - AMA > FFilter , -1 , 0 ) ;
TT:=IF( AMA - AMALow > FFilter , 1 , RR ) ;
PartLine(TT=1,AMA) , ColorRed , Linethick2;
PartLine(TT= -1,AMA) , ColorGreen , Linethick2;
PartLine(TT= 0,AMA) , ColorWhite , Linethick2;

註:if MAXKBAR > 0 then NN = MaxSet 因NN也是K線的起算點,所以也要跟著變動,必須加入此行


由 cgjj 在 2004-04-07 13:42 發表:

原 VBS 迴圈K線的起跑點也要記的改喔!
不然會多浪費時間計算


例如:

原 VBS 程式
<%
NN = FFL.VarData("NN")
StartNo = FFL.VarStartIndex("NN")
EndNo = ubound(NN)
for i = StartNo to EndNo
NN(i) = NN(i)*10
next
FFL.VarData("NN") = NN
%>

改完後的 VBS 程式
<%
NN = FFL.VarData("NN")
EndNo = ubound(NN)
MAXKBAR = FFL.VarData("MAXKBAR")
MaxSet = EndNo-MAXKBAR
MinKBar= FFL.VarStartIndex("NN")
if MaxSet < MinKBar or MAXKBAR=0 then MaxSet = MinKBar
for i = MaxSet to EndNo
NN(i) = NN(i)*10
next
FFL.VarData("NN") = NN
FFL.VarStartIndex("NN")=MaxSet
%>


由 fyu 在 2004-04-07 13:47 發表:

cgjj 兄,謝謝你的費心引導! 我再研究研究...
祝操盤順心!

__________________
~~~~~~~~~~~~~~~~~
敬畏市場 順勢而為
隨波逐流 乘風破浪
~~~~~~~~~~~~~~~~~


由 cgjj 在 2004-04-07 14:12 發表:

抱歉, 疏忽了!
有下載 TEST_AMA.ALG 的人請重新下載, 原來的有一些問題(公式內容已修正).


由 cgjj 在 2004-04-07 14:34 發表:

原 VBS 迴圈K線的起跑點也要記的改喔!
這文章的內容也有修正喔!


由 cgjj 在 2004-04-07 14:52 發表:

我們已向博庭建議
加入 "可調整計算K線總數" 的功能
未來新的版本或許就能直接支援
就不用再如此修改了
目前 3.5 版僅能用此方法.


由 fyu 在 2004-04-07 18:26 發表:

感謝感謝!這樣必能造福(涵蓋)更多usr!
---------------
我們已向博庭建議
加入 "可調整計算K線總數" 的功能
未來新的版本或許就能直接支援
就不用再如此修改了
目前 3.5 版僅能用此方法.

__________________
~~~~~~~~~~~~~~~~~
敬畏市場 順勢而為
隨波逐流 乘風破浪
~~~~~~~~~~~~~~~~~


由 fyu 在 2004-04-10 21:50 發表:

本人所用公式已以VBS修改完成&試RUN OK,
再次感謝cgjj , 甘溫喔 !


--------------------------------------------------------------------
cgjj 兄,謝謝你的費心引導! 我再研究研究...
祝操盤順心!

__________________
~~~~~~~~~~~~~~~~~
敬畏市場 順勢而為
隨波逐流 乘風破浪
~~~~~~~~~~~~~~~~~


由 9902 在 2004-04-16 18:56 發表:

請教

如果用在分筆成交ㄉㄋ
因為現在用奇狐ㄉ內建公式bsv
一天會當好幾次
非常困擾
可否藉由vba解決
謝謝


由 cgjj 在 2004-04-16 20:28 發表:

加入 "可調整計算K線總數" 的 BSV 公式


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


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

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