python量化交易学习笔记_Python量化交易学习笔记(22)——自定义Indicator_码农甲的博客-CSDN博客...

本文介绍如何在Python量化交易中自定义Indicator,使用backtrader框架实现策略。示例展示了NegativeIndicator类,当收阴线且收在均线之上、均线向上时触发买入。之后创建St策略,结合停损追踪订单进行交易。代码中还包括数据加载、回测运行和图表绘制。
摘要由CSDN通过智能技术生成

from __future__ import (absolute_import, division, print_function, unicode_literals)

import datetime # 用于datetime对象操作

import os.path # 用于管理路径

import sys # 用于在argvTo[0]中找到脚本名称

import backtrader as bt # 引入backtrader框架

# 自定义指标

class NegativeIndicator(bt.Indicator):

lines = ('buy_sig',)

params = (('ma_period', 10), ('up_period', 3))

def __init__(self):

self.addminperiod(self.p.ma_period)

ma = bt.ind.SMA(period = self.p.ma_period, plot = True)

# 买入条件

# 收阴线

self.l.buy_sig = bt.And(self.data.close < self.data.open,

# 收在均线上方

self.data.close > ma,

# 均线向上

ma == bt.ind.Highest(ma, period = self.p.up_period)

# 创建策略

class St(bt.Strategy):

params = dict(

stoptype=bt.Order.StopTrail,

trailamount=0.0,

trailpercent=0.05,

def __init__(self):

# 买入条件

self.buy_sig = NegativeIndicator().buy_sig

# 为了在最后图表中显示均线

bt.ind.SMA(period = NegativeIndicator().p.ma_period)

self.order = None

def notify_order(self, order):

if order.status in [order.Completed, order.Expired]:

self.order = None

def next(self):

# 无场内资产

if not self.position:

# 未提交买单

if None == self.order:

# 到达了买入条件

if self.buy_sig:

self.order = self.buy()

elif self.order is None:

# 提交stoptrail订单

self.order = self.sell(exectype=self.p.stoptype,

trailamount=self.p.trailamount,

trailpercent=self.p.trailpercent)

cerebro = bt.Cerebro() # 创建cerebro

# 先找到脚本的位置,然后根据脚本与数据的相对路径关系找到数据位置

# 这样脚本从任意地方被调用,都可以正确地访问到数据

modpath = os.path.dirname(os.path.abspath(sys.argv[0]))

datapath = os.path.join(modpath, '../TQDat/day/stk/000001.csv')

# 创建价格数据

data = bt.feeds.GenericCSVData(

dataname = datapath,

fromdate = datetime.datetime(2018, 1, 1),

todate = datetime.datetime(2020, 3, 31),

nullvalue = 0.0,

dtformat = ('%Y-%m-%d'),

datetime = 0,

open = 1,

high = 2,

low = 3,

close = 4,

volume = 5,

openinterest = -1

# 在Cerebro中添加价格数据

cerebro.adddata(data)

# 设置启动资金

cerebro.broker.setcash(100000.0)

# 设置交易单位大小

cerebro.addsizer(bt.sizers.FixedSize, stake = 1000)

# 设置佣金为千分之一

cerebro.broker.setcommission(commission=0.001)

cerebro.addstrategy(St) # 添加策略

cerebro.run() # 遍历所有数据

# 打印最后结果

print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

cerebro.plot(style = 'candlestick') # 绘图

为了便于相互交流学习,新建了微信群,感兴趣的读者请加微信。

b1971e2a663df90f157323f37d9da59f.png

安装backtrader:pip install backtrader

官方backtrader文档:https://www.backtrader.com/docu/quickstart/quickstart.html#our-first-strategy

作为backtrader的第一个教学代码,我不想像其...

当我们开发了一个交易策略,需要对策略进行回测,那么我们就需要一个回测框架。目前已存在很多成熟的回测框架,也有各种平台。这些框架或平台各有优劣,并不能满足每个人的需求。为了将之前学习的量化交易的知识点贯穿起来,更好地巩固学习内容,也为了今后能够搭建适合自己的框架,本篇手记我们就来了解下如何自定义量化交易回测框架。

完成一个策略的回测...

pandas.DataFrame.merge

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,

left_index=False, right_index=False, sort=True,

suffixes=('_x', '_y'), copy=True, indi...

由于我想增加dataframe里属性,想从日期入手

https://pandas.pydata.org/pandas-docs/stable/reference/series.html

df['dayofmonth'] = df['日期'].dt.day.astype(int)

df['dayofyear'] = df['日期...

本文将探索新的策略回测程序,主要是为了尝试不同的技术指标在backtrader平台上的应用,为后续复杂策略的实现做准备。

本文将实现的策略是,当股票放量突破布林线中轨时进行买入,当股票收盘价低于短期均线时卖出。

买入条件中,放量突破布林线中轨具体指的是,当日股票开盘价在布林线中轨下方,收盘价在布林线中轨上方,当日成交量为10日以来的最高量。卖出条件中,短期均线选取为5日线。回测初始资金100000...

Traceback (most recent call last):

File "C:/Users/Administrator/PycharmProjects/untitled/python/web/tkinter.py", line 1, in <module>

import tkinter as tk

File "C:\U...

最近涉及到需要实现一个桌面UI的小游戏,所以就翻看了一些文档。

当然有介绍使用pyQT5的,但是本机安装的是python3.4,不想卸载掉这个版本,暂时还不能使用pyQT5.

pyQT5需要python3.5及以上的版本才能行。

所以就使用python自带的tkinter了。

总的来说,图形界面的使用基本都是相通的,只要学通一个,其他的也会非常方便的入门。

祝各位能够找到自己所需,那么,...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值