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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 修改公式 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=19550)


由 mead 在 2015-10-28 15:04 發表:

修改公式

請問版主:
下面公式要如何改成只算最近900根K棒就好?

{以均價為基準的K線}
FO:=OPEN;
FH:=HIGH;
FL:=LOW;
FC:=CLOSE;
FC[1]:=(2*FC[1]+FH[1]+FL[1])/4;
FOR I=2 TO DATACOUNT DO BEGIN
FO[I]:=(FO[I-1]+FC[I-1])/2;
FH[I]:=IF(FO[I]>FH[I],FO[I],FH[I]);
FL[I]:=IF(FO[I]<FL[I],FO[I],FL[I]);
FC[I]:=(2*FC[I]+FH[I]+FL[I])/4;
END;
KK:=IF(FC>=FO AND (FC>=REF(FC,1) OR REF(FC,1)>=REF(FO,1)),1,IF(FC<FO AND (FC<REF(FO,1) OR REF(FC,1)<REF(FO,1)),-1,0));
明日轉折:ROUND((FO + FC) / 2*10)/10,SHIFT1,LINETHICK0,COLORFFFF;
今日轉折:=IF(KK=1,MIN(FC,FO),IF(KK=-1,MAX(FC,FO),IF(REF(KK,1)=1,MIN(FC,FO),IF(REF(KK,1)=-1,MAX(FC,FO),(FC+FO)/2))));
DRAWNUMBER(ISLASTBAR,明日轉折,ROUND(今日轉折*100)/100,2),SHIFT3;
STICKLINE(FC>FO,FH,FL,0.4,0),COLORFF;
STICKLINE(FO>FC,FH,FL,0.4,0),COLORFFFF00;
STICKLINE(KK=1 AND FC>=FO,FO,FC,8,0),COLORFF;
STICKLINE(KK=1 AND FC<FO,FO,FC,8,0),COLORFF;
STICKLINE(KK=-1 AND FC>=FO,FO,FC,8,0),COLORFF0000;
STICKLINE(KK=-1 AND FC<FO,FO,FC,8,0),COLORFF0000;
STICKLINE(KK=0 AND FC>=FO,FO,FC,8,0),COLORFF;
STICKLINE(KK=0 AND FC<FO,FO,FC,8,0),COLORFF;

謝謝幫忙
感恩


由 cgjj 在 2015-10-28 16:53 發表:

回覆: 修改公式

引用:
最初由 mead 發表
請問版主:
下面公式要如何改成只算最近900根K棒就好?

{以均價為基準的K線}
FO:=OPEN;
FH:=HIGH;
FL:=LOW;
FC:=CLOSE;
FC[1]:=(2*FC[1]+FH[1]+FL[1])/4;
FOR I=2 TO DATACOUNT DO BEGIN
FO[I]:=(FO[I-1]+FC[I-1])/2;
FH[I]:=IF(FO[I]>FH[I],FO[I],FH[I]);
FL[I]:=IF(FO[I]<FL[I],FO[I],FL[I]);
FC[I]:=(2*FC[I]+FH[I]+FL[I])/4;
END;
KK:=IF(FC>=FO AND (FC>=REF(FC,1) OR REF(FC,1)>=REF(FO,1)),1,IF(FC<FO AND (FC<REF(FO,1) OR REF(FC,1)<REF(FO,1)),-1,0));
明日轉折:ROUND((FO + FC) / 2*10)/10,SHIFT1,LINETHICK0,COLORFFFF;
今日轉折:=IF(KK=1,MIN(FC,FO),IF(KK=-1,MAX(FC,FO),IF(REF(KK,1)=1,MIN(FC,FO),IF(REF(KK,1)=-1,MAX(FC,FO),(FC+FO)/2))));
DRAWNUMBER(ISLASTBAR,明日轉折,ROUND(今日轉折*100)/100,2),SHIFT3;
STICKLINE(FC>FO,FH,FL,0.4,0),COLORFF;
STICKLINE(FO>FC,FH,FL,0.4,0),COLORFFFF00;
STICKLINE(KK=1 AND FC>=FO,FO,FC,8,0),COLORFF;
STICKLINE(KK=1 AND FC<FO,FO,FC,8,0),COLORFF;
STICKLINE(KK=-1 AND FC>=FO,FO,FC,8,0),COLORFF0000;
STICKLINE(KK=-1 AND FC<FO,FO,FC,8,0),COLORFF0000;
STICKLINE(KK=0 AND FC>=FO,FO,FC,8,0),COLORFF;
STICKLINE(KK=0 AND FC<FO,FO,FC,8,0),COLORFF;

