顯示具有 python 標籤的文章。 顯示所有文章
顯示具有 python 標籤的文章。 顯示所有文章

2024/01/02

python py轉exe後執行失敗

 最近在更新一個python檔案,更新完要透過pyinstaller轉成exe,會用到pandas跟openpyxl兩個套件。

轉出來後卻無法執行,錯誤訊息是說numpy有問題(Error importing numpy: you should not try to import numpy from....)

這個是在裝pandas時自動裝進來的,研究到最後就是python的版本太新(3.9.x),重新建一個虛擬環境,降到3.6就排除這個問題了。

但卻產生另一個錯誤(ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd)

查到最後也是版本的問題,最快的方法就是重做一個虛擬環境,python是3.8.1,然後pip install pandas跟openpyxl,xlrd跟numpy的問題就沒了。



I have been updating a Python file recently, and after the updates, I need to convert it to an executable using pyinstaller. The script relies on two packages, pandas and openpyxl.

However, after the conversion, the executable cannot run, and the error message indicates an issue with numpy (Error importing numpy: you should not try to import numpy from....). It turns out that this issue arose because of the version of Python being too new (3.9.x) when installing pandas. I resolved this by creating a new virtual environment and downgrading to Python 3.6.

However, this led to another error (ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support. Use pip or conda to install xlrd). After investigation, I found that this was also a version-related problem. The quickest solution was to create a new virtual environment with Python 3.8.1 and then install pandas and openpyxl using pip. This resolved the issues with xlrd and numpy.

2023/12/21

Shioaji 觸價停損

 Shioaji的官網上有提到怎麼做觸價停損: https://sinotrade.github.io/zh_TW/tutor/advanced/quote_binding/#_3

但我連callback都不懂的人,裡面寫的我實在無法理解,所以就想了另一個解法。

因為我只當沖小台,所以就一直snapshot小台目前的價格,每0.5秒一次,並不會超過流量限制。

如果價格有到我的停利或停損價,就馬上執行市價平倉單,來達到觸價停損的機制。

因為市價單必須是IOC,所以要馬上檢查庫存還有沒有單,確認是否已平倉,如果沒有,就繼續下市價平倉單,以確保我有把單平掉。

這就是個人一個簡單的觸價停損作法。

另外就是有發現一個問題,如果我平倉是掛當下限價單,用當下snapshot抓到的小台價格,幾乎不會馬上成交,我就要重新抓小台價格,把下單價格在更新重下,大概都要等個30秒才會成交,就會滑價。但改用市價單就直接成交,出場滑價的機會就會比較小,這也是用市價單的好處。


2023/11/08

學會程式交易~開啟穩定賠錢的旅程

 為了打造自動化交易工具,產生穩定的被動收入,就開始學python,要來打程式交易。

程式做出來了,但交易策略不太行,所以反而變成穩定的被動失血。

策略還是最重要的東西,想不出一個正期望值的策略,有沒有程式交易其實也沒什麼意義。


2023/08/18

Python Excel書推薦

 Python操作Excel:最強入門邁向辦公室自動化之路 王者歸來

這本書裡面範例多,而且都很簡短,好上手,想要Python來處理Excel資料的很適合。




2023/08/11

Python py轉exe的執行檔太大

 Python寫好的執行要直接轉成exe檔在其他沒裝Python直接運行,可是轉出來的exe檔都好大,幾KB的py檔轉成exe變成幾百MB。

原來是因為之前是用Anaconda裝好環 境的,裡面有一大堆套件,在轉換時,也一直被塞進去了。

要解決這個問題,就是建一個新的虛擬環境,裝上所需的套件,再進行轉換,exe檔就變成幾十MB而已。

可以參考下面網站,說的非常清楚。

https://inf.news/zh-hant/technique/0abeedacd79bf29153e82893d9a0e280.html



Converting a Python script into an executable (.exe) file is a convenient way to run the program on systems without Python installed. However, the resulting .exe files tend to be quite large, often several hundred megabytes, even for scripts that are just a few kilobytes in size.

The reason behind this issue is that if you previously developed your code within an Anaconda environment, it likely included a multitude of packages and dependencies. During the conversion process, these dependencies are also bundled into the executable, contributing to its substantial size increase.

To address this problem, a solution involves creating a new virtual environment, installing only the necessary packages, and then proceeding with the conversion process. This approach results in executable files that are only a few tens of megabytes in size.

For a detailed guide on how to accomplish this, you can refer to the following website:

https://inf.news/zh-hant/technique/0abeedacd79bf29153e82893d9a0e280.html

2023/07/04

Shioaji 1分k轉成其他分k

 永豐shioaji可以把1分k做匯出,然後在自行轉成其他分k。

做法通常就是把1分k資料用pandas轉換成datafram,然後在用resample的方式,轉成其他的分k。

不過在轉成其他分k時,會遇到兩個問題。

