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

奇狐社區論壇 (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=14345)


由 hwyhon 在 2010-09-24 11:36 發表:

請問如狐自動讀取外部數據

http://www.chiefox.com.tw/bbs/showt...=&threadid=5487
此例需每日手動匯入數據相當麻煩
如何每日自行讀取相對應日期的數據呢

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



由 cgjj 在 2010-09-24 12:26 發表:

回覆: 請問如狐自動讀取外部數據

引用:
最初由 hwyhon 發表
http://www.chiefox.com.tw/bbs/showt...=&threadid=5487
此例需每日手動匯入數據相當麻煩
如何每日自行讀取相對應日期的數據呢



若您是要講究盤中運算要快, 目前就只能用手動匯入

若不講究速度, 則可考慮以 VBS 讀 TXT 檔
將資料放到對應的時間K棒


由 hwyhon 在 2010-09-24 12:34 發表:

回覆: 回覆: 請問如狐自動讀取外部數據

引用:
最初由 cgjj 發表
若不講究速度, 則可考慮以 VBS 讀 TXT
將資料放到對應的時間K棒



c:\Da.txt
我已依此數據型態紀錄每日最後一筆五分數據
日期,開,高,低,收,成交量
1100924,8178.00,8179.00,8174.00,8177.00,808.00
如何放到日線相對應K棒
能否請版主起個範例
感恩

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



由 cgjj 在 2010-09-24 13:12 發表:

回覆: 回覆: 回覆: 請問如狐自動讀取外部數據

引用:
最初由 hwyhon 發表
c:\Da.txt
我已依此數據型態紀錄每日最後一筆五分數據
日期,開,高,低,收,成交量
1100924,8178.00,8179.00,8174.00,8177.00,808.00
如何放到日線相對應K棒
能否請版主起個範例
感恩



用下面這個簡單的例子示範
設定 2010/09/23 13:05 分 的 MyData 值為 888.88
基本上就是:
1.傳入奇狐日期時間
2.將資料讀出
3.將奇狐日期時間與資料日期時間比對
4.若符合將值設入儲存的數列(對應位置)
5.傳回儲存的數列


原碼:

FoxDE
:=DATEFoxTE:=TIME;
MyData:C*0;
<%
MyData FFL.VarData("MyData")
FoxDE FFL.VarData("FoxDE")
FoxTE FFL.VarData("FoxTE")

'
假設已讀出的內容為
TxtStr="1100923,130500,888.88"
TxtAry = Split(TxtStr, ",", -1, 1)
GetDE=CLNG(TxtAry(0))
GetTE=CLNG(TxtAry(1))
GetVV=CSNG(TxtAry(2))
for i=0 to ubound(MyData)
  if FoxDE(i)=GetDE and FoxTE(i)=GetTE then
    MyData(i)=GetVV
  end if
next
FFL.VarData("MyData")=MyData
%>


由 cgjj 在 2010-09-24 13:40 發表:

回覆: 回覆: 請問如狐自動讀取外部數據

引用:
最初由 cgjj 發表
若不講究速度, 則可考慮以 VBS 讀 TXT 檔
將資料放到對應的時間K棒



重點是以 VBS 讀 TXT 檔, 其無法無中生有(創造K棒)
也就是說
無法在沒有K棒的地方, 新增入自己做的資料
只能於有K棒的地方, 放入自己做的資料

其與自定義商品是相當不同的( 匯入沒有內建的商品)


由 hwyhon 在 2010-09-24 17:56 發表:

謝謝總版主的vbs與奇狐銜接的範例教導
感恩

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



由 cgjj 在 2010-09-27 09:29 發表:

引用:
最初由 hwyhon 發表
謝謝總版主的vbs與奇狐銜接的範例教導
感恩



不客氣


由 hwyhon 在 2010-09-30 02:11 發表:

FoxDE:=DATE; FoxTE:=TIME;
MyData:C*0;
<%
MyData = FFL.VarData("MyData")
FoxDE = FFL.VarData("FoxDE")
FoxTE = FFL.VarData("FoxTE")
Set fs = CreateObject("Scripting.FileSystemObject")
Set wrkfs = fs.OpenTextFile("C:\Da.txt", 1)
MyTxt = wrkfs.ReadLine
wrkfs.close
TxtStr=MyTxt
TxtAry = Split(TxtStr, ",", -1, 1)
GetDE=CLNG(TxtAry(0))
GetTE=CLNG(TxtAry(1))
GetVV=CSNG(TxtAry(2))
for i=0 to ubound(MyData)
if FoxDE(i)=GetDE and FoxTE(i)=GetTE then
MyData(i)=GetVV
end if
next
FFL.VarData("MyData")=MyData
%>
經版主教導置入已會處理
但現在頭冒煙了
如此例程式碼
怎樣才能逐行讀取置入奇狐呢

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