謝謝幫忙
感恩



原碼:
MaxKBar:=1000; //僅算近期N根K棒, 零則算全部 StNo:=datacount-MaxKBar+1; if StNo<1 or MaxKBar=0 then StNo:=1; FO:=OPEN; x:=SETLBOUND(FO,StNo); FH:=HIGH; x:=SETLBOUND(FH,StNo); FL:=LOW; x:=SETLBOUND(FL,StNo); FC:=CLOSE; x:=SETLBOUND(FC,StNo); FC[StNo]:=(2*FC[StNo]+FH[StNo]+FL[StNo])/4; FOR I=StNo+1 TO DATACOUNT DO BEGIN FO[I]:=(FO[I-1]+FC[I-1])/2; FH[I]:=IF(FO[I]>FH[I],FO[I],FH[I]); FL[I]:=IF(FO[I]<FL[I],FO[I],FL[I]); FC[I]:=(2*FC[I]+FH[I]+FL[I])/4; END; KK:=IF(FC>=FO AND (FC>=REF(FC,1) OR REF(FC,1)>=REF(FO,1)),1,IF(FC<FO AND (FC<REF(FO,1) OR REF(FC,1)<REF(FO,1)),-1,0)); 明日轉折:ROUND((FO + FC) / 2*10)/10,SHIFT1,LINETHICK0,COLORFFFF; 今日轉折:=IF(KK=1,MIN(FC,FO),IF(KK=-1,MAX(FC,FO),IF(REF(KK,1)=1,MIN(FC,FO),IF(REF(KK,1)=-1,MAX(FC,FO),(FC+FO)/2)))); DRAWNUMBER(ISLASTBAR,明日轉折,ROUND(今日轉折*100)/100,2),SHIFT3; STICKLINE(FC>FO,FH,FL,0.4,0),COLORFF; STICKLINE(FO>FC,FH,FL,0.4,0),COLORFFFF00; STICKLINE(KK=1 AND FC>=FO,FO,FC,8,0),COLORFF; STICKLINE(KK=1 AND FC<FO,FO,FC,8,0),COLORFF; STICKLINE(KK=-1 AND FC>=FO,FO,FC,8,0),COLORFF0000; STICKLINE(KK=-1 AND FC<FO,FO,FC,8,0),COLORFF0000; STICKLINE(KK=0 AND FC>=FO,FO,FC,8,0),COLORFF; STICKLINE(KK=0 AND FC<FO,FO,FC,8,0),COLORFF;


由 mead 在 2015-10-28 17:20 發表:

謝謝站長的迅速幫忙

感恩


由 mead 在 2015-10-29 11:50 發表:

回覆: 回覆: 修改公式