第一是轉成其他k分時,會有從左邊算起或右邊算一起的問題,這就會影響到資料的正確性,關於這個,可以參考https://ithelp.ithome.com.tw/articles/10280495 這篇文章,用label跟closed兩個參數去調整資料的正確性。

系統預設是左邊,但在轉換shioaji的資料時,要從右邊算,出來的分k開高收低才會對。

第二個問題是在用resample重把切分1分k時,都是以完整一小時去切,譬如說你要換成30分k,系統就會用x點00分跟x點30分去切,但台指開盤是8點45分,應該要切成x點15分跟x點45分。

這時後就要在加一個base的參考,範例可參考 https://towardsdatascience.com/using-the-pandas-resample-function-a231144194c4 這篇最後面‘Base’ Argument的說明。


另外就是1分k只能用日期 去過濾,但裡面會包含到日跟夜盤的資料,如果只要日盤,或是特定時間,就要用between_time這個參考去過濾,範例可去https://geek-docs.com/pandas/pandas-dataframe/python-pandas-dataframe-between_time.html 看看。

2023/06/12

Shioaji 篩選 目前週選的TX代號

 現在選擇權代號通常會有當週,下週,跟月選3個合約,如果現在是第一週,就是有TX1,TX2,TXO,三個。只有第三週是2個(TXO跟TX4)。

目前的python語法裡TX是寫死的,每周要自己手動改,有點煩,所以就想了一個動判斷的語法,來抓今天是該是TX幾。

主要就是判斷連續兩週的合約有沒有值,如果都有的話,那TX就是比較小的那個。

像是TX1跟TX2都有值,那今天就會是TX1。

第三週因為是抓TXO跟TX4,但第四週也會有TXO跟TX4,所以這一個判斷要放在最後面才行,不然第四週會被先判斷成是TXO。

#抓當週的週選的TX代號
if api.Contracts.Options['TX1'] != None and api.Contracts.Options['TX2'] != None:
    TX = 'TX1'
    print(api.Contracts.Options[TX])
elif api.Contracts.Options['TX2'] != None and api.Contracts.Options['TXO'] != None:
    TX = 'TX2'
    print(api.Contracts.Options[TX])
elif api.Contracts.Options['TX4'] != None and api.Contracts.Options['TX1'] != None:
    TX = 'TX4'
    print(api.Contracts.Options[TX])
elif api.Contracts.Options['TX4'] != None and api.Contracts.Options['TX5'] != None:
    TX = 'TX4'
    print(api.Contracts.Options[TX])
elif api.Contracts.Options['TX5'] != None and api.Contracts.Options['TX1'] != None:
    TX = 'TX5'
    print(api.Contracts.Options[TX])
elif api.Contracts.Options['TXO'] != None and    api.Contracts.Options['TX4'] != None:
    TX = 'TXO'
    print(api.Contracts.Options[TX])

2023/06/02

pyinstaller py轉exe出現錯誤:The 'pathlib' package is an obsolete

 在用pyinstaller把一個py檔要轉成exe執行檔時,出現下列錯誤

The 'pathlib' package is an obsolete backport of a standard library package and is incompatible with PyInstaller. Please remove this package (located in C:\Users\helloeveryone\Anaconda3\lib\site-packages) using  conda remove then try again.

這時就執行 pip uninstall pathlib ,把pathlib移除就好,移除後不需要再重裝一次。

之後執行pyinstaller,就可以成功把py轉成exe了。



When using PyInstaller to convert a .py file into an executable (.exe) file, the following error occurs:

"The 'pathlib' package is an obsolete backport of a standard library package and is incompatible with PyInstaller. Please remove this package (located in C:\Users\helloeveryone\Anaconda3\lib\site-packages) using conda remove then try again."

To resolve this, execute "pip uninstall pathlib" to remove the pathlib package. After removing it, there is no need to reinstall it.

Afterward, running PyInstaller should successfully convert the .py file into an .exe file.


2023/06/01

Shioaji 篩選 期貨 日盤的kbars

Shioaji 在撈Kbar資料時,可以指定開始跟結束的"日期",然後就產出這段時間的一分k資料 。

假如是撈期貨的資料,就會把日盤跟夜盤的kbar全部列出來。



如果只想要日盤或夜盤,或是某幾小時內的資料時,就要做個篩選。
篩選的方式就是:
1. 先把dataframe裡的ts欄位設成index
df.set_index('ts',inplace=True) 
2. 在用between_time的功能,選出要的時間區間,就完成了。
df=df.between_time('08:44', '13:46')


可以參 考這篇
https://geek-docs.com/pandas/pandas-dataframe/python-pandas-dataframe-between_time.html





2023/05/15

shioaji 組合單多次IOC大失誤

在shioaji下單的模式中,只有ROD 、FOK、IOC三種。

