COCO研究院

 找回密碼
 註冊
搜索
查看: 10575|回復: 30

[EXCEL] 如何寫迴圈

[複製鏈接]
發表於 17-11-13 10:24 | 顯示全部樓層 |閱讀模式
本帖最後由 mori868 於 17-11-13 10:26 編輯

求一分K資料轉五分資料(8:45---13:45)
If Minute(time) Mod 5 = 1 Then
下面如何編寫
要每一分K高點值在五分鐘內一一相比求最高 這樣一直迴圈到收盤為止
敬請幫忙賜教
發表於 18-2-7 12:07 | 顯示全部樓層
mori868 發表於 18-2-7 11:17
"檔案裡的巨集程式碼我有加上註解,儲存格的函數公式也都在那裡"請教

如何打開 "檔案裡的巨集程式碼"?

其實樓主的問題大多數只要在google輸入關鍵字搜尋,就可以找到很多答案了,例如這個問題,其實只要在google搜尋"EXCEL如何啟用巨集"就可以找到很多了,好人做到底,
youtube有一系列的線上教學,樓主慢慢看吧,
https://www.youtube.com/watch?v=mvR1g7ziclc
不陪樓主喇D賽了,我要去忙自己的事了。


評分

參與人數 1金錢 +2 收起 理由
shunyulu + 2 您真是好人一枚

查看全部評分

回復 支持 1 反對 0

使用道具 舉報

發表於 18-1-28 13:45 | 顯示全部樓層
我是用比較笨的方法,
因為只會初階的程式語法,
所以我都想辦法在欄位直接以函數公式做處理,
如此一來或許也可以省下程式執行的時間吧?
舉例來說,要把1分K的資料轉成5分K的資料,
我會先把1分K的"開高低收"資料匯入A到D欄,
然後在E到H欄的儲存格寫入公式來處理轉換成5分K,
例如以求取5分鐘內的最高價來說,
假設B欄的B1到B5是某段時間的1分K的最高價,那就在對應的F欄的F1儲存格裡面寫上公式[=MAX(B1:B5)},餘此類推,所以F2儲存格的公式就是[=MAX(B6:B10)],.....這樣一來,只要把1分K的開高低收的資料匯入A到D欄,則E到H欄的儲存格就自動顯示5分K的開高低收等資料了。

發表於 18-1-28 14:21 | 顯示全部樓層
而且把時間用Mod 5 = 1的方法也會碰到問題,
舉例來說,1301(下午1點1分)除以5的餘數是1,所以可以用Mod 5=1的方式來當成轉換成這根5分K的起始時間,
這對台指期來說還好,因為台指期幾乎每個1分鐘的時間都有成交資料,
但是假如碰到比較冷門成交量比較少的商品,它的1301(下午1點1分)的成交資料可能從缺,而是1302才有成交資料,假如以Mod 5= 1的語法來說,程式會不會就把1302到1305的資料直接跳過,而去抓下一筆除以5的餘數等於1的1306的資料呢?
但是假如以我上面說的方式就不會有ˋ這種問題發生。
 樓主| 發表於 18-1-29 22:14 | 顯示全部樓層
a79625 發表於 18-1-28 14:21
而且把時間用Mod 5 = 1的方法也會碰到問題,
舉例來說,1301(下午1點1分)除以5的餘數是1,所以可以用Mod 5= ...

您說對了正確又簡單  可是我沒有慧根又不會跟 是否方便做一範例以利參考應用 是盼  謝謝

發表於 18-1-30 09:41 | 顯示全部樓層
樓主要求的是一分K資料轉五分資料(8:45---13:45),
其實正常的話,應該是8:45開始直到13:44結束(如此才符合交易時間5小時,而每小時有60分,所以5個小時的1分K數目應該是300筆),
例如
8:45 第1根1分K
8:46 第2根1分K
8:47 第3根1分K
8:48 第4根1分K
8:49 第5根1分K
以上統合起來為第1根5分K......餘此類推
所以13:40到13:44是最後一筆的統合5分K。
圖片有說明轉換的方式,請參考。