由 cgjj 在 2010-09-30 09:30 發表:

引用:
最初由 hwyhon 發表
FoxDE:=DATE; FoxTE:=TIME;
MyData:C*0;
<%
MyData = FFL.VarData("MyData")
FoxDE = FFL.VarData("FoxDE")
FoxTE = FFL.VarData("FoxTE")
Set fs = CreateObject("Scripting.FileSystemObject")
Set wrkfs = fs.OpenTextFile("C:\Da.txt", 1)
MyTxt = wrkfs.ReadLine
wrkfs.close
TxtStr=MyTxt
TxtAry = Split(TxtStr, ",", -1, 1)
GetDE=CLNG(TxtAry(0))
GetTE=CLNG(TxtAry(1))
GetVV=CSNG(TxtAry(2))
for i=0 to ubound(MyData)
if FoxDE(i)=GetDE and FoxTE(i)=GetTE then
MyData(i)=GetVV
end if
next
FFL.VarData("MyData")=MyData
%>
經版主教導置入已會處理
但現在頭冒煙了
如此例程式碼
怎樣才能逐行讀取置入奇狐呢



提示一下:

ReadLine 是每跑一次每讀一行
ReadAll 是一次讀所有行

用 Split 搭配 VbCrLf
可將 ReadAll 結果拆解成字串陣列(一行一個元素)

以迴圈讀取前面字串陣列
利用Split 拆解單行內的個別項目(一項一個元素)


由 hwyhon 在 2010-09-30 11:58 發表:

引用:
最初由 cgjj 發表
提示一下:

ReadLine 是每跑一次每讀一行
ReadAll 是一次讀所有行

用 Split 搭配 VbCrLf
可將 ReadAll 結果拆解成字串陣列(一行一個元素)

以迴圈讀取前面字串陣列
利用Split 拆解單行內的個別項目(一項一個元素)



畢竟小弟非程式科班的使用者
單純只想完成想要的結果與數據

能否請總版主或先進前輩幫忙完成此例當為奇狐與vbs相輝映的範例
藉此例好讓小弟與狐友共同學習與了解奇狐與vbs結合的另一強項
與語法
感謝再感謝

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



由 cgjj 在 2010-09-30 21:33 發表:

引用:
最初由 hwyhon 發表
畢竟小弟非程式科班的使用者
單純只想完成想要的結果與數據

能否請總版主或先進前輩幫忙完成此例當為奇狐與vbs相輝映的範例
藉此例好讓小弟與狐友共同學習與了解奇狐與vbs結合的另一強項
與語法
感謝再感謝



原碼:
'讀取所有資料 TxtAll = wrkfs.ReadAll() '拆解為一行一個元素 TxtAry = Split(TxtAll, vbcrlf, -1, 1) for LineNo = 0 to ubound(TxtAry) '將第 LineNo 行的資料拆解為一項一個元素 ItemTxt = TxtAry(LineNo) ItemAry = Split(ItemTxt, ",", -1, 1) '.......接後續的處理........ next


基本上相關處理的寫法是很難通用的
(常常不是簡單依樣畫葫蘆就可改出來的)

因為
TXT資料存的次序與格式、資料本身的特性、資料的對應方式 ...
等等都會影響到程式處理的結構與次序,讓撰寫的方式不同
而且有尚有很多存取的狀況,程式要因應處理

通常要對 VBScript 有相當一定的熟悉度
才能把 FileSystemObject 相關程式處理的好
處理不好或考量不夠
則可能會因為 VBS 錯誤,常常導致當掉,或者錯的渾然不知
PS: 一般來說,這已經是程式設計的 LEVEL 了


由 megus002 在 2011-08-26 16:43 發表:

