《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行情软件、新的量化平台、以及各种量化研究工具。
《中文Python穿云箭量化平台》的特点和功能如下。
1、中文Python穿云箭量化平台。支持中文Python语法,提供了完整的Python股票软件开发源代码。新版本支持自编指标公式脚本编写策略回测,并有一键生成Python股票和期货交易策略功能。
2、支持股票、期货、外汇、现货、彩票等各种量化分析交易。例如提供支持国内股票和期货,期货CTP接口,提供MetaTrader5交易接口,提供miniQMT接口,富途证券交易、盈透TWS交易接口以及彩票模块。
3、新增抄底雷达,波动线,超短线函数,提供各种独创功能。提供多空雷达,响尾蛇导弹,巡航到导弹等交易技术。新增股票和期货大中小多周期共振策略模板,
支持发邮件,支持语音报盘,微信通知等。并提供多个实盘策略等,例如:miniQMT抄底雷达交易策略,MetaTrader 5核聚变策略。
4、支持sklearn机器学习、pytorch深度学习等量化策略。支持可视化机器学习Python程序设计。
5、软件只有260M大小,每个账户只能一台电脑使用,同一个电脑下不同目录启动软件次数不受限制,可同时完成无数个功能,例如同时回测或实盘多个不同策略。
6、新版本支持量化平台合伙人计划。量化开发研究员可以将自己研究的金融投资工具,金融投资模块,量化数据,以及有自主版权专利的赚钱策略,集成到中文Python穿云箭量化平台中,允许用户可以通过修改配置方式,实现更改软件名称、开发人、宣传文字等信息,免去开发定制费用。
7、量化平台支持策略源码加密功能,也支持用户自行加密核心代码模块,如DLL文件或pyd文件。
《中文Python穿云箭量化平台》目录下包含全部Python量化平台的调用模块,利用这些模块设计自己所需的新的量化工具。
《中文Python穿云箭量化平台》是Python自带Tkinter设计的量化平台,总大小只有260MB。软件界面如下。
《中文Python穿云箭量化平台》允许用户通过修改【cyj2.cfg】文件,来修改软件品牌,名称,开发人和宣传信息。
在《中文Python穿云箭量化平台》1.28版本以上,同时支持聚宽、Ptrader和QMT的策略框架。用户可以参考聚宽、Ptrader和QMT策略开发说明来设计策略。
聚宽、Ptrader策略框架如下:
##策略初始化函数,例如股票池,初始资金,交易费用,公式算法等。
def initialize(context):
#设置策略信息
#设置费用信息
#设置股票池
#获取柜台资金信息
#获取柜台持仓信息,如果持仓,增加到股票池中。
#设置固定的g.带头变量初始化值,例如g.gs
pass
##开盘前处理函数,该函数会在每天开始交易前被调用一次,
##您可以在这里添加一些每天都要初始化的东西.
def before_trading_start(context):
#开盘前需要处理的工作
#启动用户多线程函数或多进程程序,例如行情处理,交易处理等。
pass
##盘中运行函数,每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def market_open(context):
#获取机器时间,根据需要设置是否继续运行
#获取柜台资金信息,并同步到策略资金信息
#获取委托信息,并处理,例如撤单处理。
#获取持仓信息,并通过策略持仓数据。
#循环处理持仓数据,根据策略要根据最新行情,计算止盈或止损。
#策略主要逻辑:循环处理股票池,并获取股票行情,根据策略指标计算信号,进行交易。
#如果【实盘周期】选择【连续】,循环体外必须增加延迟函数,例如time.sleep(1)
#time.sleep(1) #暂停1秒
pass
##策略结束前处理函数
def after_trading_end(context):
#收盘后,或策略自动运行结束后,处理一些工作。如强制【终止实盘】,此函数不会运行。
#保存策略数据。
#关闭策略多线程程序或多进程程序。
pass
QMT的策略框架如下:
##策略初始化函数,例如股票池,初始资金,交易费用,公式算法等。
##类QMT策略
def init(context):
#设置策略信息
#设置费用信息
#设置股票池
#获取柜台资金信息
#获取柜台持仓信息,如果持仓,增加到股票池中。
#设置固定的g.带头变量初始化值,例如g.gs
pass
##盘中运行函数,每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
##类QMT策略
def Handlebar(context):
#获取机器时间,根据需要设置是否继续运行
#获取柜台资金信息,并同步到策略资金信息
#获取委托信息,并处理,例如撤单处理。
#获取持仓信息,并通过策略持仓数据。
#循环处理持仓数据,根据策略要根据最新行情,计算止盈或止损。
#策略主要逻辑:循环处理股票池,并获取股票行情,根据策略指标计算信号,进行交易。
#如果【实盘周期】选择【连续】,循环体外必须增加延迟函数,例如time.sleep(1)
#time.sleep(1) #暂停1秒
pass
还有很多熟悉Python开发的用户对这个编辑器不太满意,想利用Vscode等第三方开发工具IDE来做模拟自动交易研究。
如果用户想在Vscode中执行策略,只需要在策略最后一段加上调用策略脚本文件的代码就可以实现。
如果策略文件为【高级_同花顺自编公式交易策略.py】,这个策略最后插入下面代码,就可以在任意Python开发工具中运行策略代码。
if __name__ == '__main__':
hpq.usertrader('高级_同花顺自编公式交易策略.py',zq=6) ##改为用户高级策略文件,zq周期
《中文Python穿云箭量化平台》支持自编指标公式源码计算功能,下面我们给出一个KDJ专家系统公式,通过同花顺自动交易的完成策略代码。
策略名='新策略'
import pandas as pd
import HP_tdx as htdx
import HP_global as hg #建立全局数据域hg
from HP_formula import *
from HP_factor import *
import HP_formula as gs
import HP_quant as hpq
from HP_quant import *
import time
import HP_tdxgs as tgs #公式运行模块
import easytrader
##初始化同花顺软件
ths = easytrader.use('ths')
ths.connect( "C:\\同花顺软件\\同花顺\\xiadan.exe")
ths.enable_type_keys_for_editor()
mygs=tgs.Tdxgs()
##策略初始化函数,例如股票池,初始资金,交易费用,公式算法等。
def initialize(context):
#设置策略信息
#设置费用信息
#设置股票池
#获取柜台资金信息
#获取柜台持仓信息,如果持仓,增加到股票池中。
#设置固定的g.带头变量初始化值,例如g.gs
context.zh='xiaoba' #账户
context.zhlx='回测' #账户类型,2个汉字
context.firstcash=1000000.00 #初始现金
context.cash=context.firstcash
context.portfolio.available_cash=context.firstcash
hpq.log.info('----策略环境信息-----')
print('策略名:'+策略名)
qhcsj2=time.strftime('%Y%m%d %H:%M:%S',time.localtime(time.time()))
print('开始运行时间:'+qhcsj2)
htdx.TdxInit(ip='124.232.142.29',port=7711)
g.timea=time.perf_counter()
g.cs=0 #策略运行册数
g.MAX=2000 #最大持股数量
g.hd=0.003 #滑点
g.zsfd=-0.05 #止损幅度
g.amount=400 #每次买入数量
g.stocks=htdx.getzxgfile('A500.blk') #获取自选股
#g.stocks=htdx.getblock2a('近期强势') #返回板块中的股票
资金状况=ths.balance
context.cash=资金状况['资金余额']
context.portfolio.available_cash=资金状况['可用金额']
持仓= pd.DataFrame(ths.position)
持仓信息={}
for i in range(len(持仓)):
code=str(持仓['证券代码'].iloc[i]).zfill(6)
持仓信息[code]=int(持仓['股票余额'].iloc[i])
if code not in g.stocks:
m=htdx.get_market(code) #获取通达信市场信息
g.stocks.append((m,code))
#context=hqcc(context,持仓)
g.gs='''{自编指标公式,最好用专家系统公式}
N:=9;
M1:=3;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M1,1);
J:=3*K-2*D;
ENTERLONG:CROSS(J,0);
EXITLONG:CROSS(100,J);
'''
g.amount=400
g.zsfd=-0.05
##盘中运行函数,每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def market_open(context):
#获取机器时间,根据需要设置是否继续运行
#获取柜台资金信息,并同步到策略资金信息
#获取委托信息,并处理,例如撤单处理。
#获取持仓信息,并通过策略持仓数据。
#循环处理持仓数据,根据策略要根据最新行情,计算止盈或止损。
#策略主要逻辑:循环处理股票池,并获取股票行情,根据策略指标计算信号,进行交易。
#如果【实盘周期】选择【连续】,循环体外必须增加延迟函数,例如time.sleep(1)
#time.sleep(1) #暂停1秒
starttime = time.perf_counter()
g.cs=g.cs+1
if starttime-g.timea>20*60:
资金状况=ths.balance
context.cash=资金状况['资金余额']
context.portfolio.available_cash=资金状况['可用金额']
持仓= pd.DataFrame(ths.position)
持仓信息={}
for i in range(len(持仓)):
code=str(持仓['证券代码'].iloc[i]).zfill(6)
持仓信息[code]=int(持仓['股票余额'].iloc[i])
context=hqcc(context,持仓)
g.timea=time.perf_counter()
for m,security in g.stocks:
print(m,security,end='')
if security not in context.portfolio.positions:
context.portfolio.positions[security]=hpq.Position(security)
df=tgs.get_security_bars(nCategory=4,nMarket = m,code=security,nStart=0, nCount=600) #获取日线
if len(df)<1:
continue
print(' 行情数据长度:',len(df),' 可用资金:',round(context.portfolio.available_cash,2))
price = df.close.iloc[-1]
pre_close=df.close.iloc[-2] #前收盘
#value = context.portfolio.positions[security].value
acc_avg_cost = context.portfolio.positions[security].acc_avg_cost #买入成本价
amos=context.portfolio.positions[security].closeable_amount #可卖数量
amos2=context.portfolio.positions[security].total_amount #总数量
mydf=gs.initmydf(df) ##初始化mydf表
mygs.loaddf(mydf) #加载行情数据
mydf=mygs.execgs(g.gs) #运行指标公式
if 'ENTERLONG' in mydf.columns:
BUY=mydf['ENTERLONG'] #买点
if 'EXITLONG' in mydf.columns:
SELL=mydf['EXITLONG'] #卖点
if BUY.iloc[-1]>0 and (amos2==0 or amos==0) and context.portfolio.positions[security].isbuy==False:
price2=round(price*(1+g.hd),2)
x=order(security,g.amount,p=price2)
ths.buy(security, price=price2, amount=g.amount)
context.portfolio.positions[security].isbuy=True
hpq.log.info(context.current_dt+" 买入: %s ,数量:%d,买入价格:%.2f,成交资金:%0.2f"%(security,g.amount,price2,g.amount*price2))
amos=context.portfolio.positions[security].closeable_amount #可卖数量
if SELL.iloc[-1]>0 and amos>0:
price2=round(price*(1-g.hd),2)
x=order(security,-amos,p=price2)
ths.sell(security, price=price2, amount=amos)
context.portfolio.positions[security].issell=True
hpq.log.info(context.current_dt+ " 卖出: %s ,数量:%d,卖出价格:%.2f,成交资金:%0.2f"%(security,amos,price2,amos*price2))
if __name__ == '__main__':
hpq.usertrader('高级_同花顺自编公式交易策略.py',zq=6) ##改为用户高级策略文件,zq周期
上述代码可以在Vscode,Pychram或IDLE中运行这个策略文件。
好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。
超越自己是我的每一步!我的进步就是你的进步!