 |
Touareg_Smart
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 24 |
動態行情
版主您好:
在以下的程式可取得特定板塊中每支股票今日的漲跌幅
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
漲跌幅:=DYNAINFO2(14,UseStk)*100;
end
但由於是用DYNAINFO,所以是動態行情沒有歷史資料,所以我將其改成非動態行情 : 漲跌幅:= "UseStk$Close" - Ref("UseStk$Close",1) 但一直語法錯誤,所以請問是否有可以解決的方法。
謝謝
|
|
向版主報告此篇 |  |
|
2013-10-15 18:47 |
|
|
|  |
 |
Touareg_Smart
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 24 |
回覆: 回覆: 動態行情
引用: 最初由 cgjj 發表
原作法存在兩個問題:
1.雙引號內不可有變數存在, 故會語法錯誤
2.相同東西被引用了2次, 多耗費許多效能
請改用 STKINDI 函數來做
將算漲幅的部分, 寫在子公式中, STKINDI直接引用算完的結果
如此只需引用一次就可得到結果
註: STKINDI 函數的第一個參數可帶入 UseStk 變數
版主您好:
我更改了程式寫,但仍是語法錯誤,請幫忙看一下是那出錯了,謝謝...
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
//漲跌幅:=DYNAINFO2(14,UseStk)*100;
漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
end
|
|
向版主報告此篇 |  |
|
2013-10-16 21:04 |
|
|
|  |
 |
Touareg_Smart
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 24 |
回覆: 回覆: 回覆: 回覆: 動態行情
引用: 最初由 cgjj 發表
UseBlk 這變數, 您有指定內容給它嗎?
有! 若我改回原來的DYNAINFO2,整段是沒問題的,若改成STKINDI會有語法錯誤
|
|
向版主報告此篇 |  |
|
2013-10-17 13:44 |
|
|
|  |
 |
Touareg_Smart
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 24 |
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 動態行情
引用: 最初由 cgjj 發表
試過ok唷, 若仍不行請把整段程式貼上來, 比較好協助您
版主您好:
我剛才也試了一下,若是原來的程式碼確實是可以的,但如果加入對"漲跌幅"做條件的判斷的程式碼,就不可以了,我想應該是DYNAINFO2是返回常數,而STKINDI是返回序列吧 ?如果是該如何解決呢?
程式如下:
A:=0;
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
//漲跌幅:=DYNAINFO2(14,UseStk)*100;
漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
if 漲跌幅 > 0 then A : A + 漲跌幅;
end
|
|
向版主報告此篇 |  |
|
2013-10-17 16:51 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18095 |
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 動態行情
引用: 最初由 Touareg_Smart 發表
版主您好:
我剛才也試了一下,若是原來的程式碼確實是可以的,但如果加入對"漲跌幅"做條件的判斷的程式碼,就不可以了,我想應該是DYNAINFO2是返回常數,而STKINDI是返回序列吧 ?如果是該如何解決呢?
程式如下:
A:=0;
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
//漲跌幅:=DYNAINFO2(14,UseStk)*100;
漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
if 漲跌幅 > 0 then A : A + 漲跌幅;
end
if 條件式 then .....
其中的 條件式 , 不可為數列
需如此處理
原碼: A:=C*0;
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
//漲跌幅:=DYNAINFO2(14,UseStk)*100;
漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
if lbound(漲跌幅)>0 then begin
A:=A+if(barpos>=lbound(漲跌幅),漲跌幅,0);
end;
end;
|
|
向版主報告此篇 |  |
|
2013-10-17 17:10 |
|
|
|  |
 |
Touareg_Smart
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 24 |
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 動態行情
引用: 最初由 cgjj 發表
if 條件式 then .....
其中的 條件式 , 不可為數列
需如此處理
原碼: A:=C*0;
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
//漲跌幅:=DYNAINFO2(14,UseStk)*100;
漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
if lbound(漲跌幅)>0 then begin
A:=A+if(barpos>=lbound(漲跌幅),漲跌幅,0);
end;
end;
版主您好:
雖然lbound可取得序列的最下值,但對A變數仍是有不同的反應。若用原來的DYNAINFO2的寫法,會得到A的正確值(但只有一日)。但是若用StkInDI + lbound的寫法,A值一直不是正確的值,且也不會隨著變化,請問是那出錯了?
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
漲跌幅:=DYNAINFO2(14,UseStk)*100;
if 漲跌幅 >0 then begin
A : A + 1;
// 漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
//if lbound(漲跌幅)>0 then begin
// A : A + 1;
end;
end;
|
|
向版主報告此篇 |  |
|
2013-10-18 08:33 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18095 |
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 動態行情
引用: 最初由 Touareg_Smart 發表
版主您好:
雖然lbound可取得序列的最下值,但對A變數仍是有不同的反應。若用原來的DYNAINFO2的寫法,會得到A的正確值(但只有一日)。但是若用StkInDI + lbound的寫法,A值一直不是正確的值,且也不會隨著變化,請問是那出錯了?
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
漲跌幅:=DYNAINFO2(14,UseStk)*100;
if 漲跌幅 >0 then begin
A : A + 1;
// 漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
//if lbound(漲跌幅)>0 then begin
// A : A + 1;
end;
end;
if lbound(漲跌幅)>0 then begin
這一行是用於避開無效數列
某些股票尚無K線或K線不足時, 會傳回無效數列
無效數列就跳過不計算
它與 if 漲跌幅 >0 then begin 意義大不相同
若您只要累算 漲跌幅 >0 的部分
請把
A:=A+if(barpos>=lbound(漲跌幅),漲跌幅,0);
改為
A:=A+if(barpos>=lbound(漲跌幅),if(漲跌幅>0,漲跌幅,0),0);
|
|
向版主報告此篇 |  |
|
2013-10-18 08:47 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|