FoxDE:=DATE; FoxTE:=TIME;
MyData:C*0;
<%
MyData = FFL.VarData("MyData")
FoxDE = FFL.VarData("FoxDE")
FoxTE = FFL.VarData("FoxTE")
Set fs = CreateObject("Scripting.FileSystemObject")
Set wrkfs = fs.OpenTextFile("C:\Da.txt", 1)
MyTxt = wrkfs.ReadLine
wrkfs.close
TxtStr=MyTxt
TxtAry = Split(TxtStr, ",", -1, 1)
GetDE=CLNG(TxtAry(0))
GetTE=CLNG(TxtAry(1))
GetVV=CSNG(TxtAry(2))
for i=0 to ubound(MyData)
if FoxDE(i)=GetDE and FoxTE(i)=GetTE then
MyData(i)=GetVV
end if
next
FFL.VarData("MyData")=MyData
%>
版主好,最近也有此需求...所以找到這文..看了一下...
上述..的程式...有幾個問題請教:
(1) MyData:C*0; ?請問是哪種資料結構。
(2) ;陣列的寫法..若如此..則應只會捉一筆。
(3)MyData = FFL.VarData("MyData")
這該是日期格式吧...不會有問題嗎?..
(4)...看不到...寫入的動作...且..沒有..宣告.要write到哪個..
table ........這樣..可以寫入奇狐去??...
自己..試了一下...問題多多.......
----------------------------------------
我的想法:
將資料匯出...看文字欄位...決定..陣列維度..
資料結構..te..--時間的格式..我暫時沒找到...先放過..
欄位資料有小數浮點..所以..我改為..cdbl or .csng
可以用....
用..msgbox ..有值..
但..問題仍在...沒法寫入或不知要寫入哪裡?..
mydata嗎?...不知是什麼....可否乾脆一點..告知..謝謝。


由 cgjj 在 2011-08-26 19:41 發表:

引用:
最初由 megus002 發表
FoxDE:=DATE; FoxTE:=TIME;
MyData:C*0;
<%
MyData = FFL.VarData("MyData")
FoxDE = FFL.VarData("FoxDE")
FoxTE = FFL.VarData("FoxTE")
Set fs = CreateObject("Scripting.FileSystemObject")
Set wrkfs = fs.OpenTextFile("C:\Da.txt", 1)
MyTxt = wrkfs.ReadLine
wrkfs.close
TxtStr=MyTxt
TxtAry = Split(TxtStr, ",", -1, 1)
GetDE=CLNG(TxtAry(0))
GetTE=CLNG(TxtAry(1))
GetVV=CSNG(TxtAry(2))
for i=0 to ubound(MyData)
if FoxDE(i)=GetDE and FoxTE(i)=GetTE then
MyData(i)=GetVV
end if
next
FFL.VarData("MyData")=MyData
%>
版主好,最近也有此需求...所以找到這文..看了一下...
上述..的程式...有幾個問題請教:
(1) MyData:C*0; ?請問是哪種資料結構。
(2) ;陣列的寫法..若如此..則應只會捉一筆。
(3)MyData = FFL.VarData("MyData")
這該是日期格式吧...不會有問題嗎?..
(4)...看不到...寫入的動作...且..沒有..宣告.要write到哪個..
table ........這樣..可以寫入奇狐去??...
自己..試了一下...問題多多.......
----------------------------------------
我的想法:
將資料匯出...看文字欄位...決定..陣列維度..
資料結構..te..--時間的格式..我暫時沒找到...先放過..
欄位資料有小數浮點..所以..我改為..cdbl or .csng
可以用....
用..msgbox ..有值..
但..問題仍在...沒法寫入或不知要寫入哪裡?..
mydata嗎?...不知是什麼....可否乾脆一點..告知..謝謝。



MyData:C*0;
相當於MyData:Close*0;
將 MyData 這個變數, 設置為零值數列(與K棒等長)
例如:
有100根K棒, 就有100個收盤價, 將收盤價這個數列乘上零
就能達到我們要的 "與K棒等長之零值數列"

MyData = FFL.VarData("MyData")
將奇狐 MyData 這個數列, 導入 Vbscript 的 Mydata 變數之中
(在 VbScript 中 Mydata 為陣列變數, 此行是VbScript 程式)

MyData(i)=GetVV
將 MyData 陣列中的第 i 個元素設為 GetVV
(此行是 VbScript 程式)

FFL.VarData("MyData") = MyData
將 Vbscript 中的 Mydata 陣列變數, 傳回給奇狐 MyData 數列
(此行是 VbScript 程式)

