新手入门代码示例,望各位大神斧正,无情点评。😄
可 实时仿真模拟运行。
文档可参考:
【分享】小白入门的迅投QMT股票模型开发上手指南(腾讯文档)
https://www.xuntou.net/forum.php?mod=viewthread&tid=1844&user_code=PN4WZC
来自: 迅投QMT社区
相关视频可以 “视频中心” ,观看 《讯投 Python 量化入门 08》
https://www.xuntou.net/plugin.php?id=keke_video_base&ac=course&cid=15&user_code=PN4WZC
# coding:GBK
"""
5m 图表上,观察 MACD 指标
MACD柱子绿翻红,买入100股
MACD柱子红翻绿,卖出100股
"""
import pandas as pd
import numpy as np
import talib
class G(): pass
g = G()
g.m5Data = {} # 用于保存5分钟的K线数据
g.StockList = ['601225.SH','000004.SZ']
g.StockPos = {} # 用于保存帐户中持有股标订单
account ="620000123673"
SectorName = "上证50" # 板块名 如“上证50”
def init(ContextInfo):
print("程序开始在 实时模拟仿真模式 下运行。")
ContextInfo.set_account(account)
if len(SectorName) > 0:
g.StockList = ContextInfo.get_stock_list_in_sector(SectorName)
for s in g.StockList:
g.m5Data[s] = {
}
g.StockPos[s] = {"持股总数量":0,
"可用数量":0
}
print("初始化完成。")
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
Symbol = g.StockList[0]
if len(g.m5Data[Symbol]) == 0:
print("开始获取历史数据.......")
g.m5Data = ContextInfo.get_market_data_ex(
['close'],
g.StockList,
period = '5m',
count = 100,
subscribe = True
)
for Symbol in g.StockList:
closePrice = g.m5Data[Symbol]['close']
closePrice = closePrice.values
macd,signal,hist = talib.MACD(closePrice,fastperiod =12,slowperiod = 26,signalperiod = 9)
g.m5Data[Symbol]['hist'] = hist
print("获取历史数据完成。")
# =======获取持仓数据=========================================================
PosList = get_trade_detail_data(account,'stock','position')
for pos in PosList:
Symbol = pos.m_strInstrumentID + '.' + pos.m_strExchangeID # 组合成 600225.SH 这样的字符串
if Symbol not in g.StockList:
continue
g.StockPos[Symbol]["持股总数量"] = pos.m_nVolume
g.StockPos[Symbol]["可用数量"] = pos.m_nCanUseVolume
#--------刷新行情报价的数据 ---------------------------------------------------
m5Data = ContextInfo.get_market_data_ex(
['close'],
g.StockList,
period = '5m',
count = 1,
subscribe = True
)
for Symbol in g.StockList:
g5mD_stime = g.m5Data[Symbol].index.tolist()
m5D_stime = m5Data[Symbol].index.tolist()
if len(m5D_stime) > 0:
if m5D_stime[-1] not in g5mD_stime: # 5m 图表上更新了一根K线
g.m5Data[Symbol] = pd.concat([g.m5Data[Symbol],m5Data[Symbol]])
if m5D_stime[-1] == g5mD_stime[-1]:
g.m5Data[Symbol].iloc[-1] = m5Data[Symbol].iloc[-1]
# ------------计算 MACD 指标 ----------------------------------
closePrice = g.m5Data[Symbol]['close']
closePrice = closePrice.values
macd,signal,hist = talib.MACD(closePrice,fastperiod =12,slowperiod = 26,signalperiod = 9)
g.m5Data[Symbol]['hist'] = hist
# -------根据需求判断 是否 交易了---------------------------------
if not ContextInfo.is_new_bar():
return
if (g.StockPos[Symbol]["持股总数量"] < 100 and
g.m5Data[Symbol]["hist"].iloc[-3] < 0 and
g.m5Data[Symbol]["hist"].iloc[-2] > 0
):
print("当前品种:",Symbol,"MACD 柱子绿翻红了,买入")
passorder(23,1101,account,Symbol,5,0,100,"1",1,"1",ContextInfo)
if (g.StockPos[Symbol]["可用数量"] >= 100 and
g.m5Data[Symbol]["hist"].iloc[-3] > 0 and
g.m5Data[Symbol]["hist"].iloc[-2] < 0
):
print("当前品种:",Symbol,"MACD 柱子红翻绿了,卖出")
passorder(24,1101,account,Symbol,5,0,100,"1",1,"1",ContextInfo)
print("程序完成一次执行任务。")