1分K轉5分K.png

轉換的檔案在此。



1分K轉5分K.rar

43.51 KB, 下載次數: 210

 樓主| 發表於 18-1-31 09:09 | 顯示全部樓層
本帖最後由 mori868 於 18-1-31 09:24 編輯
a79625 發表於 18-1-30 09:41
樓主要求的是一分K資料轉五分資料(8:45---13:45),
其實正常的話,應該是8:45開始直到13:44結束(如此才符合 ...

讚  謝謝  由於要完成一套 "盤中回補" "盤後更新" 懇請您能多多幫忙指導
請教下載一分資料存在C:\TXTMIN1\TFFITX1.csv
轉換完成的五分資料如何轉成TXT格式並存在C:\TXTMIN5\TFFITX1.txt




發表於 18-1-31 12:29 | 顯示全部樓層
mori868 發表於 18-1-31 09:09
讚  謝謝  由於要完成一套 "盤中回補" "盤後更新" 懇請您能多多幫忙指導
請教下載一分資料存在C:\TXTMIN1\ ...

說幫忙不敢當,我前面2樓有說過,其實我比較笨,而且只會初階的程式語法,
所以請樓主別對我抱太大的期望,因為越期望則失望越大,

我剛開始接觸EXCEL只懂得在儲存格輸入數字或複製貼上而已,
那些函數公式對我來說如同是無字天書,
所幸有谷哥大神,一步一步地慢慢學習才漸漸懂得一些基礎的皮毛東西而已,
我自己都還要找網路資源來學習了,所以不敢說要幫人,
只是因為自己曾經走過這條路,也受惠於網路上各位大師所貢獻的資源,所以碰到有心學習的同道中人提出的問題,而自己也剛好知道問題點,於是就把自己知道的淺薄知識拿出來而已,我不懂的還很多很多,其實EXCEL有一個功能很好用,那就是"錄製巨集",這功能在程式編寫時幫了我很多忙,樓主可以多加利用。

樓主提到的問題基本上可以分為手動儲存與程式儲存,
要把EXCEL檔手動儲存成TXT檔的話很簡單,樓主可以先開啟一個空白的新的EXCEL檔,然後把轉換完成的5分K資料(包含時間與開;高;低;收以及成交量)複製,再以儲存"值"的方式複製到這個空白的EXCEL檔,然後把這個新的EXCEL另存新檔,儲存時只要選擇格式是"Unicode 文字"即可轉成TXT檔,如下圖

傳存TXT檔_1.png

傳存TXT檔_2.png


至於利用程式儲存的話,善用"錄製巨集"的功能,
就可以發現把現行的EXCEL檔儲存成TXT檔的程式碼是
ActiveWorkbook.SaveAs Filename:="C:\TXTMIN5\TFFITX1.txt", _
        FileFormat:=xlUnicodeText, CreateBackup:=False


知道了這個程式碼之後,其他的就簡單了,就是再加上複製貼上等等程式碼而已,
當然假如要加上IF  THEN 等等的邏輯與FOR NEXT的迴圈的話,就需要再花點時間動點腦筋了,
不過目前來說我碰到的問題大多是利用初階的簡單語法就可以打發了,所以也就不想花太多心思去追求更高深的技巧,
畢竟我想要去瞭解EXCEL與VBA的目的是為了處理資料與交易與模擬等等,我並非想成為EXCEL大師,
所以我只要懂得交易與模擬時需要用到的簡單語法即可。

樓主有空還可以利用"錄製巨集"的功能來看看開啟一個新的EXCEL檔的程式語法或是刪除一個EXCEL檔或是把檔案複製或移動到其他資料夾的程式語法等等,很好玩的,我就是這樣慢慢玩的,我雖然笨,但是我會玩啊。


 樓主| 發表於 18-2-1 08:34 | 顯示全部樓層
本帖最後由 mori868 於 18-2-1 08:42 編輯
a79625 發表於 18-1-30 09:41
樓主要求的是一分K資料轉五分資料(8:45---13:45),
其實正常的話,應該是8:45開始直到13:44結束(如此才符合 ...

不錯的 IDEAL   感謝
請教
如果要下載 easy-win 一分K五天"全日盤歷史資料"(五千多支K棒)
1:如何寫程式一按就完成下載一分K五天"全日盤歷史資料"
2:下載後轉五分K如何精簡因有五千多筆資料要一一設定是很繁雜的事
3:敬請 幫忙賜教   謝謝
發表於 18-2-1 11:53 | 顯示全部樓層
本帖最後由 a79625 於 18-2-1 11:54 編輯
mori868 發表於 18-2-1 08:34
不錯的 IDEAL   感謝
請教
如果要下載 easy-win 一分K五天"全日盤歷史資料"(五千多支K棒)


1.首先我的easy-win最多只能匯出999筆資料,而且現在下午至凌晨又有電子盤的資料,所以1天份的1分K資料筆數已經超過999筆了,我不知道其他的看盤軟體是否有提供數千筆的資料可以下載?(或許其他需要付費的軟體有吧)
至於如何寫程式一按就完成下載一分K五天"全日盤歷史資料,這方面樓主可能要請教別人了,
高深的程式我不懂,所以我從easy-win抓資料都是手動的,
easy-win畫面右下角有個EXCEL的小圖示(把游標移到小圖示會顯示"儲存至EXCEL"),
按下去之後在電腦視窗會出現一個文字檔,
我會把這個文字檔另存新檔(檔名可以自己隨便設,方便就好,例如1分K我就設定檔名為1,5分K就設5,小時K就設h..等等),
這種方式抓下來的檔案都會儲存到當初裝easy-win軟體時預設的路徑,所以另存新檔時不需更改路徑,直接以新檔名儲存即可,
至於為何要設新檔名?
因為如果不設新檔名的話,easy-win會給這個文字檔案一個預設的檔名,
以台指期為例就是 TXFB8_20180201103735,檔名後面的數字代表的是2018年02月01日10點37分35秒,
因此不同的時間匯入的檔案會有不同的名稱,名稱不同就會增加我後面要從檔案提取資料的困擾,
所以不管抓資料的時間如何,我都會固定給他一個固定的檔名,有了統一的檔名,這樣後面我要寫程式提取資料時會比較方便,

至於問題2,
我的解決方法是假如有數千筆資料要處理的話,首先我會把這好幾天份的數千筆資料按照日期來提取,
然後利用簡單的複製與貼上的程式就可以把數千筆甚至數萬筆的1分K資料按照時間先後轉成5分K資料了,
例如假設有5天份(Day1到Day5)的數千筆1分K的資料要轉成5分K,
就可以利用上面的1分K轉5分K的檔案,把Day1的1分K資料複製到檔案的A欄到F欄,
然後再把檔案的O欄到T欄的5分K資料複製到其他工作表,
完成後再把檔案的A欄到F欄的1分K資料清除,
然後再把Day2的1分K資料複製到檔案的A欄到F欄....依序類推,
以上動作樓主可以利用"錄製巨集"的方式試試看,得到初步的程式指令之後,再來做細部的修改。
這種方式其實還蠻快的,辦法是人想出來,那種自己找出解決問題的辦法的喜悅是無法比擬的,加油。


 樓主| 發表於 18-2-2 21:00 | 顯示全部樓層
本帖最後由 mori868 於 18-2-2 21:17 編輯
a79625 發表於 18-1-31 12:29
說幫忙不敢當,我前面2樓有說過,其實我比較笨,而且只會初階的程式語法,
所以請樓主別對我抱太大的期望 ...

[url=]
"然後把這個新的EXCEL另存新檔,儲存時只要選擇格式是"Unicode 文字"即可轉成TXT檔,如下圖
點擊載入圖片"
1: 路徑:C:\TXTMIN1\TFFITX1.txt
            C:\TXTMIN5\TFFITX1.txt
            C:\TXTDAY\TFFITX1.txt
2:希望 轉成 TXT格式如下
TFFITX1.txt-記事本 (永豐 易利得五分K資料 逗號分隔) 適用於飛狐格式
2018/01/24,08:50:00,11199,11203,11185,11193,3862
2018/01/24,08:55:00,11194,11194,11186,11192,2052
2018/01/24,09:00:00,11191,11193,11175,11179,4090

請賜教    謝謝













發表於 18-2-3 09:59 | 顯示全部樓層
本帖最後由 a79625 於 18-2-3 10:00 編輯
mori868 發表於 18-2-2 21:00
"然後把這個新的EXCEL另存新檔,儲存時只要選擇格式是"Unicode 文字"即可轉成TXT檔,如下圖
點擊載入圖片 ...


轉成逗號分隔的文字檔,
手動方式有以下步驟,
另存新檔時,選擇格式就不要選"Unicode 文字",
而是選"CSV(逗號分隔)",如下圖所示,
傳存TXT檔_逗號1.png
檔案儲存之後,把滑鼠移到那個新的CSV檔,按右鍵,就會出現下圖的選單,
把游標移到"開啟檔案(H)",再選擇"記事本"開啟這個CSV檔,
傳存TXT檔_逗號2.png
就會出現以逗號分隔的文字檔(如下圖),
傳存TXT檔_逗號3.png
因為這是以"記事本"來開啟CSV檔,所以這個檔案本質上還是CSV檔,
因此必須再把這個以"記事本"開啟的文字檔另存新檔,
傳存TXT檔_逗號4.png
注意,另存新檔時要把檔名作更改,否則他還是會以原本的CSV檔名複寫成CSV檔而非TXT檔,
傳存TXT檔_逗號5.png
儲存完成之後,就會看到資料夾內多了一個TXT檔,
傳存TXT檔_逗號6.png
以上是手動步驟,看起來雖然有點繁瑣,但是操作起來其實很簡單,

至於如果要以程式語法的方式的話,
基本上以上的流程除了最後的步驟之外,應該都可以利用"錄製巨集"的方式來取得語法,
所以樓主可以錄製巨集,然後從頭開始一個步驟一個步驟的執行,相信應該不難,
至於最後的步驟,
樓主可以利用 FileCopy 這個指令來把CSV檔複製成TXT檔,
如下所示,
例如我要把C槽底下的AAA資料夾內的BB.CSV檔,複製到C槽底下的DDD資料夾內且檔名變成EE.TXT檔
FileCopy "C:\AAA\BB.csv", "C:\DDD\EE.txt"


 樓主| 發表於 18-2-3 16:59 | 顯示全部樓層
本帖最後由 mori868 於 18-2-3 17:23 編輯
a79625 發表於 18-2-3 09:59
轉成逗號分隔的文字檔,
手動方式有以下步驟,
另存新檔時,選擇格式就不要選"Unicode 文字",

不厭其煩指導   感謝
如何利用巨集錄製多天一分K歷史資料 做一簡單視窗 如
20180202-->20180202    按開始下載
1:日期可更改  但永遠只顯示今天
2:更改如 20180202-->201801025 就下載這段期間一分K歷史資料存放在 C:\TXTMIN1\TFFITX1.csv
3:不要一一去下載 很煩啦  希望只要改日期就可以
4:還是用迴圈的方法也可以
請幫忙賜教      謝謝



發表於 18-2-4 00:12 | 顯示全部樓層
mori868 發表於 18-2-3 16:59
不厭其煩指導   感謝
如何利用巨集錄製多天一分K歷史資料 做一簡單視窗 如
20180202-->20180202    按開始 ...


樓主碰到的問題,雖然我很想解答,
但是如我先前所說,我只會初階的而已,所以我力不從心,
而且資料下載的問題,就如同我在9樓說過的"我從easy-win抓資料都是手動的",
雖然每天要手動抓資料很煩,但是因為只是抓台指期的資料而已,所以我是把它當成每天的功課,
所以關於這個問題,我只能說抱歉了,樓主可能要另外請教其他人了,
EXCEL在COCO的程式交易板塊似乎比較冷門,所以討論的人不多,
因此我提供3個比較專門在討論EXCEL與VBA的論壇網站給樓主參考,
樓主可以先瀏覽文章看看,或許可以在那裏找到解答,
假如找不到解答或是未來碰到新的問題的話,也可以註冊成為那些論壇的會員(反ˊ正是免費的),
然後提出問題,我想在那幾個論壇應該比較容易找到解答。

1.程式交易聚寶盆
http://www.programtrading.tw/viewforum.php?f=3&start=50
(這個論壇應該是高雄應用科技大學金融資訊研究所的姜林杰祐教授所創立
http://www.programtrading.tw/viewtopic.php?t=3064)

2.程式設計俱樂部
http://www.programmer-club.com.tw/forum/vb.html
裡面關於VBA的討論文章主題不少,但是有些問題不見得有人解答,

3.ExcelHOME
http://club.excelhome.net/forum.php
這是對岸的論壇,樓主假如閱讀簡體字沒有問題的話(就算有問題的話,還是可以靠GOOGLE翻譯),
這個網站資源之豐富無可比擬,EXCEL函數與公式子板塊以及VBA開發子板塊的主題文章各有數十萬篇,
而且我在那裏有看到以前常常在YAHOO知識+回覆EXCEL與VBA的相關問題的大師(准提部林大大),
當時在YAHOO知識+看到這位大師的功力與熱心另我印象非常深刻,
而且那裡似乎還蠻熱門的,因此在那裡所提出的問題應該比較會有人解答與討論,
我想假如樓主把問題敘述清楚的話,在那裡應該不難得到答案。

最後祝樓主的問題可以早日得到解決。

 樓主| 發表於 18-2-4 06:27 | 顯示全部樓層
本帖最後由 mori868 於 18-2-4 06:29 編輯
a79625 發表於 18-2-4 00:12
樓主碰到的問題,雖然我很想解答,
但是如我先前所說,我只會初階的而已,所以我力不從心,
而且資料下 ...

您提供這些資訊   謝謝
知道了  用手動的並以巨集錄製 是否可以
若方便的話  以EASY-WIN 大台 下載一分K歷史資料 若有永豐易利得最好
1:今天的一分K歷史資料 用巨集錄製
2:前天的一分K歷史資料 用巨集錄製 如何製作 請幫忙做範例
3:以後我會錄製多天的歷史資料
4:下載為.csv-記事本  轉改EXCEL格式 如"EXCEL DDE(日期  開  高 低  收 量)" 永遠把今天資料放在最上面 以利以後編排與轉換週期
5:"按鈕"按那天就錄製那天  至於按鈕以後我想辦法加上
專此拜託      謝謝


發表於 18-2-5 15:08 | 顯示全部樓層
mori868 發表於 18-2-4 06:27
您提供這些資訊   謝謝
知道了  用手動的並以巨集錄製 是否可以
若方便的話  以EASY-WIN 大台 下載一分K歷 ...

其實我不太瞭解樓主上面所提出的那幾點,
這樣吧,
請樓主把"永豐易利得"手動下載的檔案的檔名&檔案儲存的資料夾位址告知,
另外檔案的資料欄位與格式也一併PO圖上傳,
如此一來,VBA才知道要去哪個資料夾抓取什麼檔名的檔案,而檔案打開之後,那些欄位的資料是必需的,
另外樓主說要把今天的資料放在最上面,所以樓主是希望資料以倒敘排列的方式囉?
有了以上這些資訊才能夠做後續的動作。

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-12-22 20:30

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |