python-量化交易-異常處理
阿新 • • 發佈:2021-01-31
此處將實現一個模擬進行股票交易,對異常情況進行處理的過程。
具體的buy()函式需根據券商提供的介面實現。
處理異常的目的:防止程式直接崩潰。
(程式出錯後代碼給出一個解決方案,而不是崩潰了事)
例如網路不穩定產生的異常(HttpError),而非程式本身。
異常的丟擲方法:
if #條件:
#執行操作
else:
#丟擲異常
raise ValueError(f"BOUGHT of {quantity} share(s) of stock {stock_code} FAIL!")
以上ValueError(f"BOUGHT of {quantity} share(s) of stock {stock_code} FAIL!")這個部分的字串引數將作為
異常e的提示內容,可以在捕獲e之後打印出這個字串。
捕獲異常並列印異常提示的內容:
try:
buy(stock_code=stock,quantity=quant,random_paramenter= 0.2,maximum_try= max_try)
except Exception as e:
print(f"捕獲buy函式丟擲的異常,內容為:\n{e}")
print('執行出現問題,進入異常處理')
print('error happened while buying...')
else:
print('執行很順利')
樣例程式碼:
import random
# if __name__ == '__main__':
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
#define function to buy a stock
#最大嘗試次數---3
max_try = 3
#股票程式碼
stock = 'AAPL'
#數量
quant = 1
# 語言:
language = 'en'
#buy function
def buy(stock_code = None, quantity = 0,language = 'en',random_paramenter = 0,maximum_try = 3):
try_now_counter = 0
while(True):
#此部分根據券商API完成
if try_now_counter<3:
if random_paramenter<0.3:
if language == 'en':
print(f"successfully bought {quantity} share(s) of {stock_code} successfully")
else:
print(f"第{try_now_counter + 1}次嘗試---成功-----")
print(f"成功買入{quantity}股{stock_code}")
return
else:
print(f"已執行第{try_now_counter + 1}次嘗試,失敗。。。")
try_now_counter += 1
else:
raise ValueError(f"BOUGHT of {quantity} share(s) of stock {stock_code} FAIL!")
#指定隨機種子,確保每次虛擬側首結果可重複
random.seed(10)
random_number = random.random()
print(random_number)
try:
buy(stock_code=stock,quantity=quant,random_paramenter= 0.2,maximum_try= max_try)
except Exception as e:
print(f"捕獲buy函式丟擲的異常,內容為:\n{e}")
print('執行出現問題,進入異常處理')
print('error happened while buying...')
else:
print('執行很順利')
執行結果1(隨機數大於0.3):
已執行第1次嘗試,失敗。。。
已執行第2次嘗試,失敗。。。
已執行第3次嘗試,失敗。。。
捕獲buy函式丟擲的異常,內容為:
BOUGHT of 1shares of stock AAPL FAIL!
執行出現問題,進入異常處理
error happened while buying...
Process finished with exit code 0
執行結果2 (把隨機數換成小於0.3的數):
successfully bought 1 share(s) of AAPL successfully
執行很順利
Process finished with exit code 0
將程式碼在pycharm中向左縮排一個tab
------>shift+tab
###PS: 檢查python安裝的位置,並安裝相關的包
import sys
print(sys.executable)
這裡假設輸出的執行路徑是:
/Users/lianda_duan/opt/anaconda3/bin/python
在終端或者筆記本的cell中執行以下命令進行包安裝:
! /Users/lianda_duan/opt/anaconda3/bin/python -m pip install pulp