到奇狐勝券首頁 奇狐社區論壇 購買奇狐勝券 試用奇狐勝券
 
論壇首頁 你可以在這裡編輯你的資料,查看短訊,訂閱主題和論壇參數等等 免費會員註冊 會員列表 論壇幫助 論壇日曆 論壇搜索 加入我的最愛 登出論壇  
奇狐社區論壇 : Powered by vBulletin version 2.3.0 奇狐社區論壇 > 指標公式 > 問題交流 > 減少計算K線總數,增加公式運算速度(用程式)
總頁數 (2): [1] 2 »   上一主題   下一主題
作者
主題 發表新主題    回覆主題
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

減少計算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  <== 這行一定要於後

向版主報告此篇 | 查IP位址
Old Post 2004-04-05 12:37
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

若您於公式中有使用兩次 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;

向版主報告此篇 | 查IP位址
Old Post 2004-04-05 13:52
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

處理總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
%>

向版主報告此篇 | 查IP位址
Old Post 2004-04-06 09:29
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

以 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

附件: TEST_KDJ.ALG
此文件已被下載 1500 次。

向版主報告此篇 | 查IP位址
Old Post 2004-04-06 09:40
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

若 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 修改最終的版本

附件: TEST_KDJ.ALG
此文件已被下載 1297 次。

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 10:40
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

再舉一實例,修改 快樂股市 中的 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線的起算點,所以也要跟著變動,必須加入此行

附件: TEST_AMA.ALG
此文件已被下載 1431 次。

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 12:09
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

原 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
%>

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 13:42
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
fyu
中級會員

註冊日期: Jan 2004
來  自:
文章數量: 88

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

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 13:47
fyu 現在離線 點選這裡查看 fyu 的個人資料 點選這裡給 fyu 傳送一條短訊 查找更多關於 fyu 的文章 增加 fyu 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 14:12
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 14:34
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 14:52
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
fyu
中級會員

註冊日期: Jan 2004
來  自:
文章數量: 88

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

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-07 18:26
fyu 現在離線 點選這裡查看 fyu 的個人資料 點選這裡給 fyu 傳送一條短訊 查找更多關於 fyu 的文章 增加 fyu 至你的好友列表 編輯/刪除訊息 引用回覆
fyu
中級會員

註冊日期: Jan 2004
來  自:
文章數量: 88

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


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

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-10 21:50
fyu 現在離線 點選這裡查看 fyu 的個人資料 點選這裡給 fyu 傳送一條短訊 查找更多關於 fyu 的文章 增加 fyu 至你的好友列表 編輯/刪除訊息 引用回覆
9902
初級會員

註冊日期: Jan 2004
來  自:
文章數量: 1

請教

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

向版主報告此篇 | 查IP位址
Old Post 2004-04-16 18:56
9902 現在離線 點選這裡查看 9902 的個人資料 點選這裡給 9902 傳送一條短訊 查找更多關於 9902 的文章 增加 9902 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17862

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

附件: TEST_BSV.ALG
此文件已被下載 1367 次。

向版主報告此篇 | 查IP位址
Old Post 2004-04-16 20:28
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
全部時間均為台灣時間, 現在時間為08:15 發表新主題    回覆主題
總頁數 (2): [1] 2 »   上一主題   下一主題
顯示可列印版本 | 訂閱此主題

論壇跳轉:
主題評分:

論壇規定:
你不可以發表新主題
你不可以回覆文章
你不可以上傳附件
你不可以編輯自己的文章
HTML語法禁止
vB 語法核准
表情符號核准
貼圖語法[IMG]核准
 

本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。

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

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.  聯絡我們