到奇狐勝券首頁 奇狐社區論壇 購買奇狐勝券 試用奇狐勝券
 
論壇首頁 你可以在這裡編輯你的資料,查看短訊,訂閱主題和論壇參數等等 免費會員註冊 會員列表 論壇幫助 論壇日曆 論壇搜索 加入我的最愛 登出論壇  
奇狐社區論壇 : Powered by vBulletin version 2.3.0 奇狐社區論壇 > 指標公式 > 問題交流 > 動態行情
  上一主題   下一主題
作者
主題 發表新主題    回覆主題
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) 但一直語法錯誤,所以請問是否有可以解決的方法。

謝謝

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

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

回覆: 動態行情

引用:
最初由 Touareg_Smart 發表
版主您好:

在以下的程式可取得特定板塊中每支股票今日的漲跌幅
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
漲跌幅:=DYNAINFO2(14,UseStk)*100;
end

但由於是用DYNAINFO,所以是動態行情沒有歷史資料,所以我將其改成非動態行情 : 漲跌幅:= "UseStk$Close" - Ref("UseStk$Close",1) 但一直語法錯誤,所以請問是否有可以解決的方法。

謝謝



原作法存在兩個問題:
1.雙引號內不可有變數存在, 故會語法錯誤
2.相同東西被引用了2次, 多耗費許多效能

請改用 STKINDI 函數來做
將算漲幅的部分, 寫在子公式中, STKINDI直接引用算完的結果
如此只需引用一次就可得到結果
註: STKINDI 函數的第一個參數可帶入 UseStk 變數

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

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

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

回覆: 回覆: 回覆: 動態行情

引用:
最初由 Touareg_Smart 發表
版主您好:

我更改了程式寫,但仍是語法錯誤,請幫忙看一下是那出錯了,謝謝...
for i= 1 to STKCOUNT(UseBlk) do begin
UseStk:=STKFROMBLK(UseBlk,i);
//漲跌幅:=DYNAINFO2(14,UseStk)*100;
漲跌幅:= STKINDI(UseStk, '今日漲跌幅.漲跌幅',0, 6);
end



UseBlk 這變數, 您有指定內容給它嗎?

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

註冊日期: Nov 2011
來  自:
文章數量: 24

回覆: 回覆: 回覆: 回覆: 動態行情

引用:
最初由 cgjj 發表
UseBlk 這變數, 您有指定內容給它嗎?


有! 若我改回原來的DYNAINFO2,整段是沒問題的,若改成STKINDI會有語法錯誤

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

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

回覆: 回覆: 回覆: 回覆: 回覆: 動態行情

引用:
最初由 Touareg_Smart 發表
有! 若我改回原來的DYNAINFO2,整段是沒問題的,若改成STKINDI會有語法錯誤


試過ok唷, 若仍不行請把整段程式貼上來, 比較好協助您

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

向版主報告此篇 | 查IP位址
Old Post 2013-10-17 16:51
Touareg_Smart 現在離線 點選這裡查看 Touareg_Smart 的個人資料 點選這裡給 Touareg_Smart 傳送一條短訊 查找更多關於 Touareg_Smart 的文章 增加 Touareg_Smart 至你的好友列表 編輯/刪除訊息 引用回覆
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;

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

向版主報告此篇 | 查IP位址
Old Post 2013-10-18 08:33
Touareg_Smart 現在離線 點選這裡查看 Touareg_Smart 的個人資料 點選這裡給 Touareg_Smart 傳送一條短訊 查找更多關於 Touareg_Smart 的文章 增加 Touareg_Smart 至你的好友列表 編輯/刪除訊息 引用回覆
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);

向版主報告此篇 | 查IP位址
Old Post 2013-10-18 08:47
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
全部時間均為台灣時間, 現在時間為07:57 發表新主題    回覆主題
  上一主題   下一主題
顯示可列印版本 | 訂閱此主題

論壇跳轉:
主題評分:

論壇規定:
你不可以發表新主題
你不可以回覆文章
你不可以上傳附件
你不可以編輯自己的文章
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.  聯絡我們