![]() |
在這個頁面顯示本主題全部的 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)
融資資料似乎怪怪的
融資資料似乎怪怪的
============= 以下為公式內文 ============
{ 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;
ikk = iLoopMax -1
msgbox( nowxxxxxxxTodayMPTotal )
會一跑出vbs視窗
交易系統公式跑全部1200支股票交易系統評價
會出現1200次vbs視窗
請問錯誤訊號為什麼呢?
多檔股票時融資餘額就會出現異常 煩勞各位大大幫我解惑
多檔股票時融資餘額就會出現異常 煩勞各位大大幫我解惑
問題 >> 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 ==============
問題是出在你的觀念是錯的
此行是用於取得今日融資餘額
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
用下面這方法, 在進 VBS 之前就主動先處理
會更理想喔
TodayMPSurplus:LONDATA(4);
TodayMPSurplus:=if(LBOUND(TodayMPSurplus)=0, 0, TodayMPSurplus);

感謝了 謝謝
我覺得 "主動先處理" 這是最完美的
謝謝
| 全部時間均為台灣時間, 現在時間為13:19 | 在這個頁面顯示本主題全部的 6 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.