多改几个通达信交易指标有助于熟悉Backtrader开发。

这里记录一下通达信内置的mace交易指标公式的修改和测试结果。

通达信附图指标:

DIFF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:=EMA(DIFF,MID);
MACD:=2*(DIFF-DEA);
平空开多:=CROSS(MACD,0);
平多开空:=CROSS(0,MACD);
STICKLINE(平空开多,0,30,2,0),COLOR0000FF;
STICKLINE(平多开空,0,30,2,0),COLORWHITE;

python代码:

# -*- coding: utf-8 -*-
"""
Created on Feb  21 2022@author: freepy
"""from __future__ import (absolute_import, division, print_function,unicode_literals)
from datetime import datetime  # For datetime objects
# Import the backtrader platform
import backtrader as bt
import pandas as pd# 创建策略继承bt.Strategy
class TestStrategy(bt.Strategy):params = (# 均线参数设置15天,15日均线('para_mid', 12),('para_short', 9),('para_long', 26),)def log(self, txt, dt=None):# 记录策略的执行日志dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def __init__(self):# 保存收盘价的引用self.dataclose = self.datas[0].close# 跟踪挂单self.order = None# 买入价格和手续费self.buyprice = Noneself.buycomm = None# # 加入均线指标# self.sma = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.para_mid)# # 收盘价的 para_short 日简单移动平均# self.ma1 = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.para_short)# # 收盘价的 para_long 日简单移动平均# self.ma2 = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.para_long)# 交易条件# DIFF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);# DEA:=EMA(DIFF,MID);# MACD:=2*(DIFF-DEA);self.DIFF = bt.indicators.EMA(self.data.close, period=self.params.para_short) - \bt.indicators.EMA(self.data.close, period=self.params.para_long)self.DEA = bt.indicators.EMA(self.DIFF, period=self.params.para_mid)self.MACD = 2 * (self.DIFF - self.DEA) # 交易函数def next(self):# 记录收盘价self.log('Close, %.2f' % self.dataclose[0])# 如果有订单正在挂起,不操作if self.order:return# 如果没有持仓则买入if not self.position:# MACD 上穿 0if self.MACD > 0: # 买入self.log('买入单, %.2f' % self.dataclose[0])# 跟踪订单避免重复self.order = self.buy()else:# 如果已经持仓, 0 上穿 MACDif 0 > self.MACD:# 全部卖出self.log('卖出单, %.2f' % self.dataclose[0])# 跟踪订单避免重复self.order = self.sell()# 订单状态通知,买入卖出都是下单def notify_order(self, order):if order.status in [order.Submitted, order.Accepted]:# broker 提交/接受了,买/卖订单则什么都不做return# 检查一个订单是否完成# 注意: 当资金不足时,broker会拒绝订单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.priceself.buycomm = order.executed.commelif order.issell():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('订单取消/保证金不足/拒绝')# 其他状态记录为:无挂起订单self.order = None# 交易状态通知,一买一卖算交易def notify_trade(self, trade):if not trade.isclosed:returnself.log('交易利润, 毛利润 %.2f, 净利润 %.2f' %(trade.pnl, trade.pnlcomm))start = '2020-01-01'
end = '2022-01-31'def get_data(code, start_date, end_date):df_tdx = pd.read_feather(r'./dataout/tdx/'+code+r'.day.feather')df_tdx.index=pd.to_datetime(df_tdx.date, format = '%Y%m%d')df_tdx_b=df_tdx.truncate(before=start_date, after = end_date)df_tdx_b['openinterest']=0df_tdx_b.rename(columns={'vol':'volume'}, inplace = True)df_tdx_b=df_tdx_b[['open','high','low','close','volume','openinterest']]return df_tdx_bdataframe=get_data('sh600851', datetime.strptime(start,'%Y-%m-%d'), datetime.strptime(end,'%Y-%m-%d'))if __name__ == '__main__':# 初始化cerebro回测系统设置cerebro = bt.Cerebro()# 取得股票历史数据data = bt.feeds.PandasData(dataname=dataframe, fromdate = datetime.strptime(start,'%Y-%m-%d'), todate = datetime.strptime(end,'%Y-%m-%d'))# 为Cerebro引擎添加策略cerebro.addstrategy(TestStrategy)# 加载交易数据cerebro.adddata(data)# 设置投资金额cerebro.broker.setcash(100000.0)# 设置佣金为0.001,除以100去掉%号cerebro.broker.setcommission(commission=0.001)#获取回测开始时的总资金print('期初资金: %.2f' % cerebro.broker.getvalue())#运行回测系统cerebro.run()#获取回测结束后的总资金print('期末资金: %.2f' % cerebro.broker.getvalue())

通过对比,可以看到python回测买卖日期与通达信是对应的。

但是这个策略的盈利能力很差:

。。。。。。

2022-01-20, 已卖出, 价格: 8.75, 费用: 8.53, 佣金 0.01
2022-01-20, 交易利润, 毛利润 0.22, 净利润 0.20
2022-01-20, Close, 8.65
2022-01-21, Close, 8.24
2022-01-24, Close, 8.10
2022-01-25, Close, 7.70
2022-01-26, Close, 7.64
2022-01-27, Close, 7.57
期末资金: 99999.84

Backtrader:继续学习,把通达信的mace交易指标公式改为Backtrader交易策略相关推荐

  1. 通达信波段主图指标公式,源码简洁原理却不简单

    通达信波段主图指标公式的核心语句也就4句,后面的语句都是为了画图的.公式看起来比较简单,原理也比较巧妙,但是理解起来有些困难. 直接上源码: HH:=HHV(H,5); LL:=LLV(L,5); T ...

  2. 通达信欧奈尔RPS指标公式编写和设置方法(完全版)

    通达信欧奈尔RPS指标公式的编写和设置较为复杂,对于初学者来说可能具有一定挑战性.在编写口袋支点公式时,需要使用RPS指标公式作为基础条件,因此有必要先了解其编写和设置方法. 一.上市一年以上选股 首 ...

  3. 通达信资金净流入公式_通达信成交额资金净流入指标公式

    通达信成交额资金净流入指标公式: 额133009678:AMOUNT/100000000,VOLSTICK; AA:=(AMOUNT / (((HIGH - LOW) * 2) - ABS((CLOS ...

  4. 通达信板块监控指标_「600503」通达信主力监控系统指标公式

    「600503」通达信主力监控系统指标公式 DRAWRECTREL(0,0,990,990,RGB(20,18,12)); DRAWTEXT_FIX(1,0.14,0.01,1,"股东股份: ...

  5. 通达信MACD面积背离指标公式,思路来自于缠论背驰

    MACD面积背离指标公式的思路来自于缠论的MACD面积背驰,但是背驰的定义有一些限制条件,编写指标不一定能满足,这里就不纠结了,编写的指标称为MACD面积背离.另外编写这个指标公式需要对缠论有一些了解 ...

  6. 通达信三重滤网交易系统指标公式(含强力指数指标)

    三重滤网交易系统由<以交易为生>的作者亚历山大·埃尔德(Alexander Elder)发明的,1986年首次公开,后续又不断改进,增加或者改变了一些细节,但是使用多重时间周期和技术指标进 ...

  7. 通达信欧奈尔RPS指标公式详解

    RPS相对强度指标,是国内的投资者根据威廉·欧奈尔所著书籍<笑傲股市>中的RS评级改进的. 根据书中介绍: RS评级衡量了某一给定股票在过去52周内相对股市中其他股票的表现.市场上每一只股 ...

  8. 通达信捉妖改良CCI指标公式,简洁巧妙

    高端的食材,往往只需要简单的烹饪方式.好的指标也是一样,只需要简单处理,就可以实现不错的效果.捉妖改良CCI指标公式属于意外之喜,编写指标时写错了,研究后发现结果比原想法更好. 捉妖改良CCI指标公式 ...

  9. obv代码matlab,通达信精进终极obv指标公式,通达信obv指标公式源码

    内容导航: Q1:求通达信OBV股票选股公式,谢谢! VA:=IF(CLOSE>REF(CLOSE,1),VOL,-VOL); OBV:=SUM(IF(CLOSE=REF(CLOSE,1),0, ...

最新文章

  1. Unreachable code
  2. 16年寒假随笔(1)
  3. Android华容道之一步一步实现-序言
  4. 速查100 WebServers
  5. jQuery中操作元素节点appendTo()与prependTo()的区别
  6. Reachability,ios检测网络使用环境
  7. node.js express 启用 https
  8. 数组翻转_LeetCode刷题实战151:翻转字符串里的单词
  9. Macaca基础原理解析
  10. [Android]使用Dagger 2依赖注入 - DI介绍(翻译)
  11. 升降摄像头设计!realme X今日亮相:现已在多平台开启预约
  12. php运行时输出,在PHP中运行具有实时输出的过程
  13. RHCE-ansible第二次实验,通过ansible远程yum安装
  14. tp-link 路由器iD登陆时,经常的发送请求失败,解决办法如下
  15. 男人养肾按摩运动更可取
  16. 中国居民身份证号码校验算法
  17. UDF函数:对字符串实现sha256加密,返回64位十六进制字符串
  18. 深度学习框架江湖群侠传
  19. 【AI语音】九联UNT402A_通刷_纯净精简_免费线刷固件包
  20. 【组队学习】【33期】组队学习内容详情

热门文章

  1. 全启式安全阀行业现状调研及趋势分析报告
  2. 《图论》— NYOJ 20 吝啬的国度
  3. Word如何快速转换成PDF?试试这个简单的方法
  4. 电影《南京》观后感 -- 一个遗忘历史的民族终究也会被历史所唾弃
  5. 阿里云2021财年营收超600亿,每年8亿美元大单被抢
  6. SQL 获取某月最后一天
  7. web应用安全测试之信息泄露
  8. my sql四舍五入_SQL查询四舍五入的示例及两种方法
  9. mac远程登录控制linux,Mac下远程控制Linux
  10. 美尼尔综合征的症状是什么?