Coder Social home page Coder Social logo

rodrigo-brito / backtrader-binance-bot Goto Github PK

View Code? Open in Web Editor NEW
261.0 13.0 120.0 5.32 MB

:money_with_wings: A example of bot using Backtrader to trade Bitcoins in Binance Exchange.

License: MIT License

Dockerfile 0.80% Makefile 1.69% Python 97.51%

backtrader-binance-bot's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

backtrader-binance-bot's Issues

how to use it in a different broker

I was taking a look on your code
and it is pretty good
but it is to binance

I need use it in iqoption as a broker
there is a community behind iqoption trying to use iqoption api
but no one know how to put it on backtrader

do you know how to create a broker on backtrader
Is there any video on internet about it ?

Incorrect candle data

Hi, I got the bot running with no hassle. But before everything else, I was checking the 1m datafeed. Below is my strategy which only prints ohlcv data.

After running data feed for half a day; starting @ 25-05-19 09:20:00 I started getting the datafeed such that all ohlc values are exactly same for many candles if not all.

I then turned the bot off and started back on which getting 15m worth 1m data on restart.
On restart I see correct data.

For example @ 25-05-19 09:29:00, see data in 1st run and the 2nd run.
Data from 2nd run (restart) is correct.

The problem is I don't even know where to start debugging this.
Any pointers?

class Basic01(bt.Strategy):

    def __init__(self):
        # Keep a reference to the "close" line in the data[0] dataseries
        self.o = self.datas[0].open
        self.h = self.datas[0].high
        self.l = self.datas[0].low
        self.c = self.datas[0].close
        self.v = self.datas[0].volume

    def log(self, txt, send_telegram=False, color=None):
        dt = self.datas[0].datetime.datetime(0)
        print('%s : %s' % (dt.strftime("%d-%m-%y %H:%M:%S"), txt))

    def next(self):
        # Simply log the closing price of the series from the reference
        self.log('O:%.8f H:%.8f L:%.8f C:%.8f V:%.8f' %
                 (self.o[0], self.h[0], self.l[0], self.c[0], self.v[0]))

