《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行情软件、新的量化平台、以及各种量化研究工具。
穿云箭自带指标公式源码运行模块,可以为其他量化平台提供量化功能扩展或量化功能增强效果。
《中文Python穿云箭量化平台》本身是中文Python关键字的Python集成开发工具,支持纯英文Python,同时支持中文Python。
例如if语句。
c
if NUMBER> 5:
print("10大于5")
或者
c
如果 数字 > 0 :
输出("数字大于0")
下面是中文Python程序演示。
要注意:如果脱离《中文Python穿云箭量化平台》编辑器,就不支持中文Python指令了。只支持纯英文Python指令代码,变量可以是中文等信息。
我们设计了一个自编公式指标【上涨角度公式】,想在backtrader中进行回测。
全部代码如下:
c
import pandas as pd
import datetime
import backtrader as bt #将Backtrader引入到咱们程序中,命名为bt。
import HP_bt as hbt
import HP_tdx as htdx #小白量化行情模块
from HP_formula import * #小白量化公式函数模块
import HP_tdxgs as hgs #小白通达信公式库
hq=htdx.TdxInit(ip='183.60.224.178',port=7709) ##初始化通达信
gs='''
MM1:=MAX(C,O);
MM2:=MIN(C,O);
MA3:=EMA(C,3);
BD:=ATAN((MA3/REF(MA3,1)-1)*100)*180/3.1416;
BDD:=EMA(BD,3);
ENTERLONG:CROSS(BDD,0);
EXITLONG:CROSS(0,BDD);
'''
tgs1=hgs.Tdxgs() #创建公式解析器
# 建立一个策略
class TestStrategy(bt.Strategy):
params = (
('maperiod', 20),
)
def log(self, txt, dt=None):
''' 提供记录功能'''
dt = dt or self.datas[0].datetime.date(0)
print('%s %s' % (dt.isoformat(),txt))
def __init__(self):
# 引用到输入数据的close价格
self.dataclose = self.datas[0].close
self.order = None
self.buyprice = None
self.buycomm = None
print(self.dataclose[-1])
self.ma5=MA(pd.Series(list(self.dataclose)),self.params.maperiod)
print(self.ma5.iloc[-1])
#平均线
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.maperiod)
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
# Buy/Sell order submitted/accepted to/by broker - Nothing to do
return
# Check if an order has been completed
# Attention: broker could reject order if not enough cash
if order.status in [order.Completed]:
if order.isbuy():
self.log(
'执行买入, 价格: %.2f, 交易额: %.2f, 佣金 %.2f' %
(order.executed.price,
order.executed.value,
order.executed.comm))
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
else: # Sell
self.log('执行卖出, 价格: %.2f, 交易额: %.2f, 佣金 %.2f' %
(order.executed.price,
order.executed.value,
order.executed.comm))
self.bar_executed = len(self)
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log('Order Canceled/Margin/Rejected')
self.order = None
def notify_trade(self, trade):#交易执行后,在这里处理
if not trade.isclosed:
return
#Gross:毛利;Net:净利)
self.log('操作利润, 毛利 %.2f, 净利 %.2f' %
(trade.pnl, trade.pnlcomm))#记录下盈利数据。
##微信18578755056 QQ:2775205
def next(self):
self.log('Close, %.2f' % self.dataclose[0])
print('close: ',self.datas[0].close[0])
print('ENTERLONG: ', self.datas[0].ENTERLONG[0])
print('EXITLONG: ', self.datas[0].EXITLONG[0])
# Check if an order is pending ... if yes, we cannot send a 2nd one
if self.order:
return
# Check if we are in the market
if not self.position:
# 出现买点
if self.datas[0].ENTERLONG[0] > 0:
# BUY, BUY, BUY!!! (with all possible default parameters)
self.log('BUY CREATE, %.2f' % self.dataclose[0])
# Keep track of the created order to avoid a 2nd order
self.order = self.buy()
else:
# 出现卖点
if self.datas[0].EXITLONG[0] > 0:
self.log('SELL CREATE, %.2f' % self.dataclose[0])
self.order = self.sell()
if __name__ == '__main__':
cerebro = bt.Cerebro() #创建了一个机器人大脑(Cerebro),同时隐含创建了一个borker(券商)。
# 0.1% ... 除以100去掉%号。
cerebro.broker.setcommission(commission=0.001)
cerebro.broker.set_cash(20000000) #设置资金
cerebro.addsizer(bt.sizers.FixedSize, stake=10000) #设置交易数量
# 增加一个策略
cerebro.addstrategy(TestStrategy)
#设置一一些参数数据
start_date = datetime.datetime(2024, 1, 2) # 回测开始时间
end_date = datetime.datetime(2024, 8, 16) # 回测结束时间
#获取数据
c='600650'
#df=pd.read_csv('/xbdata2/day/'+c+'.csv', encoding= 'gbk')
df=htdx.get_security_bars(nCategory=4,nMarket = 1,code=c,nStart=0, nCount=800) #获取指定范围的证券K线
df=hgs.initmydf(df) #小白量化行情数据规格化
tgs1.loaddf(df) #加载小白量化格式的行情数据表
df=tgs1.rungs(gs) #运行指标公式源码,并返回新的行情表。返回表中包含指标公式的输出数据,
lst=['ENTERLONG', 'EXITLONG']
mydata=hbt.mkdata(lst=lst)
#加载数据
df['date']=pd.to_datetime(df['datetime'])
df.index=pd.to_datetime(df['date'])
exec(mydata)
data = HP_PandasData(dataname=df, fromdate=start_date, todate=end_date)
cerebro.adddata(data) # 将数据传入回测系统
print('开始资金: %.2f' % cerebro.broker.getvalue())
cerebro.run() # 执行策略
print('结束资金: %.2f' % cerebro.broker.getvalue())
cerebro.plot() #可视化-画图
这个代码也可以在其他编辑中运行,例如VsCode等。
好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。
超越自己是我的每一步!我的进步就是你的进步!