背景:

在经过一段时间对backtrader的学习之后,将用于回测的backtrader模型进行修改,修改成为可以进行实盘模拟的代码。

其中下面这篇文章对代码修改起到了很大作用

量化回测框架BackTrader【6】-开发策略

代码还有很多不足和奇怪的地方

希望大神们告诉我 谢谢

以下是代码部分:

from huobi.client.generic import *
from huobi.client.market import *
from huobi.constant.definition import *
from huobi.client.account import *
from huobi.client.trade import *
from huobi.client.market import *
import pandas as pd
import datetime as dt
import time
import talib as ta
import backtrader as bt
import numpy as np
import mathclass RVI(bt.Indicator):lines = ('std','pos','neg','rvi')plotlines = dict(std=dict(_plotskip=True),pos=dict(_plotskip=True),neg=dict(_plotskip=True),rvi=dict(_plotskip=False))params = (('period', 20),)def __init__(self):self.lines.std = bt.talib.STDDEV(self.datas[0].close, timeperiod=8, nbdev=2.0)def next(self):if  self.lines.std[0] > self.lines.std[-1]:self.lines.pos[0] = self.lines.std[0]else:self.lines.pos[0] = 0if self.lines.std[0] < self.lines.std[-1]:self.lines.neg[0] = self.lines.std[0]else:self.lines.neg[0] = 0pos_nan = np.nan_to_num(self.lines.pos.get(size=self.params.period))neg_nan = np.nan_to_num(self.lines.neg.get(size=self.params.period))Usum = math.fsum(pos_nan)Dsum = math.fsum(neg_nan)if (Usum + Dsum) == 0:self.lines.rvi[0] = 0returnself.lines.rvi[0] = 100 * Usum / (Usum+Dsum)class read_csv():def __init__(self):# time(时间),currency(币种),balance(余额),type(类型),symbol(交易对),amount(交易量),price(交易价格),order-id(订单ID)self.list_new = []#交易日期及时间now_time = dt.datetime.now().strftime('%F %T')self.list_new.append(now_time)def readcsv(self):self.date = pd.read_csv('交易模拟测试.csv',encoding='utf-8')try :# 取最后一行symbol数据date_old = self.date.iloc[-1,:]logger.info('取最后一行symbol数据')symbol_old = date_old['symbol']if date_old['symbol'] != 'usdt' :symbol_old = symbol_old.replace('usdt', '')amount_new = date_old['amount'] * 0.9965self.list_new.append(symbol_old)self.list_new.append(amount_new)except IndexError as err:spot = 1547906account_client = AccountClient(api_key=g_api_key, secret_key=g_secret_key)balance_list = account_client.get_balance(spot)# 账户中交易币种信息及余额c_list = ['usdt', 'eth3s', 'eth3l']c_list_1 = []for i in balance_list:currency = i.__dict__if currency['currency'] in c_list:c_list_1.append(currency)date_1 = pd.DataFrame(c_list_1)date_1['balance'] = date_1['balance'].astype('float')trade_1 = date_1.loc[(date_1['type'] == 'trade') & (date_1['balance'] > 0.01)]trade_1.reset_index(drop=True, inplace=True)self.list_new.append(trade_1['currency'][0])self.list_new.append(trade_1['balance'][0])return self.list_new, self.dateclass huobi_Strategy(bt.Strategy):def __init__(self):self.list_new, self.date = read_csv().readcsv()self.rvi = RVI()def amount_result(self,num):# 取小数点后四位self.num = numnum_x, num_y = str(self.num).split('.')self.num = float(num_x + '.' + num_y[0:4])return self.numdef market_data(self):# 取得最新价格market_client = MarketClient(api_key=g_api_key, secret_key=g_secret_key)market_trade = market_client.get_market_trade('eth3lusdt')for i in market_trade:market_trade_1 = i.__dict__# order_min = round(5.5 / market_trade_1['price'], 4)  # 最小订单数量为 5/价格self.price_1 = market_trade_1['price']return self.price_1def huobi_buy(self):if self.list_new[1] == 'usdt' :price_1 = huobi_Strategy().market_data()amount_1 = huobi_Strategy().amount_result(self.list_new[2] * price_1)self.list_new.append('buy')self.list_new.append('eth3l')self.list_new.append(amount_1)self.list_new.append(price_1)self.list_new.append('id')f = pd.DataFrame(self.list_new).Tf.columns = self.columnsdate = pd.concat([self.date,f])date.to_csv('交易模拟测试.csv',encoding='utf-8',index=False)def huobi_sell(self):if self.list_new[1] == 'eth3lusdt' :price_1 = huobi_Strategy().market_data()amount_1 = huobi_Strategy().amount_result(self.list_new[2] / price_1)self.list_new.append('sell')self.list_new.append('usdt')self.list_new.append(amount_1)self.list_new.append(price_1)self.list_new.append('id')# csv最后增加一行f = pd.DataFrame(self.list_new).Tf.columns = self.columnsdate = pd.concat([self.date, f])date.to_csv('交易模拟测试.csv', encoding='utf-8', index=False)def next(self):up = 80down = 20self.order = 'keep'if self.rvi.rvi[0] > up:if self.rvi.rvi[-1] < up and self.rvi.rvi[-2] < up:self.order = 'buy'elif self.rvi.rvi[0] < down:if self.rvi.rvi[-1] > down and self.rvi.rvi[-2] > down:self.order = 'sell'returndef stop(self):if self.order == 'buy':huobi_Strategy().huobi_buy()elif self.order == 'sell':huobi_Strategy().huobi_sell()
def get_data():# 取当前及30min前的烛台数据market_client = MarketClient()data_ethusdt = market_client.get_candlestick('ethusdt', CandlestickInterval.MIN1, 100)id_1 = []high_1 = []low_1 = []open_1 = []close_1 = []vol_1 = []for i in range(len(data_ethusdt) - 1, -1, -1):id_1 = data_ethusdt[i].idhigh_1.append(data_ethusdt[i].high)low_1.append(data_ethusdt[i].low)open_1.append(data_ethusdt[i].open)close_1.append(data_ethusdt[i].close)# amount = data_ethusdt[i].amount# count = data_ethusdt[i].countvol_1.append(data_ethusdt[i].vol)datas = pd.DataFrame({'datetime': id_1, 'open': open_1,'high': high_1, 'low': low_1,'close': close_1, 'volume': vol_1})datas['datetime'] = pd.to_datetime(datas['datetime'], unit='s')datas.set_index('datetime', drop=True, append=False)return datas'''
程序结束
'''
# 程序执行:
if __name__ == '__main__':while True :time_start = time.perf_counter()logger.info('-'*5 + 'start' + '-'*5)# 策略加载df = get_data()cerebro = bt.Cerebro()data = bt.feeds.PandasData(dataname=df,datetime='datetime',open='open',high='high',low='low',close='close',volume='volume',openinterest=-1)cerebro.adddata(data)cerebro.addstrategy(huobi_Strategy)result = cerebro.run()# 统计运行时间time_used = time.perf_counter() - time_starttime.sleep(60)

相对活力指数指标(RVI)量化交易相关推荐

  1. 相对活力指数指标(RVI)指标模拟量化交易(第二版)

    经过一段时间的测试,在第一版代码的基础上做了不少修改 第一版代码: 相对活力指数指标(RVI)指标ETH模拟量化交易https://mp.csdn.net/mp_blog/creation/edito ...

  2. python入门指标_Python量化交易基础讲堂-TA-Lib库量价指标分析

    <Python实战-构建基于股票的量化交易系统>小册子主要侧重于 Python 实战讲解,但在内容设计上提供了前置基础章节帮助读者快速掌握基础工具的使用. 同时我们会持续更新一些关于Pyt ...

  3. python k线图和指标_量化交易中,如何使用Python画K线、成交量、买卖点【邢不行】...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第  68 ...

  4. 根据财务指标的量化交易策略

    #会在策略开始前触发一次,我们可以从get_fundamentals函数中更新我们的股票池 #并且保存查询获得的数据以作之后使用 def initialize(context):# 获取A股所有的股票 ...

  5. Python量化交易学习入门

    量化交易-Python实现 一.量化交易的流程和概念 1.数据分析I2O流程 2.量化交易和高频交易.自动交易的区别 3.量化交易的流程 二.量化交易的分类 三:常用量化框架 四.一个完整的策略 五. ...

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

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

  7. sar偏移量追踪技术_SAR指标配合阶段高低价的量化交易策略

    SAR指标 抛物线SAR指标试图通过突出资产移动的方向以及提供进入和退出点来为交易者提供优势.在本文中,我们将介绍该指标的基础知识,并向您展示如何将其纳入您的量化交易策略.我们还将看一下该指标的一些缺 ...

  8. 量化交易中用到的回测评估指标(策略收益、基准收益、Alpha比率、Beta比率、夏普比率、索提诺比率)详解

    前言 近日在做A股的过程中接触到了量化交易.通过一个月时间的了解发现并非全自动印钞机,也有可能有全自动接盘侠的潜质.故现阶段以学习量化交易的知识为主,多学多问总是没错的嘛~ 现阶段使用Python爬取 ...

  9. 量化交易的相对强弱(RSI )指标计算及策略

    顾名思义,相对强弱指数 (RSI) 指标告诉我们资产的相对强弱.换句话说,RSI 告诉我们股票相对于自身的表现(或不表现).RSI 被视为一种强大的技术指标,可用于分析市场,并且是交易者武器库的重要组 ...

最新文章

  1. react 返回一个页面_Fiber 内部: 深入理解 React 的新 reconciliation 算法
  2. 怎么使用CorelDRAW 中的默认调色板
  3. mysql 一个死锁的分析
  4. 定时/计数器(定时和计数的功能)、定时器中断
  5. python模拟http请求
  6. html中怎样实现在输入框中出现提示
  7. 安装Whl文件时提示 ....whl is not a valid wheel filename
  8. 《色彩解答》系列之二 色彩比例
  9. strdup linux,内存管理 – Linux内核API kstrdup
  10. 将系统常用程序一次性的都安装到位
  11. mac2600r_水星MAC2600R路由器
  12. linux上多个CUDA切换使用(小白教程)
  13. 用Python实现一个软件自动升级系统
  14. java命令行打包war_手工命令行打包java工程为war包
  15. Android颜色透明度(不透明度)
  16. android加载大的gif动图
  17. Layui 表单设计器
  18. Unity pc端内嵌网页插件Embedded Browser基本使用流程
  19. 北京东莞企业邮箱注册,外贸邮箱用哪个比较好?
  20. 史上最全软件测试工程师常见的面试题总结(九)【多测师】

热门文章

  1. iShare·AD小技巧--在AD中如何快速的切换版层
  2. 支付宝红包无线支付服务器,网上发红包无线支付成市民新宠 1.5万人次通过支付宝送红包...
  3. The Path to Learning WR Python FPE.11
  4. 手机android怎么关闭自动更新,如何停止Android手机上的应用程序自动更新
  5. FieldSet第二篇 - 动态查询优化
  6. poweriso 红旗linux,iso是什么,怎么用?
  7. Android MPEG4Writer.cpp 简单跟读
  8. 【大数据开发】供应链之CRM、OMS、WMS、SRM、SCM
  9. Free2DTerrainTool入门(一)
  10. 论文写作各模块大致思路 (Discussion 主要讲解)