發表文章

目前顯示的是 11月, 2018的文章

[Linux] SSH筆記

圖片
Linux系統基本上都有ssh server,大部分都可以直接下指令遠端進入,工作上常常會用到ssh遠端管理機器,今天有一部新的機器要架設,卻熊熊忘記怎麼用了,本篇就來寫個筆記記錄一下,重新複習了一下 鳥哥第十一章 ,裡面有很多詳細的說明,以下是我的操作筆記:    1. 檢查ssh是否啟動          ps -aux | grep ssh              2. 查詢機器的IP位置         ifconfig           3. ssh  [account]@ip         ssh  xxxxx@192.168.1.20         這樣就可以遠端進行操作囉!!

[Python] pyalgotrade 第一篇

圖片
        如果你有不錯的想法,想進行股票投資,但是不知道這個方法的績效會怎麼樣?可以透過歷史的資料模擬交易,就可以得到一個參考的績效,也就知道大概的報酬率了,這樣就叫做回測,篩選出適合你的投資策略。如果你熟悉Python,那恭喜你,現在有很多回測的平台可以使用,省略掉要寫很多的交易規則、買進賣出的股市交易的邏輯,可以專注於策略或資金管理的開發上,本篇就來教學Pyalgotrade的入門範例,並以yahoo finance 台灣50作為範例, 下載 範例程式 。 安裝pyalgotrade pip install pyalgotrade 準備台灣50歷史資料 https://finance.yahoo.com/quote/0050.TW/history?p=0050.TW 下載歷史資料 改寫yahoofeed.py           因為下載下來的資料,有些日期的資料是null,直接執行會造成錯誤,所以這邊先                  改寫處理資料的部分,簡單地加個try/except即可: def parseBar ( self , csvRowDict): try : dateTime = self .__parseDate(csvRowDict[ "Date" ]) close = float (csvRowDict[ "Close" ]) open_ = float (csvRowDict[ "Open" ]) high = float (csvRowDict[ "High" ]) low = float (csvRowDict[ "Low" ]) volume = float (csvRowDict[ "Volume" ]) adjClose = float (csvRowDict[ "Adj Close" ]) if self .__sanitize: open_ , high , low , close

[Python] Websocket Example

圖片
使用Systemctl啟動服務Service ,裡面使用到的範例是啟動Websocket Server,還沒講解到怎麼建立Websocekt Client去跟Server做溝通,現在就以很簡單的例子來做教學。 先來看一下 SimpleWebSocketServer 所提供的範例: from SimpleWebSocketServer import SimpleWebSocketServer , WebSocket class SimpleEcho(WebSocket): def handleMessage ( self ): # echo message back to client self .sendMessage( self .data) def handleConnected ( self ): print ( self .address , 'connected' ) def handleClose ( self ): print ( self .address , 'closed' ) server = SimpleWebSocketServer( '127.0.0.1' , 8866 , SimpleEcho) server.serveforever() 這個範例是Client端送訊息到Server端,不管內容是什麼就回傳回去,例如: Client :  Hello! Server:  Hello! 這樣就可以確定Server跟Client之間的溝通是沒有問題的,我在 使用Systemctl啟動服務Service 這篇文章中,已經把Websocket Server建成服務了,所以server已經在系統上執行了,接著我們開始來製作一個Websocket Client。 這邊使用的是 Websocket-Client 所提供的範例: import websocket try : import thread except ImportError : import _thread as thread import time def on_message ( ws , m

[Python] 快速使用Logging的範例

Python logging看起來很簡單,但是其實他的設定還蠻多的,以下提供一個快速可以套用的Log class給大家參考,我把它寫一個sigleton的Class,原因是一般開發程式會有很多個檔案,我希望在同一個地方把logging設定好,其他地方只要呼叫Log.Info('Hello')就可以輕易地使用。 import logging from logging.handlers import TimedRotatingFileHandler from pathlib import Path class Log: _instance = None def __new__ ( cls , *args , **kw): if not cls ._instance: cls ._instance = super (Log , cls ). __new__ ( cls , *args , **kw) return cls ._instance def __init__ ( self ): self .logger = logging.getLogger( "Log" ) self .logger.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(levelname)s : %(message)s' ) log_path = 'logs/' Path(log_path).mkdir( parents = True, exist_ok = True ) handler = TimedRotatingFileHandler(log_path + 'example.log' , when = 'd' , backupCount = 10 ) handler.setFormatter(formatter) self .logger.