引用:
最初由 cgjj 發表
原碼:
MaxKBar:=1000; //僅算近期N根K棒, 零則算全部 StNo:=datacount-MaxKBar+1; if StNo<1 or MaxKBar=0 then StNo:=1; FO:=OPEN; x:=SETLBOUND(FO,StNo); FH:=HIGH; x:=SETLBOUND(FH,StNo); FL:=LOW; x:=SETLBOUND(FL,StNo); FC:=CLOSE; x:=SETLBOUND(FC,StNo); FC[StNo]:=(2*FC[StNo]+FH[StNo]+FL[StNo])/4; FOR I=StNo+1 TO DATACOUNT DO BEGIN FO[I]:=(FO[I-1]+FC[I-1])/2; FH[I]:=IF(FO[I]>FH[I],FO[I],FH[I]); FL[I]:=IF(FO[I]<FL[I],FO[I],FL[I]); FC[I]:=(2*FC[I]+FH[I]+FL[I])/4; END; KK:=IF(FC>=FO AND (FC>=REF(FC,1) OR REF(FC,1)>=REF(FO,1)),1,IF(FC<FO AND (FC<REF(FO,1) OR REF(FC,1)<REF(FO,1)),-1,0)); 明日轉折:ROUND((FO + FC) / 2*10)/10,SHIFT1,LINETHICK0,COLORFFFF; 今日轉折:=IF(KK=1,MIN(FC,FO),IF(KK=-1,MAX(FC,FO),IF(REF(KK,1)=1,MIN(FC,FO),IF(REF(KK,1)=-1,MAX(FC,FO),(FC+FO)/2)))); DRAWNUMBER(ISLASTBAR,明日轉折,ROUND(今日轉折*100)/100,2),SHIFT3; STICKLINE(FC>FO,FH,FL,0.4,0),COLORFF; STICKLINE(FO>FC,FH,FL,0.4,0),COLORFFFF00; STICKLINE(KK=1 AND FC>=FO,FO,FC,8,0),COLORFF; STICKLINE(KK=1 AND FC<FO,FO,FC,8,0),COLORFF; STICKLINE(KK=-1 AND FC>=FO,FO,FC,8,0),COLORFF0000; STICKLINE(KK=-1 AND FC<FO,FO,FC,8,0),COLORFF0000; STICKLINE(KK=0 AND FC>=FO,FO,FC,8,0),COLORFF; STICKLINE(KK=0 AND FC<FO,FO,FC,8,0),COLORFF;



請問總版主
可以用在設定其他公式也能用嗎?只要取出哪裡?
我想用於當沖的其它公式 以期指1分鐘為例 最多只要算900根K棒(三天)就好 以減少CPU的負擔!

可行嗎?

謝謝幫忙
感恩


由 cgjj 在 2015-10-29 13:24 發表:

回覆: 回覆: 回覆: 修改公式

引用:
最初由 mead 發表
請問總版主
可以用在設定其他公式也能用嗎?只要取出哪裡?
我想用於當沖的其它公式 以期指1分鐘為例 最多只要算900根K棒(三天)就好 以減少CPU的負擔!

可行嗎?

謝謝幫忙
感恩



舉例來說
若您的公式僅有用到收盤價,方法如下:

//前置處理
MaxKBar:=1000; //僅算近期N根K棒, 零則算全部
StNo:=datacount-MaxKBar+1;
if StNo<1 or MaxKBar=0 then StNo:=1;
CC:=CLOSE; x:=SETLBOUND(CC,StNo);

//接續您原本的公式
把原本的公式中的收盤價,都用前面的 CC 取代

-------------------------------------------------------
簡單的說
就是只需處理運算所需要的基本元素
(一般頂多只有 開高低收量額 需要被處理)

例如:
您前面提問的那公式
運算上有用到 OHLC 其餘未用到
所以僅需處理 OHLC


由 mead 在 2015-10-29 14:33 發表:

回覆: 回覆: 回覆: 回覆: 修改公式

引用:
最初由 cgjj 發表
舉例來說
若您的公式僅有用到收盤價,方法如下:

//前置處理
MaxKBar:=1000; //僅算近期N根K棒, 零則算全部
StNo:=datacount-MaxKBar+1;
if StNo<1 or MaxKBar=0 then StNo:=1;
CC:=CLOSE; x:=SETLBOUND(CC,StNo);

//接續您原本的公式
把原本的公式中的收盤價,都用前面的 CC 取代

-------------------------------------------------------
簡單的說
就是只需處理運算所需要的基本元素
(一般頂多只有 開高低收量額 需要被處理)

例如:
您前面提問的那公式
運算上有用到 OHLC 其餘未用到
所以僅需處理 OHLC



了解 謝謝總版主
來改改看

感恩


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


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

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