如果要下組合單,需要使用到多次IOC的話,但shioaji系統內無多次IOC可以直接使用,就必須用迴圈讓系統一直重覆執行IOC,但在執行前,必須先確認庫存是否已有單,有單就表示成交,就不能在繼續跑,不然就可能會一直下單下到滿為止。

所以在下IOC前,有先做檢查庫存,但檢查庫存的功能卻失效,一直下單,還好戶頭裡錢不多,下了10口就停了。

檢查程式才發現,原來是檢查庫存的變數在更外圈的程式中,所以第一次成交後,下單前檢查庫存的變數未更新,還保持是0,所以就繼續下IOC,繼續成交。

在測試多次IOC真的要小心,錢不能放太多,以免不小心就直接被下滿。

2023/05/03

python 書 網站 推薦

 這篇就是以一個完全不懂程式的人, 分享學習Python的一些書或網站,主要就是以能讓初學者比較好懂的內容為主。

書的話,下面這兩本就是自己有看完覺得還不錯的,大概就是要範例多一點,但不要太長,而且對程式的說明要多詳細一點:

1-Python零基礎入門班(第三版)

2-跟著阿才學Python


網站的話,就推薦YOUTUBE上的彭彭,內容豐富,講的也很仔細,難怪網路上也一堆人在推薦。

https://www.youtube.com/watch?v=wqRlKVRUV_k&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=1

2023/04/21

永豐 shioaji api 登入後只有證券帳號 沒有期權帳號

跟期貨營業員確認已申請好了shioaji的api後,在python下指令要列出帳號清單,發現都只有證券帳號,沒有期權帳號,有點怪。

後來上了永豐api官方的telegram去發問,才知道原來當初在申請api key的時後,因為只有證券戶,期貨戶還沒開好,所以申請api key的過程,只有證券戶可以勾選,所以用那組api key登入時就只有證券帳號可以用。

重新在申請一次api key,勾選期權選項後,登入測試就有列出期權帳戶了。

2023/02/08

永豐 shioaji api 一直登入失敗 ValueError

 一開始學習就充滿挫折~

裝好shioaji套件後,最一開始就是先登入,在這關就卡三天,找到網路上一些教學,也有官方出的PDF檔文件,結果登入後都很怪,雖然有session up的字眼出現,但又有產生其他錯誤。


登入後常會看到這兩種錯誤訊息
ValueError: The seed must be exactly 32 bytes long或ValueError: Invalid character '0'



後來又在官網上在仔細查看,發現了一小段重要的說明,就是以前登入的帳號密碼,是跟下單軟體一樣,用身份證字號去登入,但現在api的登入帳號密碼已經不同了。
是要先去永豐金理財網這個網站,登入後裡面有個API管理的功能,新增一組系統自動產生的超長帳號跟密碼來搭配api登入,程式碼也跟舊的不太一樣,可以參考官網的教學 https://sinotrade.github.io/zh_TW/tutor/login/  


照網站教的,api登入就成功了,不會有那些奇怪的錯誤訊息。
















2023/02/02

永豐 shioaji 無法安裝

 在python裡要安裝永豐API要用的一個套件shioaji時,一直失敗,就找不到這個套件。

後來才發現,這個套件不支援自己電腦內的python3.11版。

所以就要另外裝一個python舊版的環境,目前測試是在3.8跟3.9都可以裝。

Anaconda 建立不同版本python環境

 最近在學Python,是直接去下載Anaconda來安裝,裝好後就有Python可以使用。

平常在寫程式是,是利用裡面已經有的SPYDER或是Jupyter notebook,在裡面編寫程式跟執行。

但最近要下載一個套件,在目前使用的Python版本裡不支援,需要用比較舊的Python才行。

這時Anaconda就有個很好用的功能,就是它可以產生不同的虛擬環境。

Anaconda剛裝好的時後,就會有預設的一個環境,搭配當下一起安裝好的Python。

如果想要用改的版本的Python,可直接建立另一個虛擬環境,選擇不同版本的Python就行了。

這時SPYDER或是Jupyter notebook還是會用預設的Python版本在執行,所以就要做一下調整。

詳細方法可以參考這篇,寫的很仔細。

https://www.modb.pro/db/194246 

Recently, I've been learning Python by downloading and installing Anaconda. Once installed, Anaconda provides a Python distribution that I can use.

When writing code, I typically utilize the built-in IDEs like Spyder or Jupyter Notebook that come with Anaconda. I write and execute my code within these environments.

However, I recently needed to download a package that is not supported by the current version of Python I'm using. I needed an older version of Python for compatibility.

This is where Anaconda's useful feature comes in: it allows the creation of different virtual environments.

By default, Anaconda creates an environment with the Python version that was installed at that time.

If I want to use a different version of Python, I can simply create another virtual environment and choose the desired Python version.

In this case, Spyder or Jupyter Notebook will still use the default Python version for execution, so some adjustments need to be made.