[Justin's Works] 選擇權模擬交易程式

圖片
            我很喜歡研究投資理財的商品,從銀行定存、零存整付、基金、儲蓄型保單、黃金存摺、股票、期貨還有選擇權,多少都有碰一點,雖然不是很厲害但是都有了解過,在學習選擇權的時候,了解這個衍生性商品,操作上相當靈活,做空可以Buy Put或 Sell Call,做多可以Buy Call或Sell Put,衍生出很多的操作策略,多頭價差、空頭價差、比例式價差、蝶式價差、禿鷹價差、時間價差、跨式部位、勒式部位、鐵蝴蝶策略、鐵禿鷹策略.......買現貨加上選擇權當保險,一大堆策略,像我們這種業餘人士,滿腦子一堆疑問,那我到底要用甚麼策略好呢?看到好像可行的方法,想試看看耶!但是會不會丟錢下去就賠光光,網路上 CMoney股市大富翁 模擬真實市場,股票和期貨選擇權都有,對於新手或是資金不足的朋友可以進場練功,在模擬的過程中累積經驗也不錯,我也玩了一陣子,發現了時間上的問題,試驗一個策略,要跟隨著真實市場的時間,測試起來很難知道績效,除非要很有毅力地交易好幾年,所以我又想到何不利用自己的專長,寫程式進行回測,期交所和證交所的資料都是公開的,可以利用以前的資料測試自己的策略,所以我就寫了個選擇權模擬程式,不過現在還很陽春,沒有UI介面,需要用打指令的方式進行,以下就來介紹使用方式: 選擇權的交易基本上就是Buy Put、 Buy Call、 Sell Put、 Sell Call,賣方需要保證金,買方需要先付權利金,你也要知道你要做哪份合約,你要做的是哪一個履約價,他的權利金是多少,所以我設計功能有: 1.  資金(初始1000000),可用資金,盈虧計算 2.  查詢各合約、各履約價的權利金價格 3.  紀錄目前留倉的部位 4.  下單功能 5.  進行下一天(根據大盤指數,各權利金的變化計算盈虧和資金變化) 6.  結算日結算留倉部位 7.  統計勝率賠率 請先 下載程式 ,目前只提供Windows10,下載後直接安裝,執行後如下圖,會先顯示所有指令 了解指令後,step by step說明使用方式 查詢權利金 下單指令  (範例 Sell Call,結算日計算) 下單指令  (範例 Buy Call,獲利平倉) 了解這兩個範例基本上就可以進行操作了,

[Linux] 使用Systemctl啟動服務Service

圖片
現在要把開發好的程式,在Linux系統上自動啟動,可以透過Systemctl來管理,剛好最近的工作需要用到,就來邊紀錄使用過程,順便給需要的人作參考。 首先我們先查查一下Systemctl是什麼東西,在 鳥哥的Linux私房菜第十七章 很詳細地介紹系統服務,先來了解一下。 看過鳥哥很詳細的地介紹後,知道了整個來龍去脈,以下開始利用一個簡單的範例來做看看。 1. 準備好要執行的程式     利用一個簡單的websocket server的範例程式,我是用Python的套件 SimpleWebSocketServer 提供的範例程式,再用pyinstaller打包成一個執行檔 ( pyinstaller打包教學 ),來當作我們服務的主程式。 2. 將範例程式放到/opt      大家可能會問為什麼要把執行的檔案放到/opt呢?因為這裡頭是我們一般應用程式所放的路徑,避免像放到/usr/bin之類的資料夾與系統程式有所衝突,我把剛剛產生的執行檔放到 /opt/websocket_servet/bin。 3. 製作service檔,並放至/lib/systemd/system/     製作一個websocket_server.service檔案,內容如下: [Unit] Description=Simple Websocket Server Documentation=https://github.com/dpallot/simple-websocket-server Wants=network-online.target After=network-online.target [Service] ExecStart=/opt/websocket_server/bin/websocket_server   #主程式執行的位置 Restart=on-failure      #程式死掉自動重新啟動 [Install] WantedBy=multi-user.target 4. Systemctl啟動服務                systemctl daemon-reload                 // 重新載入設定檔          systemctl enable  websoc

[Python] 使用 Pyinstaller打包成執行檔

圖片
   最近用Python寫了一個簡單選擇權交易模擬程式,想要給朋友試用看看,但是還要幫朋友的電腦安裝Python的環境,還有一大堆套件才能順利執行,後來發現Pyinstaller這個好東西,可以將Python程式打包成執行檔,實在是太棒了,今天就來寫個HelloWorld範例打包一下。 1.  安裝Pyinstaller             pip install pyinstaller         2.   準備好 HelloWorld.py                                                   3.   準備打包       pyinstaller  -F  HelloWorld.py         就會產生build和dist兩個資料夾跟一個設定檔HelloWorld.spec, build的資料夾裡面是一些工作檔案和紀錄,HelloWorld.spec裡面是一些打包的設定(之後再詳細說明),最重要的執行檔就產生在dist裡面了。 4.  執行HelloWorld      cd dist       ./HelloWorld              就會印出HelloWorld!!囉, 之後再來介紹比較複雜的程式打包。