25-05-19 09:01:00 : O:8016.44000000 H:8017.72000000 L:8005.37000000 C:8013.84000000 V:26.76449600
25-05-19 09:02:00 : O:8003.23000000 H:8005.10000000 L:8003.23000000 C:8005.02000000 V:0.21315400
25-05-19 09:03:00 : O:7998.50000000 H:7998.50000000 L:7998.50000000 C:7998.50000000 V:0.01875000
25-05-19 09:04:00 : O:8000.08000000 H:8000.08000000 L:8000.08000000 C:8000.08000000 V:0.02967000
25-05-19 09:05:00 : O:7993.50000000 H:7993.50000000 L:7993.50000000 C:7993.50000000 V:0.01826500
25-05-19 09:06:00 : O:7988.68000000 H:7988.68000000 L:7988.68000000 C:7988.68000000 V:0.02487400
25-05-19 09:07:00 : O:7995.38000000 H:7995.38000000 L:7995.38000000 C:7995.38000000 V:0.00500000
25-05-19 09:08:00 : O:7995.67000000 H:7995.67000000 L:7995.67000000 C:7995.67000000 V:0.00183700
25-05-19 09:09:00 : O:7991.58000000 H:7991.58000000 L:7991.58000000 C:7991.58000000 V:0.05152600
25-05-19 09:10:00 : O:7988.93000000 H:7990.84000000 L:7988.87000000 C:7990.84000000 V:0.16319400
25-05-19 09:11:00 : O:7986.82000000 H:7986.82000000 L:7985.05000000 C:7985.05000000 V:1.01830900
25-05-19 09:12:00 : O:7982.56000000 H:7982.56000000 L:7982.56000000 C:7982.56000000 V:0.04744300
25-05-19 09:13:00 : O:7983.98000000 H:7983.98000000 L:7983.98000000 C:7983.98000000 V:0.15108800
25-05-19 09:14:00 : O:7997.36000000 H:7997.36000000 L:7997.36000000 C:7997.36000000 V:0.00898900
25-05-19 09:15:00 : O:7993.19000000 H:7993.19000000 L:7993.19000000 C:7993.19000000 V:0.03065000
25-05-19 09:16:00 : O:7992.53000000 H:7992.53000000 L:7992.53000000 C:7992.53000000 V:0.00853100
25-05-19 09:17:00 : O:7984.85000000 H:7984.85000000 L:7984.83000000 C:7984.85000000 V:0.22422500
25-05-19 09:18:00 : O:7988.74000000 H:7988.74000000 L:7988.74000000 C:7988.74000000 V:0.10418400
25-05-19 09:19:00 : O:7994.00000000 H:7995.71000000 L:7994.00000000 C:7994.43000000 V:0.54700800
25-05-19 09:20:00 : O:7994.98000000 H:7994.98000000 L:7994.98000000 C:7994.98000000 V:0.00149400
25-05-19 09:21:00 : O:7993.01000000 H:7993.01000000 L:7993.01000000 C:7993.01000000 V:0.00294500
25-05-19 09:22:00 : O:7995.16000000 H:7996.13000000 L:7995.14000000 C:7995.14000000 V:0.78172200
25-05-19 09:23:00 : O:7994.89000000 H:7994.89000000 L:7994.89000000 C:7994.89000000 V:0.00149800
25-05-19 09:24:00 : O:7987.08000000 H:7987.79000000 L:7987.08000000 C:7987.79000000 V:0.48928000
25-05-19 09:25:00 : O:7986.74000000 H:7986.74000000 L:7986.74000000 C:7986.74000000 V:0.04167200
25-05-19 09:26:00 : O:7986.10000000 H:7986.10000000 L:7986.10000000 C:7986.10000000 V:0.00469700
25-05-19 09:27:00 : O:7981.91000000 H:7981.91000000 L:7981.91000000 C:7981.91000000 V:0.07297500
25-05-19 09:28:00 : O:7987.57000000 H:7987.57000000 L:7987.57000000 C:7987.57000000 V:0.09389700
25-05-19 09:29:00 : O:7980.57000000 H:7980.57000000 L:7980.57000000 C:7980.57000000 V:0.12323600
finished.

C:\Users\521876\Documents\personal\bot>python main.py
ENV = production
Starting Portfolio Value: 574.62
25-05-19 09:15:00 : O:7993.19000000 H:7995.59000000 L:7986.00000000 C:7992.54000000 V:22.08483100
25-05-19 09:16:00 : O:7992.53000000 H:7995.08000000 L:7982.43000000 C:7984.86000000 V:21.74773600
25-05-19 09:17:00 : O:7984.85000000 H:7992.11000000 L:7983.26000000 C:7988.00000000 V:18.14793700
25-05-19 09:18:00 : O:7988.74000000 H:7995.70000000 L:7985.57000000 C:7993.53000000 V:20.94795900
25-05-19 09:19:00 : O:7994.00000000 H:7997.34000000 L:7991.02000000 C:7994.66000000 V:14.31850900
25-05-19 09:20:00 : O:7994.98000000 H:7994.98000000 L:7988.81000000 C:7990.53000000 V:13.49096400
25-05-19 09:21:00 : O:7993.01000000 H:7996.55000000 L:7991.14000000 C:7994.94000000 V:24.40371700
25-05-19 09:22:00 : O:7995.16000000 H:7999.00000000 L:7991.45000000 C:7993.78000000 V:23.31974600
25-05-19 09:23:00 : O:7994.89000000 H:7994.89000000 L:7985.00000000 C:7987.06000000 V:35.50745000
25-05-19 09:24:00 : O:7987.08000000 H:7989.78000000 L:7985.21000000 C:7988.02000000 V:18.20830500
25-05-19 09:25:00 : O:7986.74000000 H:7988.52000000 L:7981.21000000 C:7986.12000000 V:18.09139700
25-05-19 09:26:00 : O:7986.10000000 H:7987.90000000 L:7981.91000000 C:7981.92000000 V:17.93937100
25-05-19 09:27:00 : O:7981.91000000 H:7993.80000000 L:7977.02000000 C:7992.16000000 V:80.66655800
25-05-19 09:28:00 : O:7987.57000000 H:7989.54000000 L:7978.01000000 C:7978.21000000 V:16.02878300
25-05-19 09:29:00 : O:7980.57000000 H:7981.62000000 L:7978.68000000 C:7980.55000000 V:3.99554100
25-05-19 09:30:00 : O:7977.41000000 H:7977.98000000 L:7977.41000000 C:7977.98000000 V:0.19824800
25-05-19 09:31:00 : O:7978.00000000 H:7984.00000000 L:7976.27000000 C:7980.06000000 V:20.46780000
25-05-19 09:32:00 : O:7979.95000000 H:7989.20000000 L:7979.70000000 C:7989.02000000 V:19.21879300
25-05-19 09:33:00 : O:7988.64000000 H:7994.00000000 L:7986.07000000 C:7993.91000000 V:21.11476500
25-05-19 09:34:00 : O:7992.70000000 H:7997.68000000 L:7992.10000000 C:7994.39000000 V:18.21645000
25-05-19 09:35:00 : O:7993.65000000 H:7997.99000000 L:7992.20000000 C:7993.08000000 V:10.55074700
25-05-19 09:36:00 : O:7993.08000000 H:7993.57000000 L:7986.48000000 C:7990.94000000 V:15.25538600
25-05-19 09:37:00 : O:7991.98000000 H:7991.98000000 L:7989.51000000 C:7991.98000000 V:0.01849800
finished.

TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

Hello,
Thank you for your efforts.
i am testing live your repo on Binance with ETH/BTC . Here is the output
Could you help to resolve?

ENV=  production

Starting Portfolio Value: 0.00333707
DELAYED
LIVE
{'broker': None, '_plimit': None, 'owner': <strategies.basic_rsi.BasicRSI object at 0x7fdd939dfe80>, 'params': <backtrader.metabase.AutoInfoClass_OrderBase_CCXTOrder object at 0x7fdd939df400>, 'p': <backtrader.metabase.AutoInfoClass_OrderBase_CCXTOrder object at 0x7fdd939df400>, 'info': AutoOrderedDict(), 'ref': 1, '_limitoffset': 0.0, 'position': 0, 'exectype': 0, 'ccxt_order': {'fee': None, 'trades': None, 'datetime': '2019-07-20T20:23:28.948Z', 'lastTradeTimestamp': None, 'status': 'closed', 'info': {'executedQty': '0.12300000', 'icebergQty': '0.00000000', 'price': '0.00000000', 'origQty': '0.12300000', 'orderId': 436039847, 'isWorking': True, 'status': 'FILLED', 'timeInForce': 'GTC', 'updateTime': 1563654208948, 'time': 1563654208948, 'symbol': 'ETHBTC', 'type': 'MARKET', 'clientOrderId': '3MwUQaNQMyuMzK3HyZkCv2', 'side': 'BUY', 'stopPrice': '0.00000000', 'cummulativeQuoteQty': '0.00260747'}, 'filled': 0.123, 'amount': 0.123, 'id': '436039847', 'symbol': 'ETH/BTC', 'price': 0.021198943089430895, 'remaining': 0.0, 'average': 0.021198943089430895, 'type': 'market', 'cost': 0.00260747, 'side': 'buy', 'timestamp': 1563654208948}, 'size': 0.123, 'comminfo': None, 'created': <backtrader.order.OrderData object at 0x7fdd939dfcc0>, 'data': <ccxtbt.ccxtfeed.CCXTFeed object at 0x7fdd939dfa58>, 'triggered': False, '_active': True, 'dteos': 737240.9999999999, 'executed': <backtrader.order.OrderData object at 0x7fdd9386bcc0>, 'status': 4, 'ordtype': 0}
{'broker': None, '_plimit': None, 'owner': <strategies.basic_rsi.BasicRSI object at 0x7fdd939dfe80>, 'params': <backtrader.metabase.AutoInfoClass_OrderBase_CCXTOrder object at 0x7fdd939df400>, 'p': <backtrader.metabase.AutoInfoClass_OrderBase_CCXTOrder object at 0x7fdd939df400>, 'info': AutoOrderedDict(), 'ref': 1, '_limitoffset': 0.0, 'position': 0, 'exectype': 0, 'ccxt_order': {'fee': None, 'trades': None, 'datetime': '2019-07-20T20:23:28.948Z', 'lastTradeTimestamp': None, 'status': 'closed', 'info': {'executedQty': '0.12300000', 'icebergQty': '0.00000000', 'price': '0.00000000', 'origQty': '0.12300000', 'orderId': 436039847, 'isWorking': True, 'status': 'FILLED', 'timeInForce': 'GTC', 'updateTime': 1563654208948, 'time': 1563654208948, 'symbol': 'ETHBTC', 'type': 'MARKET', 'clientOrderId': '3MwUQaNQMyuMzK3HyZkCv2', 'side': 'BUY', 'stopPrice': '0.00000000', 'cummulativeQuoteQty': '0.00260747'}, 'filled': 0.123, 'amount': 0.123, 'id': '436039847', 'symbol': 'ETH/BTC', 'price': 0.021198943089430895, 'remaining': 0.0, 'average': 0.021198943089430895, 'type': 'market', 'cost': 0.00260747, 'side': 'buy', 'timestamp': 1563654208948}, 'size': 0.123, 'comminfo': None, 'created': <backtrader.order.OrderData object at 0x7fdd939dfcc0>, 'data': <ccxtbt.ccxtfeed.CCXTFeed object at 0x7fdd939dfa58>, 'triggered': False, '_active': True, 'dteos': 737240.9999999999, 'executed': <backtrader.order.OrderData object at 0x7fdd9386bcc0>, 'status': 4, 'ordtype': 0}
Finished with error:  unsupported operand type(s) for *: 'NoneType' and 'float'
Traceback (most recent call last):
  File "/home/tunc/PycharmProjects/btlivebot/main.py", line 107, in <module>
    main()
  File "/home/tunc/PycharmProjects/btlivebot/main.py", line 92, in main
    result = cerebro.run()
  File "/usr/local/lib/python3.5/dist-packages/backtrader/cerebro.py", line 1127, in run
    runstrat = self.runstrategies(iterstrat)
  File "/usr/local/lib/python3.5/dist-packages/backtrader/cerebro.py", line 1298, in runstrategies
    self._runnext(runstrats)
  File "/usr/local/lib/python3.5/dist-packages/backtrader/cerebro.py", line 1623, in _runnext
    self._brokernotify()
  File "/usr/local/lib/python3.5/dist-packages/backtrader/cerebro.py", line 1360, in _brokernotify
    self._broker.next()
  File "/usr/local/lib/python3.5/dist-packages/ccxtbt/ccxtbroker.py", line 203, in next
    pos.update(o_order.size, o_order.price)
  File "/usr/local/lib/python3.5/dist-packages/backtrader/position.py", line 179, in update
    self.price = (self.price * oldsize + size * price) / self.size
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

Process finished with exit code 1

broker mapping for Bitfinex

Hi Rodrigo,

Thank you for your effort improving and enhancing Backtrader with ccxt!

would this be a valid broker mapping for Bitfinex?

    "broker_mapping": {
        "order_types": {  # https://docs.bitfinex.com/reference#rest-auth-new-order
             bt.Order.Market: 'exchange market',
             bt.Order.Limit: 'exchange limit',
             bt.Order.Stop: 'exchange stop',
             bt.Order.StopLimit: 'exchange stop-limit'
        },
        "mappings": {  # https://docs.bitfinex.com/reference#rest-auth-order-status
            'closed_order': {
                'key': 'is_live',
                'value': False
            },
            'canceled_order': {
                'key': 'is_cancelled',
                'value': True
            }
        }
    }

exchange stop-limit is not documented in the API guide but elsewhere.

MACD comparison between 1m and 5m

Hi there, great work.

I want to change the strategy to compare MACD of 1 minute and 5 minute,

How can I achive this?

Should I do:

self.macd1m = bt.indicators.MACD(self.data, peroid=1)
self.macd5m = bt.indicators.MACD(self.data, peroid=5)

Or should I use your MACDHistSMA indicator? but how?

I'm confused.
New to backtrader and ccxt and trading indicators.
Appreciate any help.

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.