- 這是我最常用到的進出場方式,相信很多人應該都聽過.好啦話不多說,直接進入主題 底下是"2317.TW"鴻海的量價圖,我們會分別定義出我們的上通道,下通道,跟最基本的移動平均線.透過上下通道形成我們股價波動所可以容忍的範圍.在通道中走動一般視為盤整的動作,一但跌出通道表示股價超跌.等收十字線或者是底部大量形成且內外盤比高於5成.代表下跌後有人在底部接手的動作,切記,一定要融資使用率不能操過20%,不然籌碼還是處於浮動的狀態.
- 買進訊號: 跌出通道且收十字線成交量收紅,就可敲進2成的資金.等股價從下越過下通道到通道內時,可做加碼的動作.切記加碼資金不能操過資本的5成. PS: 最好搭配買賣超的filter在前面,避免超賣時,股價瞬間跌出通道外,而我們的買入訊號立刻敲進,但還有一波的下跌空間,這樣就很容易被套在中間點.要先確保好頭部的反轉點是否形成.
- 出場訊號: 一但股價漲出上通道,或者達到獲利目標,一般我是設定10%,就可以找時間出場.
- 優點: 風險低 .
缺點: 進出場次數低,要空頭市場反轉時比較會看到. 如遇到多頭市場就不準了.
Code 4 MaBand
Inputs: OPrice(Open), CPrice(Close), HPrice(High),LPrice(Low),Length(9), PrcntAbv(.5), PrcntBlw(.5), Displace(0); input:n(9),stoploss(.5),stopprofit(.5); Variables: UpperEnvelope(0), LowerEnvelope(0); UpperEnvelope = AverageFC(HPrice, Length) * (100 + PrcntAbv) / 100; LowerEnvelope = AverageFC(LPrice, Length) * (100 - PrcntBlw) / 100; if CPrice <= LowerEnvelope and OPrice <= CPrice then Buy("B") next bar at market; if marketposition > 0 and CPrice >= UpperEnvelope then exitlong("XB") next bar at market;
- 績效表 一年只交易了4次,好像有點少....不過至少都能獲利出場. Case 2311.TW(日月光),測試時間2009/02/16~2010/02/09
2010年2月27日 星期六
Moving Band 4 Stock Entry
youtube catcher
- 現在市面有很多youtube的Download軟體,本來以為只要打開網頁原始檔就可以看到連結位置,可能是我想法太天真了..呵呵.這裡就拿別人已經寫好的code 當例子講解一下要如何download. 程式碼跟原理主要參考 Ref: http://www.catonmat.net/blog/downloading-youtube-videos-with-a-perl-one-liner/
- 其實主要還是透過封包分析出規則,首先youtube會建立個mirror的網址這個是我們一般所看到的http://www.youtube.com/後面接的是影片的資訊,如下http://www.youtube.com/watch?v=5f-MYl-HzNw&feature 我們點入後,他會定義好要回傳給Server所要的值,如width="425" height="350"...還有影片的檔名. Server的位置在http://youtube.com/get_video?video_id=$_&t=$t, 很明顯可以看到影片所存在的位置,透過 Wget or WWW::Mechanize 的方式把影片抓回到 local
- sample code from http://www.catonmat.net/blog/downloading-youtube-videos-with-a-perl-one-liner/
use WWW::Mechanize; use Number::Bytes::Human qw(format_bytes); for (@ARGV) { s{http://www\.youtube\.com/watch\?v=}{}g; $m = WWW::Mechanize->new; $m->get("http://www.youtube.com/watch?v=$_&gl=US&hl=en"); ($t) = $m->content =~ /, "t": "([^"]+)"/; open $f, "> $_.flv"; binmode $f; $m->get( "http://youtube.com/get_video?video_id=$_&t=$t", ':content_cb' => sub { ($c, $r) = @_; $b += length($c); if ($r->content_length) { printf STDERR "$_: %.2f%%: %s of %s \r", 100. * $b / $r->content_length, format_bytes($b), format_bytes($r->content_length); } print $f $c; }); $b = 0; print "\n"; close $f; }
4.執行結果,在console下鍵入 %perl youtub.pl http://www.youtube.com/watch?v=5f-MYl-HzNw&feature=fvsr 下載完後請用 KMPlayer來撥放.
2010年2月26日 星期五
OllyICE 4 PassWord hack
- OllyICE 可以模擬X86的Machine code,藉由Assembly的分析,找出斷點跟Register的status,達到PassWord hack. OllyICE支援軟體除錯、脫殼、分析算法 ... (破解) Ref http://forum.slime.com.tw/thread224674.html 詳細說明文件請上網google
- 這邊我們就以最簡單的方式來做教學, sample code 判斷輸入的值是否為 "1234", 確定就Pass.
- 打開OllyICE, 載入a.exe檔,因為我是用Cygwin內的gcc compiler出來的,所以要加入Cygwin的路徑,不然會fail,如果你是在Dos底下,請把Sample code抓回去,自己重新compiler一次. a.exe : 自行complier,THX sample code : http://sites.google.com/site/funningboy/perl_code/guess.c?attredirects=0&d=1
- 先按F9 run 一次,猜猜看程式的架構,發現會斷在 0040114E . /0F84 9C010000 je 004012F0 在console會出現input password的字樣. 就先隨便打入猜一下輸入的格式. 發現只要是chart的型態會出現無窮回圈,如果全int會跳過,表示輸入的PassWord是0~9的數字組合.
- 再透過查找關鍵字的方式,回推出Program所在的Address區段 按右鍵 search for -> all referenced text strings , 發現關鍵字, Pass Ok.得知記憶體的區段位置
- 再回到Assembly code的位置,發現 00401089 . 817D FC D2040>cmp dword ptr [ebp-4], 4D2 ; 要經過cmp才能夠往下走,所以在cmp這邊做斷點check.如果Pass,就會走到 00401092 . C70424 332040>mov dword ptr [esp], 00402033 ; ASCII "Pass Ok",LF. 所以我們就拿4D2當作input PassWord看看,發現可以走道Pass OK. 而4D2轉成10進位得1234,就大概可以猜出是否是PassWord. 或者是改JP的位置,直接跳過Check到PassOk,如果能直接跳到Pass Ok,就表示在Check的loop一定是輸入Pass Word的地方. 關掉OllyICE,重新打開a.exe,輸入1234就OK了 Ref: http://www.pediy.com/
2010年2月25日 星期四
MSN robot 1
- 在之前的Warning System中,我們用mail當我們的通報系統, 詳細請參考底下連結 http://funningboy.blogspot.com/2010/02/arning.html
- 這邊我們替換掉mail的通報系統改成MSN的模組. Step1. 請安裝 SOAP::Lite; http://search.cpan.org/~mkutter/SOAP-Lite-0.710.10/lib/SOAP/Lite.pm Step2. 請參考 << 微程式資訊(股)有限公司 >> 所開發的MSN套件 ref: http://blog.udn.com/lukeshei ps.也請參考 msnSDK的使用流程
- sample code 要先Run register(); 讓MSN Robot成為你的聯絡人 再來Run sendmsg(); 發送訊息 sample code http://rd-program.blogspot.com/2008/11/3msn-perl_14.html
Facebook Login
- 先安裝 LWP::UserAgent http://search.cpan.org/~gaas/libwww-perl-5.834/lib/LWP/UserAgent.pm 用於Web 的 Application func,適用於Web Login, URL get, FTP Connect....
- 安裝OpenSSL 做網路安全加密的傳輸Lib 安裝教學請參考 http://nxforce.blogspot.com/search/label/SSH%2FSSL
- Check Web Login Methods 可檢視Login網頁原始碼 確定傳輸方式,底下可之是用表單來連接.在依序填入表單的欄位 <form method="POST" action="https://login.facebook.com/login.php?login_attempt=1"
- sample code $ua->cookie_jar(\%cookies); $response = $ua->post('https://login.facebook.com/login.php', { email => 'xxxxx', # would be the actual email pass => 'xxxxx', # would be the actual password login => 'Login', });
- 程式碼下載 http://sites.google.com/site/funningboy/perl_code/facebook.pl?attredirects=0&d=1
ref: http://www.ibm.com/developerworks/linux/library/wa-perlsecure.html http://www.experts-exchange.com/Programming/Languages/Scripting/Perl/Q_23940417.html
2010年2月24日 星期三
JTAG
- JTAG(Joint Test Action Group),利用邊界掃描的方式,依序的做Shift and Capture for each test Vector,即可對HardWare內部的Flip-Flop做Debug的動作.
優點: 簡單,不需要用到Probe的方式,可針對內部的Scan-Flip-Flop.
缺點: Boundary Scan Length/Scan Length過大時,會降低Debug的效能.
Pin Assignment
TDI (Test Data In)
TDO (Test Data Out)
TCK (Test Clock)
TMS (Test Mode Select)
TRST (Test Reset) optional
利用TDI/TDO的 I/O端口做Vector的輸入跟輸出, Test Vector in(TDI), Result out(TDO),
TMS為FSM Mode Select, TCK為Trigger Clock, TRST 為系統Reset.
Ref: http://en.wikipedia.org/wiki/Joint_Test_Action_Group
利用FSM來判斷status,Mode select先選 Instruction Mode決定HardWare 內部要做怎樣的Mode,如現在是JTAG Debug Mode or Function Mode...等Mode 決定好時, 在下個Clock切換到Data Mode,開始打我們所要的Pattern,在此同時TDO會收到上一筆我們所要測的Result.
Ref: http://en.wikipedia.org/wiki/Joint_Test_Action_Group - 如果對JTAG Debug 有興趣的人,可以參考 http://urjtag.org/ 這裡面有已經開發好的Driver跟Debug,不過限制只有他內部提供的Board跟Cable有效.如果不是的,可能要自寫個Interface2Interface的Converter.
GDB Debug
- 在Embedded系統上常被用到的就是GDB Debug的機制,透過Remote control 設定 break point or print register status... 底下是目前最常看到的Debug平台,透過PC 端compiler好 Target(ARM)端的執行檔(.EXE),在藉由JTAG燒入到Target上,最後透過GDB Remote Debug的方式,設定Break Point or Dump Register的方法,達到Realtime Debug.
- 這邊我們簡化流程,把Target端跟Host端都在我們的PC上來模擬Embedded Debug的流程.
- Step 4 模擬PC連到 Target 端
請在開個新的console,鍵入
% gdb
執行結果
2010年2月23日 星期二
Trading Performance v2
- 接續 http://funningboy.blogspot.com/2010/02/trading-performance-v1.html
- 這邊我們會根據使用者設定的參數做篩選的動作,根據Poluation, Generation...的condition,來篩選適當的基因.
- 最後再透過移動視窗法把每一季的結果交叉比對,看是否能達到我們所要的目標.
- 執行結果 1101.TW(台泥) EndDay 2010/02/09, test sequence 90 days Dispaly mode Indictor name : MACD Fast Length : 12 Slow Length : 26 BuyOrSell : 1 EnterTradeDate: 2009/10/02 LeaveTradeDate: 2009/10/28 EnterPrice : 37.00 LeavePrice : 35.00 Profit : 2 LifeTime : 56 Indictor name : OLDOBV Fast Length : 4 Slow Length : 24 BuyOrSell : 1 EnterTradeDate: 2009/10/06 LeaveTradeDate: 2009/10/29 EnterPrice : 36.60 LeavePrice : 34.45 Profit : 2.15 LifeTime : 45 基因解 0,9 Parents:: PARENTA,HASH(0x2490bac) PARENTB,HASH(0x1ca2ba4) Mutation:: 6 -> 2 Length:: BIASFAST,2 BIASSLOW,24 KD,8 MACDAVG,9 MACDFAST,12 MACDSLOW,26 OBVFAST,6 OBVSLOW,22 RSIFAST,5 RSISLOW,11 WRFAST,13 WRSLOW,24 Profit:: AVGPRF,1.89285714285714 BIAS,2.2 KD,0 MACD,3.05000000000001 NEWOBV,0 OLDOBV,4.2 RSI,0 TOTPRF,13.25 WR,3.8 http://sites.google.com/site/funningboy/perl_code/Ga_rst.txt?attredirects=0&d=1
- 結論 每種技術指標會對於市場而言,會有不同的表現,當多頭市場形成時KD反而不準.反而MACD會比較準確,所以每個指標都有其相對的市場基礎,要先行確定目前是盤整,多頭,空頭.在套用過去模擬的結果做推斷跟分析.達到降低進出市場的風險性.
Trading Performance v1
- 相信有在做程式交易的人應該對進出場的訊號特別敏感,而這些進出場的訊號如何決定,不外乎透過一些技術指標(KD, RSI...),成交量(OBV),法人買賣超...,要怎樣評斷說當KD=?,OBV=?...時我們買進或者出場?我想就必須要靠歷史資料的回測跟分析.當然市面上有很多相關的軟體套件,如TS(TradeStation),HTS... 上網google下,其實就有很多人在做類似的研究 http://ssdkchang.blogspot.com/ http://skyelephant.blogspot.com/ http://www.programtrading.tw/index.php 不過這邊不是教你如何使用TS or HTS...因為在開發套件上還是有些限制,如法人買賣超明細,基本面分析....,這是在TS所沒有提供的.其實是我也不知道怎樣inlude到TS內.呵呵.... PS:我拿TS當圖形介面(K線)跟簡易的回測分析...
- 底下進入我們的核心部分 1.利用SDDE 抓取我們每日所要的資訊, SDDE 請參考 http://funningboy.blogspot.com/2010/02/sdde-server-v1.html http://funningboy.blogspot.com/2010/02/dde-server-for-stock.html 2.透過GA演算法找出最佳的進出場策略 http://en.wikipedia.org/wiki/Genetic_algorithm 3.假設策略決定好後,回報給下單機做下單的動作 PS: 目前還是手動下單.
- GA 演算法流程 利用適者生存,不適者淘汰的方式重複的Run Case,找到最適合的基因解,其實在做最佳化的過程會抹平很多CoFactor,導致我們所得到的數據不符合真實情況.應該說我們找到的解應該不只一個,而是一個群集,有一個space的空間,即使不是最佳的解,但我們也能藉由這些解集合達到獲利出場的結果. PS: Global min我個人認為是很難達到,因為我們是做歷史資料的最佳化,未來的量價是很難被確定的.只能做Prediction的方式來避免這樣的問題發生.當然要做的好還是要靠不斷的驗證跟經驗累積,在之後會介紹FANN(Fast Artificial Neural Network)的系統,透過學習跟訓練達到未來價量的預測.
- 基因的決定
目前基因鍊上的染色體,
- 染色體 : 我們預設用各種指標函數來表示,
- 染色體的優劣: 分別由各個指標的獲利來表示.
- 染色體 : 存在每個指標內,代表進出場時間跟訊號,生存時間
- 進出場判斷: 以KD 為例:
- KD 進出場判斷
- Step1當(K<20>D : Buy=1, EntryCot++, Profit=0, LifeTime=50.
- Step2 計算T+n天的 Profit. 如果
(Price > EntryPrice) LifeTime+=1, Profit=(Price-EntryPrice)/EntryPrice*100%
(Price
待續.....
Warning System
- 通報系統的應用範圍很廣,有財務通報系統,火災通報系統,IT Server 通報系統.... 透過Sensor Nodes 回傳 Warning 訊息給 Server,讓 Server端能夠快速的知道在哪個Sensor發生錯誤,可運用在大範圍資料的處理減少每個Sensor Node的負載跟人力成本的付出.
- 設計架構 以IT Server為例,假設我們要確保每台 work station都能work,但有100台work stations要處理,總不能每次都一台一台慢慢登入,如果有通報系統,我們就不用手動一台一台的Check. Mail + Sensor Nodes + PC Mail : 我們用Mail Server來接收Warning Message (Gmail,Hotmail...) Sensor Nodes: 要待測的Work Station PC : PC 流程圖,透過Request,跟Response的機制
- 安裝套件 Email::Send::Gmail http://search.cpan.org/~lbrocard/Email-Send-Gmail-0.33/lib/Email/Send/Gmail.pm openSSL -> 傳輸加密套件 MD5,SHA http://www.openssl.org/ 安裝流程 http://nxforce.blogspot.com/search/label/SSH%2FSSL
- sample code Sensor Node Detection 1.可以用內建的Telnet判斷workstation alive/dead http://zh.wikipedia.org/wiki/Telnet 2.Ping workstation http://en.wikipedia.org/wiki/Ping 在加入判斷條件,最後導入mail.pl mial.pl http://sites.google.com/site/funningboy/perl_code/mail.pl?attredirects=0&d=1
- 執行結果
2010年2月22日 星期一
Audio Beep
- 當初會做這個sample是因為我找不到Board上BeeBee音而找的替代方案,不像在Linux的環境下只要% beep,就會發出提示音,不過這樣也好拉,古人說塞翁失馬焉知非福...就順其自然摟.沒想到這個model下還可以開發出很多奇怪的東西呢.
- 請先下載 Audio::Beep 套件 安裝教學 http://perl.hcchien.org/ch13.html
- Sample code 底下以Windows XP為範例 Windows API 控制Kernel32.dll的Driver my $player = Win32::API->new('kernel32', 'Beep', 'NN', 'N'); Win32::Beep ( [FREQUENCY, DURATION] )
Kernel32.dll相關說明 http://en.wikipedia.org/wiki/Kernel32.dll#Kernel32.dll Kernel32.dll API http://www.webtropy.com/articles/art9-2.asp?lib=kernel32.dll http://search.cpan.org/dist/Win32-API/samples/Win32/kernel32.pm
如對轉檔有興趣可參考 Perl Audio Converter http://sourceforge.net/projects/pacpl/
SDDE Server-V1
- 這邊是透過 "Web" 連到"Yahoo"跟"元太"卷商抓取每日的成交 資訊,不是透過DDE的報價機,如果要Access DDE 報價機請看我之前寫的DDE for Stock http://funningboy.blogspot.com/2010/02/dde-server-for-stock.html
- 主要功能介紹 主力進出表 : 抓當日前30大買賣超股票. 買賣超明細 : 抓當日卷商的進出明細. 歷史股價 : 抓從2009/01/01到今天的 "Open", "High", "Low", "Close", "Volume". 當日進出場提醒: 假設進出場策略已訂,可藉由當日交易時間內做進出場的提醒. 當日買賣明細 : 每隔1分鐘抓yahoo stock的資訊. PS: 因為是透過網路抓取,一但所需要的資訊量太大,會造成資料延遲的狀況.如果只是做盤後分析,應該是沒什麼問題.如果要在盤中做即時策略分析我想還是有點難度,因為不可能只考慮10幾支股票吧...都至少要100支一上的份量.... 對於操作現股跟資料v.s卷商的相關性有比較大的幫助.
- 執行前請先對Perl 或者是 程式語言有基礎的架構. 程式碼跟教學下載 http://sites.google.com/site/funningboy/perl_code/DDE_v1.rar?attredirects=0&d=1
Thread
- 每次碰到 Thread就很頭大,不知道哪個執行緒會先完成,哪個又會被呼叫...雖然可以針對每條thread做Priority的設定,但這又扯到CPU的架構,跟硬體的loading....X86跟MIPS底下,想同的程式碼,跑出來的Performance也會有差. 底下大概介紹一下不同架構的差異性,我們在之後會詳述每個Architecture. X86 : http://en.wikipedia.org/wiki/X86 MIPS:http://en.wikipedia.org/wiki/Instructions_per_second
- Threads 的種類 Kernel Thread 即 Thread 由 Kernel Create 和 Distory, 共同生活在 Kernel space中.如Display, KeyBoard Access ...Driver control,系統要run 時所要用到的Process. Lightweight Process 特別是指給 User用的 Kernel Thread,因為 Kernel Thread 分為給user用和自己用的兩部份(asychronous I/O, ex: disk write),所以 Lightweight Process 也就是 Kernel Thread.如 HardDisk 的存取, USB...,平常不需要時會idle,等需要用到時才Wake Up. User Thread 由 Library 控制. Creating, Scheduling, Synchronization, Managing... 都由 Library 負責, Kernel 跟它是獨立的
- Thread Sample code 假設我們現在有4個獨立的Thread,不考慮join的問題.分別為Priority 1,2,3,4.且模擬執行時所需要的時間,預設為3s. 我們發現當執行之後,thread會沒有跑完.而死在裡面. 如果把 sleep 8 打開後,發現所有的thread 都做完了.如果以單一個Procss來看四個至少要4*3=12s,但用thread之後, performance 還小於8 s, 看來裡面有用到Parallel的機制. 程式碼下載 http://sites.google.com/site/funningboy/perl_code/thread.pl?attredirects=0&d=1
Port Scanner
- 一般駭客做系統入侵時,會針對系統上面所開的port跟安全上的漏洞做 inject,把惡意的程式碼植入到系統上,這邊我們不討論駭客是如何入侵,因為當駭客是非法的..... port number list http://www.iana.org/assignments/port-numbers 主要還是 80: Http, 21:FTP, 25:SMTP...大家比較熟知的部分
- 這邊用到Socket的範例 http://funningboy.blogspot.com/2010/02/internet-socket.html
- 執行結果
- 程式碼來源 http://blog.linym.net/archives/93
Game for Snake
- 想當初在高中時代紅極一時的3310遊戲 "貪食蛇",堪稱是手機遊戲的先驅呢.話不多說,來介紹一下 "Snake" 設計架構.
- 主要分成兩大部分 1. Core,為我們的Data Base,計算每個Snake Node的X,Y座標. 2. Display為GUI的圖形介面(Layout). 下圖我們用最簡單的範例來講解Core的部分,(X,Y)為在圖表上X,Y的座標,Snake上的每個Node用structure的方式記錄每個Node所在的位置跟方向,假設下一步為向左的方向,等下個time strobe時 update每個Node. 經過update之後可以看到我們更改了Node內部的X,Y座標.跟Direction.等下個time strobe來決定Direction . 依此類推可以得到下一次每個Node的X,y座標. Display的部分就比較簡單了,用Array的方是依序填入每個[i][j]值,在導入Java的Display API.最後在設定Strobe的速度,food的位置,record,wall.... 執行結果. 程式碼下載 http://sites.google.com/site/funningboy/perl_code/Snake.java?attredirects=0&d=1 執行檔下載 http://sites.google.com/site/funningboy/perl_code/Snake.jar?attredirects=0&d=1
Internet Socket
- 有修過網路概論,或是計組的人應該對socket不陌生,而我會接觸到這個套件,也是因為工作上的需要.....,主要是能透過分散式的處理程序減少在local端的運算量,把複雜的運算跟大量的Data Base存在Work station上,PC 端就可以藉由Socket 的套件 Access 到我們想要的結果.
- 透過GDB Rmote debug幫我們在embedded bord上做Debug跟燒入的動作 http://www.study-area.org/cyril/opentools/opentools/x1265.html Socket 基礎介紹 Socket 類別針對網路通訊提供一組方法和屬性。 Socket 類別可以讓您使用 ProtocolType 列舉型別中列出的任何通訊協定來執行非同步資料傳送。 目前唯一支援的 ProtocolType 為 TCP 通訊協定。 Ref: http://msdn.microsoft.com/zh-tw/library/system.net.sockets.socket(VS.95).aspx
- Socket的開發套件,目前有很多支援的程式語言,如Java, C, C++, VC, Perl...,這邊用Perl當範例,因為Perl的語法簡單易懂,如此而已. Java: http://www.cis.nctu.edu.tw/~is82001/NetProg/6/main.html http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html C: http://www.scottklement.com/rpg/socktut/introclient.html perl: http://www.tutorialspoint.com/perl/perl_socket.htm
- 我們主要分成兩塊來運行,Server, Host(Client)端. 先Check IP Address,跟所開的Port 是否能通過防火牆. 如果是在自己電腦端對自己電腦端請把IP address 改成 "127.0.0.1" local host
- sample code for Server $socket = new IO::Socket::INET ( LocalHost => '127.0.0.1', LocalPort => '80', Proto => 'tcp', Listen => 5, Reuse => 1 ); die "Coudn't open socket" unless $socket; //連線到 127.0.0.1 : 80 /TCP傳輸... Listen 5次,重新傳輸1次 $client_socket = $socket->accept(); //確定連線 close $client_socket; //close 連線
- Sample code for Client $socket = new IO::Socket::INET ( PeerAddr => '127.0.0.1', PeerPort => 80, Proto => 'tcp', ) or die "Couldn't connect to Server\n";
- 執行結果,黃色部分為Server端,紅色部分為Client端 程式碼下載 Server: http://sites.google.com/site/funningboy/perl_code/tcpserver.pl?attredirects=0&d=1 Client :http://sites.google.com/site/funningboy/perl_code/tcpclient.pl?attredirects=0&d=1
DBI Driver
- DBI(Data Base Interface),相信有學過資料結構的人應該不陌生,Data Base就像是一個資料庫,可供我們做查詢的動作,大致上可分為 File access, Excel, SQL...這邊我們不詳述每個Data Base的架構.我們主要探討如何透過Perl Wrapper 去call API,進行資料存取的動作. API 參考 http://search.cpan.org/~timb/DBI/DBI.pm
- Data Base Line 最簡單就是發出 request 給 Server,Server在根據我們所下的request 在response我們所要的結果,有些資料庫連線必須透過加密解密的動作,如網路的表單查詢... 如果只是自己host端,只友我們可以access的話,我們就不需要做到加密解密的動作. openSSL 加密/解密 傳輸 http://csc.ocean-pioneer.com/docum/ssl_basic.html http://www.openssl.org/ 最簡單的方式,就是輸入使用者名稱跟密碼,透過明碼加密的方式. $dbh = DBI->connect($dsn, $user, $password, { RaiseError => 1, AutoCommit => 0 });
- Driver Check,我們透過Check的方式,來抓取現有系統下,我們所能夠handle的Data Base sample code for "DBI_Driver.pl"
-
#!/usr/bin/perl -w
use DBI;
use strict;
use warnings;
DBIDriverTest();
sub DBIDriverTest{
my @drivers = DBI->available_drivers();
die "No drivers found!\n" unless @drivers; # should never happen
### Iterate through the drivers and list the data sources for each one
foreach my $driver ( @drivers ) {
print "Driver: $driver\n";
my @dataSources = DBI->data_sources( $driver );
foreach my $dataSource ( @dataSources ) {
print "\tData Source is $dataSource\n";
}
print "\n";
}
}
- 程式碼下載
2010年2月21日 星期日
OLE function
- 因為要做策略分析要用到Excel的套件來幫我把圖表做好,不得已只好打開API lib,如果已經內建好了Active Perl,裡面有個model "Win32::OLE" 的套件,這是存取excel API lib 微軟的範例網頁提供了簡易的教學範例 http://support.microsoft.com/kb/214797/zh-tw
- sample code use Win32::OLE; $xlApp = Win32::OLE->new('Excel.Application'); ..... // 填入我們所需要的欄位,跟參數 $mydata = [["Item", "Category", "Price"], ["Nails", "Hardware", "5.25"], ["Shirt", "Clothing", "23.00"], ["Hammer", "Hardware", "16.25"], ["Sandwich", "Food", "5.00"], ["Pants", "Clothing", "31.00"], $rng = $xlBook->ActiveSheet->Range("A1:C7"); //抓column A1 到 column C7的值 # Create a chart too... $chart = $xlBook->Charts->Add; $chart->SetSourceData($rng, 2); $chart->{ChartType} = 70; # 3D-pie chart $chart->Location(2, "Sheet4"); // plot chart PS: Excel有支援的圖形介面有 "折線圖", "圓餅圖", "柱狀圖"... 其控制碼可以參考 Excel API http://www.fred.net/brv/chart/ 最後會把統計的數字自動建出我們所要圖表. 其他參考 http://www.xav.com/perl/faq/Windows/ActivePerl-Winfaq12.html http://www.ngbdigital.com/perl_ole_excel.html
DDE server for Stock
- 有在做程式交易的人應該對DDE(Dynamic Data Exchange)不陌生, 這是 "微軟" 為了做資料交換所做的傳輸模式,透過server hanlde 我們所需的要求,減少在PC端所需要的運算量.從微軟官方的角度,制訂了 DDEML (Dynamic Data Exchange Management Library) 的規格,是 Windows 32-bit 的 APIs(Application Programming Interfaces),是被實作在 "User32.DLL". http://en.wikipedia.org/wiki/Windows_library_files
- 最為大家所熟知的,就是透過DDE跟Excel相連,在Excel內部做進出場判斷,等策略決定後,再回傳給DDE做下單的動作. 其實上網google就一堆API的範例了... http://www.programtrading.tw/viewtopic.php?t=36 http://ssdkchang.blogspot.com/2009/09/ts.html 其實一般卷商的看盤軟體都有支援DDE的報價,這邊我們是用富邦證卷所提供的報價機,在藉由perl access DDE的方式.抓取我們所需要的"時間", "股票名稱", "量", "價"....畢竟還要去parse Excel有點不符合效率....
- 請先安裝 "Win32 DDE client" model,因為這不是 cpan裡的model請在 command line底下鍵入 % ppm repo add bribes % ppm install Win32-DDE 請參考 http://www.mail-archive.com/perl-win32-users@listserv.activestate.com/msg38134.html http://www.bribes.org/perl/win32ddeclient.html PS: 確保安裝完全,可鍵入 % perl -e 'use Win32::DDE::Client;'
- sample code use Win32::DDE::Client; use Win32::DDE; $Client = new Win32::DDE::Client ($MySerNm, $MyHostNm); die "Unable to initiate conversation" if $Client->Error; defined ($StockNmPtr = $Client->Request ($StockNm)) die "DDE request Name failed"; 這邊我們有紅色的地方是我們要填入的欄位參數,分別為 $MySerNm, $MyHostNm, $StockNm, 以我們富邦DDE報價機的範例,假設我們要查2330.TW台積電的"量","價" XQFAP::Quote::{2330.TW-Name} //抓2330.TW 的名稱 XQFAP::Quote::{2330.TW-Price} //抓2330.TW的成交價 XQFAP::Quote::{2330.TW-TotalVolume} //抓今日的總成交量 藉由這些範例我們可以得知我們要填入的欄位 $MySerNm = 'XQFAP'; $MyHostNm = 'Quote'; $StockNm = '2330.TW-Name'; 以此類推可以得到 "價", "量", "內外盤比" .... 在之後會 討論進出場理論跟判斷原則.......
print port control
- 在嵌入式的系統架構下,如何把data燒入到target board(ARM,embedded...)上,不外乎透過ARM 的 multi ice/ADS,而這些傳輸的動作,必須要用到cable線來連接target(board) and host(PC),以下我們就用最簡單的方式透過print port 打出我們所要的vector. "Wiggler" 為目前最為廣泛應用的cable線,因為便宜且製作方便,材料器材都可在電子材料行買到,詳細資料可以在此找到 http://blog.xuite.net/kyanite0909/techshare/15457382 http://www.frozeneskimo.com/electronics/arm-tutorials/jtag-wiggler-clone/
- 我們在這邊主要是介紹如何藉由 "Perl" 呼叫 Windows 的 DLL,透過Driver control的方式把vector打出去,首先要Perl模擬環境,目前我是用active perl 當我的environment, 因為active perl 可以安裝在Windows上,且ppm套件可以從cpan下載 . http://www.activestate.com/activeperl/ 安裝流程請上網查詢
- 假設已經有了perl的模擬環境,現在就必須透過cpan的連線下載perl的model套件, 進入command line % % cpan % get Device::ParallelPort::Printer % exit 在 /c/Perl/cpan/build/內會看到你下載好的model,在鍵入以下的command % cd /c/Perl/cpan/build/Device-ParallelPort-1.00 % perl Makefile.pl % make test % make install PS: 如果你是用windows的command line下,請先下載專為DOS nmake,在把make的command改成nmake . http://msdn.microsoft.com/zh-tw/library/dd9y37ha(VS.80).aspx 不然就請先下載好cygwin的Linux模擬環境. http://www.cygwin.com/ 如果以上步驟都ok了,可以在command line下鍵入 % perl -e 'use Device::ParallelPort::Printer;' 來確保model已經安裝完成.
- 再來請到http://logix4u.net/Legacy_Ports/Parallel_Port/Inpout32.dll_for_Windows_98/2000/NT/XP.html 安裝我們所需要的DLL driver檔 "Inpout32.dll". 請放到Windows\sytem32的資料夾底下. 底下來簡略介紹一我們要如何控制 "Inpout32.dll" 的input/output的接口,首先要確定我們的print port的硬體driver是否已安裝好. 可以到 控自台->系統-> 進階 -> 硬體 -> 裝置管理員 check 一下 bios 要driver print port時所要用到的address 區段,一般是用"LPT1" address為 "0x378" 這個記憶體區段 http://logix4u.net/Legacy_Ports/Parallel_Port/How_to_read_Parallel_Serial_Port_address_from_BIOS.html 在第一個框框我們已經確定好我們的address區段後,在第二個框框我會check我們的DLL是否可以被呼叫起來. 利用Win32的API做input,output的接口測試,以這段為例子Win32::API->new("inpout32", "Inp32", ['I'], 'I'); 會create一個new的ptr,後面依序接的是DLL的name,DLL下的call func,再來是input,output的接口.這邊必須要注意到parallel port是用byte作傳輸,一次8個bit.如果只是單純對一個bit而言,可以用MSB LSB的方式,定義好所要傳的格式,把騎他的bit填成o/1.
訂閱:
文章 (Atom)