此段程式是讀 TXT檔資料入奇狐之中
並非是寫資料入TXT檔, 故不會有 write 動作


由 megus002 在 2011-08-27 15:37 發表:

謝版主回話。.
我當然知..在.vbs是用..write 寫出。
我是指..單用...變數.mydata..就可以.把..資料..接收後...
奇狐就會update資料嗎...[按您的說法..?.]

單就第一支程式...讀入txf_file...的寫法...
讀出..一維陣列..給...mydata[i] ...

然..後..K線圖.就會改變嗎?..

[當然.改了一.下..資料格式....不然有錯..].....
請教我囉?...因我不認為可行....
1-
我假設..mydata或許是虛擬變數...去接收值...
但..那..我一跳出奇狐...那..K線不就..消失了...
2-若為實體.table ...那..還是..沒宣告它的結構...c*0 不是吧..
3-若都不是..那表示...只要餵資料給..mydata..就可..update線圖囉...
那..可真強了..........

另一問題...還請告知....
關於.陣列的寫法...我run了一下程式.....
這樣..到最後..最多就寫一筆....不會是整個..file
至少要用二維吧.......
請告知囉.....希望可以.有直接正確的寫法................
[若有困難或其它考量..也請告知.....也好節省時間..謝謝...]


由 megus002 在 2011-08-27 16:33 發表:

我附個摩台.5分資料好了....
看您的範例囉....


由 cgjj 在 2011-08-29 11:38 發表:

引用:
最初由 megus002 發表
謝版主回話。.
我當然知..在.vbs是用..write 寫出。
我是指..單用...變數.mydata..就可以.把..資料..接收後...
奇狐就會update資料嗎...[按您的說法..?.]

單就第一支程式...讀入txf_file...的寫法...
讀出..一維陣列..給...mydata[i] ...

然..後..K線圖.就會改變嗎?..

[當然.改了一.下..資料格式....不然有錯..].....
請教我囉?...因我不認為可行....
1-
我假設..mydata或許是虛擬變數...去接收值...
但..那..我一跳出奇狐...那..K線不就..消失了...
2-若為實體.table ...那..還是..沒宣告它的結構...c*0 不是吧..
3-若都不是..那表示...只要餵資料給..mydata..就可..update線圖囉...
那..可真強了..........

另一問題...還請告知....
關於.陣列的寫法...我run了一下程式.....
這樣..到最後..最多就寫一筆....不會是整個..file
至少要用二維吧.......
請告知囉.....希望可以.有直接正確的寫法................
[若有困難或其它考量..也請告知.....也好節省時間..謝謝...]



具舉個最簡單的例子來說

只用奇狐來算中價

HH:H; LL:L;
MM:(H+L)/2;


同樣的運算, 將中價部份改用 VBScript 來算

HH:H; LL:L;
MM:C*0; //設置一個與K棒等長的零值數列
<%
VH=FFL.VarData("HH") '將奇狐之 HH 數列傳入 VBScript 之 VH 陣列
VL=FFL.VarData("LL") '將奇狐之 LL 數列傳入 VBScript 之 VL 陣列
VM=FFL.VarData("MM") '將奇狐之 MM 數列傳入 VBScript 之 VM 陣列

'計算中價結果存入 VM 陣列之中
for i=lbound(VM) to ubound(VM)
VM(i) = (VH(i)+VL(i))/2
next

'將 VBScript 之 VM 陣列傳回奇狐之 MM 數列
FFL.VarData("MM")=VM
%>

先澄清一些觀念
1.奇狐系統必須該商品已存在並且擁有數據, 公式才能被執行運算
2.公式無法去創建或變更系統數據(例如:開高低收量等基礎數據)
 故不能利用公式去創造出一個新的商品和產生該商品的K棒


您可利用 VBScript 來做輔助計算或讀入外部文字檔案內容
文字檔案內容可以是註解, 也可以是數值資料
讀入後可在既有的K線當中做資料運算或應用顯示

以前面算中價的例子來說
MM 值您也可以透過文字檔賦予給它(不經由計算得到)
(用VBScript讀TXT檔中的資料,對應到相等K線位置)


由 cgjj 在 2011-08-29 11:43 發表:

引用:
最初由 megus002 發表
我附個摩台.5分資料好了....
看您的範例囉....



若您是要用公式創建一個新個摩台商品和其五分鐘數據
是不可行的
必須於自定義市場中去新建商品, 並匯入數據

若並非要創造新商品或創造新K線
而是利用外部文字檔讀入與當前商品K線相關連的數值(透過公式)
這是可行的


由 yes6689 在 2011-08-30 15:06 發表:

引用:
最初由 cgjj 發表
具舉個最簡單的例子來說

只用奇狐來算中價

HH:H; LL:L;
MMH+L)/2;


同樣的運算, 將中價部份改用 VBScript 來算.........................(省略)
..............................................................
先澄清一些觀念
1.奇狐系統必須該商品已存在並且擁有數據, 公式才能被執行運算
2.公式無法去創建或變更系統數據(例如:開高低收量等基礎數據)
 故不能利用公式去創造出一個新的商品和產生該商品的K棒




請教 cgjj :
依照上面的觀念,是不是意味著
我不能用計算出來的 MM 取代今日的收盤價,使其成為另一個數列呢?


由 cgjj 在 2011-08-30 15:28 發表:

引用:
最初由 yes6689 發表
請教 cgjj :
依照上面的觀念,是不是意味著
我不能用計算出來的 MM 取代今日的收盤價,使其成為另一個數列呢?



Yes
Close 是系統內建的數列, 無法用程式取代或變更其數值
但若是自己設定的數列變數, 則數值可任意被變更

例如:
MM:=CLOSE; //將收盤價存入自己設定的 MM 數列之中
MM[datacount]:=100; //MM數列是自己設定的, 故可被任意變更

計算後
會將 MM 最後一個元素(K棒), 值變更為 100
其他位置的值仍是當初存的收盤價

像以下這行就不被允許執行, 因為Close 是系統內建的數列
CLOSE[datacount]:=100;


由 taiwanyang121 在 2011-11-29 16:34 發表:

如果有2種以上數據要自動讀取?

1971/1/5,123.28,20.1
1971/1/6,122.93,21.3

以上為MyData.txt 的資料

我想要將資料自動讀取到奇狐然後在附圖中畫出圖形,要如何作?


由 taiwanyang121 在 2011-11-29 16:45 發表:

FoxDE:=DATE;
MyData1:C*0;MyData2:C*0;
<%
MyData1 = FFL.VarData("MyData1")
MyData2 = FFL.VarData("MyData2")
FoxDE = FFL.VarData("FoxDE")
Set fs = CreateObject("Scripting.FileSystemObject")
Set wrkfs = fs.OpenTextFile("C:\Da.txt", 1)
MyTxt = wrkfs.ReadLine
wrkfs.close
TxtStr=MyTxt
TxtAry = Split(TxtStr, ",", -1, 1)
GetDE=CLNG(TxtAry(0))
GetVV1=CSNG(TxtAry(1))
GetVV2=CSNG(TxtAry(2))
for i=0 to ubound(MyData)
if FoxDE(i)=GetDE then
MyData1(i)=GetVV1
MyData2(i)=GetVV2
end if
next
FFL.VarData("MyData1")=MyData1
FFL.VarData("MyData2")=MyData2
%>


結果出現以下錯誤? 問題在哪裡?


由 taiwanyang121 在 2011-11-29 16:51 發表:

請問如狐自動讀取外部數據

錯誤附圖


由 cgjj 在 2011-11-29 19:50 發表:

回覆: 請問如狐自動讀取外部數據

引用:
最初由 taiwanyang121 發表
錯誤附圖


1971/1/5 這欄是日期
讀入後因為其中有 "/" 字元
故無法直接用VBScript 的 CLNG 函數轉換為數值
所以會出現型態不符合


由 taiwanyang121 在 2011-11-30 14:11 發表:

請問如狐自動讀取外部數據

那要如何改數據?


由 cgjj 在 2011-11-30 15:04 發表:

回覆: 請問如狐自動讀取外部數據

引用:
最初由 taiwanyang121 發表
那要如何改數據?


奇狐的 date 是1900以來的的年月日

700101 代表 1970/01/01
710105 代表 1971/1/5

在 Excel 先將數據為奇狐的日期格式後, 再存入TXT讀入
這樣就不用每一次載入, 都要浪費CPU再轉換一次

假設 Excel A1 這格內容為 1970/1/1
Excel 轉換方法為:
=(YEAR(A1)-1900)*10000+MONTH(A1)*100+DAY(A1)


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


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

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