本文記錄使用easytrader+easyquotation實現策略的程序化交易的流程。上一篇 已經記錄了使用easytrader進行程序化交易的過程,本文主要對easyquotation獲取實時數據實現策略進行介紹。
- easyquotation安裝
pip install easyquotation
- 選擇行情數據源
# 選擇數據源
import easyquotation as eq
q = eq.use('qq')
-
判斷是否進入交易時間9.30-11.30---1:00--3:00
# 判斷是否進入交易時間9.30-11.30---1:00--3:00
time_now = datetime.datetime.now()
if time_now.time() < datetime.time(9, 30, 0) \
or datetime.time(11, 30, 0) <= time_now.time() <= datetime.time(13, 0, 0):
continue
if time_now.time() >= datetime.time(15, 0, 0):
print("當前時間:"+time_now.time().strftime('%Y-%m-%d-%H-%M-%S')+"不在交易時間段,退出交易程序化")
break
-
根據時間更新成交量權重
volume_weight = 1
if time_now.time() > datetime.time(13, 0, 0):
delta_seconds = (time_now - datetime.datetime(time_now.year, time_now.month, time_now.day, 13, 0, 0)).total_seconds()
volume_weight = 1 + delta_seconds / 7200
print('\n', time_now)
time_str = time_now.strftime('%Y-%m-%d-%H-%M-%S')
#定義一個買入股票對象
buy_stocks = {}
data = q.stocks(stocks)
print('返回數據:'+data)
-
循環遍歷
for key in data:
# 價格過20日均線
ma_20 = (history_data[key]['ma_19'] * 19 + data[key]['now']) / 20
if not data[key]['now'] >= ma_20:
continue
# 漲幅不能過大
if not (data[key]['now'] - data[key]['close']) / data[key]['close'] < 0.0618:
continue
# 成交量
if not data[key]['volume'] > history_data[key]['volume'] * volume_weight:
continue
buy_price = 0.02 + data[key]['now']
if g_trade:
buy_limit = min(balance, 3000)
if 100 * buy_price < balance:
ret = user.buy(key, buy_price, buy_limit // (buy_price * 100) * 100)
print(ret)
buy_stocks[key] = buy_price
stocks.remove(key)
print(key)
C:\Python38\python.exe F:/GZH/stock/src/com/gzh/stock51_buy.py 獲取當前目錄:F:\GZH\stock\src\com\gzh/../ 股票代碼: ['sh600256', 'sh600348', 'sh600968', 'sh600971', 'sh601857', 'sh603300'] 數據:
{
"name": "廣匯能源",
"code": "600256",
"now": 3.28,
"close": 3.4,
"open": 3.38,
"volume": 55377600,
"bid_volume": 15774500,
"ask_volume": 39603000,
"bid1": 3.27,
"bid1_volume": 1127100,
"bid2": 3.26,
"bid2_volume": 1612700,
"bid3": 3.25,
"bid3_volume": 1507900,
"bid4": 3.24,
"bid4_volume": 252600,
"bid5": 3.23,
"bid5_volume": 324400,
"ask1": 3.28,
"ask1_volume": 80100,
"ask2": 3.29,
"ask2_volume": 261900,
"ask3": 3.3,
"ask3_volume": 214900,
"ask4": 3.31,
"ask4_volume": 325600,
"ask5": 3.32,
"ask5_volume": 741600,
"最近逐筆成交": "",
"漲跌": -0.12,
"漲跌(%)": -3.53,
"high": 3.39,
"low": 3.27,
"datetime": datetime.datetime(2021, 7, 8, 10, 30, 15),
"價格/成交量(手)/成交額": "3.28/553776/183582685",
"成交量(手)": 55377600,
"成交額(萬)": 183580000,
"turnover": 0.82,
"PE": 11.78,
"unknown": "",
"high_2": 3.39,
"low_2": 3.27,
"振幅": 3.53,
"流通市值": 221.53,
"總市值": 221.53,
"PB": 1.25,
"漲停價": 3.74,
"跌停價": 3.06,
"量比": 2.92,
"委差": 32006,
"均價": 3.32,
"市盈(動)": 6.9,
"市盈(靜)": 16.58
}