奇狐社區論壇
在這個頁面顯示本主題全部的 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=4196)


由 CCHCP0699 在 2005-11-18 14:22 發表:

融資資料似乎怪怪的

融資資料似乎怪怪的

============= 以下為公式內文 ============
{ MarginTest }
{ 此公式用來測試 2330 3265 }

{ 在 開啟奇狐之後 若 先執行以上二檔股票 就不會出錯 }
{ 但是若先執行全部的股票 上市加上櫃 就會出現錯誤 }

TodayMPSurplus := LONDATA(4) ;

stkobjid:=STKLABEL;
stkobjname:=STKNAME;

<%
vTodayMPTotal = FFL.VarData("TodayMPSurplus") ' 今天融資餘額

vstkid=FFL.VarData("stkobjid")
vstkname=FFL.VarData("stkobjname")

iLoopMax = UBound( vTodayMPTotal )

' 會執行所有的資料( 每一天都執行 )
for ikk = 0 to iLoopMax
nowxxxxxxxTodayMPTotal = vTodayMPTotal( ikk )

if ikk = iLoopMax -1 and ( vstkid = 2330 or vstkid = 3265 )then
msgbox( nowxxxxxxxTodayMPTotal )
end if

next
%>

ENTERLONG: 1;
EXITLONG: 1;


由 工程部 在 2005-11-18 22:16 發表:

ikk = iLoopMax -1

msgbox( nowxxxxxxxTodayMPTotal )

會一跑出vbs視窗

交易系統公式跑全部1200支股票交易系統評價
會出現1200次vbs視窗

請問錯誤訊號為什麼呢?


由 CCHCP0699 在 2005-11-21 14:37 發表:

問題 多檔股票時融資餘額就會出現異常 煩勞各位大大幫我解惑

多檔股票時融資餘額就會出現異常 煩勞各位大大幫我解惑
問題 >> 3265 這檔股票是沒有融資券的 但融資餘額卻出現數值 而不是預期中的0或是1

if ikk = iLoopMax -1 and ( vstkid = 2330 or vstkid = 3265 )then
因為這行Code 所以公式只會秀出 最後一天 的 融資餘額
而且只會 秀出 2330 和 3265 這二檔股票 的 融資餘額
所以不管是對幾檔股票作交易系統評價 也只會秀出2次融資餘額


因為 2330 是 台積電 有開放融資 所以有融資餘額 ( http://tw.stock.yahoo.com/d/s/credit_2330.html )

但是 3265 是 台曜電 這檔股票 是沒有融資的股票 ( http://tw.stock.yahoo.com/d/s/credit_3265.html )

=========== 正常情況 Start ==============
若是建立一個版塊 只有 2330 和 3265 這二檔股票 顯示是正常
2330 是正確的資料
而3265 就只出現1(沒有融資餘額 卻出現1 還可以接受 )
=========== 正常情況 End ==============


=========== 異常情況 Start ==============
但是又建立一版塊 包含上市+上櫃的所有的股票 ( 大約 1千多檔股票 )
那資料就會出現錯誤
2330 仍然是正確的資料
但是 3265 卻出現8211 的數值(但是3265照理應該是沒有融資餘額才是)
=========== 異常情況 End ==============


由 cgjj 在 2005-11-21 21:40 發表:

問題是出在你的觀念是錯的

此行是用於取得今日融資餘額
TodayMPSurplus := LONDATA(4) ;

然而 3265 是 台曜電 這檔股票
這股票是沒有融資的股票
也就是說 LONDATA(4) 對它來說是無意義的(無效數據)

但對 2330 來說是有效的

用VBS存取數列一定要注意一件事
就是存取的範圍必需為有效範圍
若超出數列的有效範圍
可能導致數值異常或當機

以奇狐語法判斷是否為有效數據, 可用 LBOUND 的值來判斷
例如:CK:=LBOUND(n);
當 CK>0 為有效數據, CK=0 為無效數據

以 VBS 語法判斷是否為有效數據, 可利用 FFL.VarStartIndex 的值來判斷
例如:CK=FFL.VarStartIndex("n")
當 CK>-1 為有效數據, CK=-1 為無效數據

既是無效數據, 就不應帶入迴圈運算(應直接跳脫返回 0 值)


以 VBS 寫作公式, 像下列這樣的寫法是最糟的
for i = 0 to UBound(n)
很容易導致 VBS 出錯或當機

建議改用
for i = LBOUND(n) to UBound(n)
若使用商品可能會有無效數據時
則應先檢測是否為無效數據
若為有效數據才帶入迴圈


觀念提醒:
 奇狐語法中數列有效起始位置未必都是 1
 VBS 語法中數列有效起始位置未必都是 0
 以 n = MA(C,10) 這樣的數列來說
 奇狐有效起始位置是 10
 VBS 有效起始位置是 9


由 cgjj 在 2005-11-21 22:00 發表:

用下面這方法, 在進 VBS 之前就主動先處理
會更理想喔

TodayMPSurplus:LONDATA(4);
TodayMPSurplus:=if(LBOUND(TodayMPSurplus)=0, 0, TodayMPSurplus);


由 CCHCP0699 在 2005-11-22 10:15 發表:

講話 感謝了 謝謝

我覺得 "主動先處理" 這是最完美的

謝謝


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


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

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