Python Crypto Bot

Related tags

pycryptobot
Overview

Docker Tests

Python Crypto Bot v4.0.3 (pycryptobot)

Join our chat on Telegram

https://t.me/joinchat/09hYKfelbRY2MDNk

Supporting The Project

I get paid to write on Medium. Readers following me, applauding and commenting on my articles, all helps with my earnings. I provided this bot to all of you for free and actively developing it. One way you can support my efforts is to follow me on Medium and read my articles. The Medium subscription is $5 a month (roughly £3) so basically nothing in terms of the value you are getting from the bot. Your efforts here would be greatly appreciated!

Follow me on Medium for updates!

https://whittle.medium.com

Python Crypto Bot (PyCryptoBot)

https://medium.com/coinmonks/python-crypto-bot-pycryptobot-b54f4b3dbb75

What’s new in PyCryptoBot 2?

https://medium.com/coinmonks/whats-new-in-pycryptobot-2-a4bbb1b0c90e

PyCryptoBot with Telegram

https://medium.com/coinmonks/pycryptobot-with-telegram-83eed5f230c2

PyCryptoBot Results and Config

https://medium.com/coinmonks/pycryptobot-results-and-config-57fb6625a6d9

Coinbase Pro Portfolio Tracker

https://medium.com/coinmonks/coinbase-pro-portfolio-tracker-a6e4a1c6b8f8

TradingView.com Charts

https://levelup.gitconnected.com/tradingview-com-charts-36a49c9f77ea

Optional Add-on

Coinbase Pro Portfolio Tracker

https://github.com/whittlem/coinbaseprotracker

An all-in-one view of all your Coinbase Pro portfolios. Highly recommended if running multiple bots and keeping track of their progress.

Prerequisites

  • When running in containers: a working docker/podman installation

  • Python 3.9.x installed -- https://installpython3.com (must be Python 3.9 or greater)

    % python3 --version

    Python 3.9.1

  • Python 3 PIP installed -- https://pip.pypa.io/en/stable/installing

    % python3 -m pip --version

    pip 21.0.1 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)

Installation

Manual

% git clone https://github.com/whittlem/pycryptobot
% cd pycryptobot
% python3 -m pip install -r requirements.txt

Container

Install Docker Desktop
https://docs.docker.com/desktop

From Github image repo

% docker pull ghcr.io/whittlem/pycryptobot/pycryptobot:latest
latest: Pulling from whittlem/pycryptobot/pycryptobot
8f403cb21126: Pull complete
65c0f2178ac8: Pull complete
1091bd628216: Pull complete
cb1eb04426a4: Pull complete
ec065b94ad1c: Pull complete
Digest: sha256:031fd6c7b7b2d08a743127e5850bc3d9c97a46e02ed0878f4445012eaf0619d3
Status: Downloaded newer image for ghcr.io/whittlem/pycryptobot/pycryptobot:latest
ghcr.io/whittlem/pycryptobot/pycryptobot:latest

Local repo

% docker build -t pycryptobot .

Additional Information

The "requirements.txt" was created with python3 -m pip freeze

Run it

Manual

% python3 pycryptobot.py 
   

   

Docker (Option 1)

Example Local Absolute Path: /home/example/config.json
Example Market: BTC-GBP

Daemon:
% docker run --name BTC-GBP -v /home/example/config.json:/app/config.json -d ghcr.io/whittlem/pycryptobot/pycryptobot:latest 
   
    

Example:
% docker run --name BTC-GBP -v /Users/whittlem/Documents/Repos/Docker/config.json:/app/config.json -d ghcr.io/whittlem/pycryptobot/pycryptobot:latest --live 0
e491ae4fdba28aa9e74802895adf5e856006c3c63cf854c657482a6562a1e15

Interactive:
% docker run --name BTC-GBP -v /home/example/config.json:/app/config.json -it ghcr.io/whittlem/pycryptobot/pycryptobot:latest 
    
     

List Processes:
% docker ps

Example:
% docker ps
CONTAINER ID   IMAGE                                             COMMAND                  CREATED          STATUS          PORTS     NAMES
e491ae4fdba2   ghcr.io/whittlem/pycryptobot/pycryptobot:latest   "python3 pycryptobot…"   46 seconds ago   Up 44 seconds             BTC-GBP

Container Shell:
% docker exec -it BTC-GBP /bin/bash
[[email protected] app]#

Build your own image (if necessary):
docker build -t pycryptobot_BTC-GBP .

Running the docker image:
docker run -d --rm --name pycryptobot_BTC-GBP_container pycryptobot_BTC-GBP

    
   

Typically I would save all my settings in the config.json but running from the command line I would usually run it like this.

% python3 pycryptobot.py --market BTC-GBP --granularity 3600 --live 1 --verbose 0 --selllowerpcnt -2

docker-compose (Option 2)

To run using the config.json in template folder,

% docker-compose up -d

By default, docker-compose will use the config inside ./market/template. We provide this as a template for any market config.

For each market you want to trade, create a copy of this folder under market. Also create either a coinbase.key or binance.key file to each folder depending which trading platform is being used. For example, if you are trading BTCEUR and ETHEUR your market folder should look like this:

├── market
│ ├── BTCEUR
│ │ ├── config.json
│ │ ├── pycryptobot.log
│ │ └── graphs
│ └── ETHEUR
│   ├── config.json
│   ├── pycryptobot.log
│   └── graphs

modify docker-compose.yaml

version: "3.9"

services:
  btceur:
    build:
      context: .
    container_name: btceur
    volumes:
      - ./market/BTCEUR/coinbase.key:/app/coinbase.key.json
      - ./market/BTCEUR/config.json:/app/config.json
      - ./market/BTCEUR/pycryptobot.log:/app/pycryptobot.log
      - ./market/BTCEUR/graphs:/app/graphs
      - /etc/localtime:/etc/localtime:ro
    environment:
      - PYTHONUNBUFFERED=1
    deploy:
      restart_policy:
        condition: on-failure

  etheur:
    build:
      context: .
    container_name: etheur
    volumes:
      - ./market/ETHEUR/coinbase.key:/app/coinbase.key.json
      - ./market/ETHEUR/config.json:/app/config.json
      - ./market/ETHEUR/pycryptobot.log:/app/pycryptobot.log
      - ./market/ETHEUR/graphs:/app/graphs
      - /etc/localtime:/etc/localtime:ro
    environment:
      - PYTHONUNBUFFERED=1
    deploy:
      restart_policy:
        condition: on-failure

Run all your bots. Note that each market should have it's own config. Graphs will be saved on each market's folder.

% docker-compose up -d

Kubernetes (Helm) (Option 3)

There is a helm chart available in this repo. It will create your config.json as a configmap and the binance/coinbase keys as secrets, and mount them into the Pod. To run pycryptobot as a Kubernetes deployment, create your helm values as yaml in the following format (do not change the path to the api_key_file):

", "client_id" : " ", } } coinbasepro_key: | XXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY zzzzzzzzzzzz ">
config: >
    {
        "coinbasepro": {
            "api_url": "https://api.pro.coinbase.com",
            "config": {
                "base_currency": "ETH",
                "quote_currency": "EUR",
                "live": 1,
                "sellatloss": 0,
                "disablelog": 1,
                "autorestart": 1
            },
            "api_key_file": "/app/keys/coinbasepro.key"
        },
        "telegram" : {
            "token" : "
    
     ",
            "client_id" : "
     
      ",
        }
    }

coinbasepro_key: |
    XXXXXXXXXXXXXXXXXXXX
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    zzzzzzzzzzzz

     
    

Or, for binance:

", "client_id" : " ", } } binance_key: | XXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ">
config: >
    {
        "binance": {
            "api_url": "https://api.binance.com",
            "config": {
                "base_currency": "ETH",
                "quote_currency": "EUR",
                "live": 1,
                "sellatloss": 0,
                "disablelog": 1,
                "autorestart": 1
            },
            "api_key_file": "/app/keys/binance.key"
        },
        "telegram" : {
            "token" : "
    
     ",
            "client_id" : "
     
      ",
        }
    }

binance_key: |
    XXXXXXXXXXXXXXXXXXXX
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

     
    

Or, for kucoin:

", "client_id" : " ", } } kucoin_key: | XXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY zzzzzzzzzzzz ">
config: >
    {
        "kucoin": {
            "api_url": "https://api.kucoin.com",
            "config": {
                "base_currency": "ETH",
                "quote_currency": "EUR",
                "live": 1,
                "sellatloss": 0,
                "disablelog": 1,
                "autorestart": 1
            },
            "api_key_file": "/app/keys/coinbasepro.key"
        },
        "telegram" : {
            "token" : "
    
     ",
            "client_id" : "
     
      ",
        }
    }

kucoin_key: |
    XXXXXXXXXXXXXXXXXXXX
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    zzzzzzzzzzzz

     
    

Or both:

", "client_id" : " ", } } coinbasepro_key: | XXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY zzzzzzzzzzzz binance_key: | XXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY kucoin_key: | XXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY zzzzzzzzzzzz ">
config: >
    {
        "coinbasepro": {
            "api_url": "https://api.pro.coinbase.com",
            "config": {
                "base_currency": "ETH",
                "quote_currency": "EUR",
                "live": 1,
                "sellatloss": 0,
                "disablelog": 1,
                "autorestart": 1
            },
            "api_key_file": "/app/keys/coinbasepro.key"
        },
        "binance": {
            "api_url": "https://api.binance.com",
            "config": {
                "base_currency": "ETH",
                "quote_currency": "EUR",
                "live": 1,
                "sellatloss": 0,
                "disablelog": 1,
                "autorestart": 1
            },
            "api_key_file": "/app/keys/binance.key"
        },
        "kucoin": {
            "api_url": "https://api.kucoin.com",
            "config": {
                "base_currency": "ETH",
                "quote_currency": "EUR",
                "live": 1,
                "sellatloss": 0,
                "disablelog": 1,
                "autorestart": 1
            },
            "api_key_file": "/app/keys/kucoin.key"
        },
        "telegram" : {
            "token" : "
    
     ",
            "client_id" : "
     
      ",
        }
    }

coinbasepro_key: |
    XXXXXXXXXXXXXXXXXXXX
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    zzzzzzzzzzzz
binance_key: |
    XXXXXXXXXXXXXXXXXXXX
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
kucoin_key: |
    XXXXXXXXXXXXXXXXXXXX
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    zzzzzzzzzzzz

     
    

Then run:

git clone https://github.com/whittlem/pycryptobot
cd pycryptobot/chart
helm upgrade -i pycryptobot-eth-eur -f 
   

   

So if you created above helm values file as config-eth-eur.yaml, you would run:

helm upgrade -i pycryptobot-eth-eur -f config-eth-eur.yaml

Bot mechanics

Smart switching:

  • If the EMA12 is greater than the EMA26 on the 1 hour and 6 hour intervals switch to start trading on the 15 minute intervals
  • If the EMA12 is lower than the EMA26 on the 1 hour and 6 hour intervals switch back to trade on the 1 hour intervals
  • If a "granularity" is specified as an argument or in the config.json then smart switching will be disabled
  • Force smart switching between 1 hour and 15 minute intervals with "smartswitch" argument or config option (1 or 0)

Buy signal:

  • EMA12 is currently crossing above the EMA26 and MACD is above the Signal OR MACD is currently crossing above the Signal and EMA12 is above the EMA26
  • Golden Cross (SMA50 is above the SMA200) <-- bull market detection
  • On-Balance Volume Percent > -5 <-- suitable momentum required
  • Elder Ray Buy is True <-- bull market detection

The bot will only trade in a bull market to minimise losses! (you can disable this)

Special buy cases:

  • "nobuynearhighpcnt" to specify the percentage from high that the bot should not buy if "disablebuynearhigh" is not specified.

Sell signal:

  • EMA12 is currently crossing below the EMA26
  • MACD is below the Signal

Special sell cases:

  • "buymaxsize" specifies a fixed max amount of the quote currency to buy with
  • "nosellminpcnt" specifies the lower margin limit to not sell above
  • "nosellmaxpcnt" specifies the upper margin limit to not sell below
  • If "sellatloss" is on, bot will sell if price drops below the lower Fibonacci band
  • If "sellatloss" is on and "selllowerpcnt" is specified the bot will sell at the specified amount E.g. -2 for -2% margin
  • If "sellatloss" is on and "trailingstoploss" is specified the bot will sell at the specified amount below the buy high
  • If "sellupperpcnt" is specified the bot will sell at the specified amount E.g. 10 for 10% margin (Depending on the conditions I lock in profit at 3%)
  • If the margin exceeds 3% and the price reaches a Fibonacci band it will sell to lock in profit
  • If the margin exceeds 3% but a strong reversal is detected with negative OBV and MACD < Signal it will sell
  • "sellatloss" set to 0 prevents selling at a loss

Optional Options

--stats                             Display order profit and loss (P&L) report
--autorestart                       Automatically restart the bot on error
--sellatresistance                  Sells if the price reaches either resistance or Fibonacci band

Disabling Default Functionality

--disablebullonly                   Disable only buying in bull market
--disablebuynearhigh                Disable buying within 3% of the dataframe high
--disablebuymacd                    Disable macd buy signal
--disablebuyema                     Disable ema buy signal.If both core indicators ema and macd buy signals are disabled, bot won't buy.Doesn't affect sell strategy.
--disablebuyobv                     Disable obv buy signal
--disablebuyelderray                Disable elder ray buy signal
--disablefailsafefibonaccilow       Disable failsafe sell on fibonacci lower band
--disablefailsafelowerpcnt          Disable failsafe sell on 'selllowerpcnt'
--disableprofitbankupperpcnt        Disable profit bank on 'sellupperpcnt'
--disableprofitbankfibonaccihigh    Disable profit bank on fibonacci upper band
--disableprofitbankreversal         Disable profit bank on strong candlestick reversal
--disabletelegram                   Disable sending telegram messages
--disablelog                        Disable writing log entries
--disabletracker                    Disable saving CSV on buy and sell events

"Sell At Loss" explained

The "sellatloss" option disabled has it's advantages and disadvantages. It does prevent any losses but also prevents you from exiting a market before a crash or bear market. Sometimes it's better to make an occasional small loss and make it up with several buys than be conservative and potentially lock a trade for weeks if not months. It happened to me while testing this with the last crash (after Elon's tweet!). Three of my bots did not sell while the profit dropped to -10 to -20%. It did bounce back and I made over 3% a trade with any losses but I also lost out of loads of trading opportunities. It's really a matter of preference. Maybe some markets would be more appropriate than others for this.

Live Trading

In order to trade live you need to authenticate with the Coinbase Pro or Binance APIs. This is all documented in my Medium articles. In summary you will need to include a config.json file in your project root which contains your API keys. If the file does not exist it will only work in test/demo mode.

Trading Simulation

--sim ['fast, fast-sample, slow-sample']   Sets simulation mode
--simstartdate                             Start date for sample simulation e.g '2021-01-15'
--simenddate                               End date for sample simulation or 'now'

simstartdate takes priority over simenddate if both are given

Simulation trades.csv

By default, when running a simulation, if there are any orders, a file called trades.csv with all BUYS and SELLS will be created.

With --tradesfile you can control the name and where file is stored, eg --tradesfile BTSUDC-trades.csv

API key / secret / password storage

From now on it's recommended NOT to store the credentials in the config file because people share configs and may inadvertently share their API keys within.

Instead, please, create binance.key or coinbase.key or kucoin.key (or use your own names for the files) and refer to these files in the config.json file as:

"api_key_file" : "binance.key"

Once you have done that, "api_key" and "api_secret" can be safely removed from your config file and you're free to share your configs without worrying of leaked credentials.

binance.key / conbase.key / kucoin.key examples

Actually it's pretty simple, these files are supposed to be a simple text files with the API key on the first line, API secret on the second line and in case of coinbase and kucoin, probably the API password on the third. No comments or anything else is allowed, just the long string of numbers:

0234238792873423...82736827638472
68473847745876abscd9872...8237642

(dots are used to indicate places where the strings were shortened)

config.json examples

Coinbase Pro basic (using smart switching)

{
    "api_url" : "https://api.pro.coinbase.com",
    "api_key_file" : "coinbase.key",
    "config" : {
        "cryptoMarket" : "BTC",
        "fiatMarket" : "GBP",
        "live" : 1,
        "sellatloss" : 0
    }
}

Coinbase Pro basic (specific granularity, no smart switching)

{
    "api_url" : "https://api.pro.coinbase.com",
    "api_key_file" : "coinbase.key",
    "config" : {
        "cryptoMarket" : "BCH",
        "fiatMarket" : "GBP",
        "granularity" : 3600,
        "live" : 1,
        "sellatloss" : 0
    }
}

Coinbase Pro only (new format)

{
    "coinbasepro" : {
        "api_url" : "https://api.pro.coinbase.com",
        "api_key_file" : "coinbase.key",
        "config" : {
            "base_currency" : "BTC",
            "quote_currency" : "GBP",
            "granularity" : "3600",
            "live" : 0,
            "verbose" : 0
        }
    }
}

Binance only (new format)

{
    "binance" : {
        "api_url" : "https://api.binance.com",
        "api_key_file" : "binance.key",
        "config" : {
            "base_currency" : "BTC",
            "quote_currency" : "ZAR",
            "granularity" : "1h",
            "live" : 0,
            "verbose" : 0
        }
    }
}

Kucoin (using smart switching)

{
    "api_url" : "https://api.kucoin.com",
    "api_key_file" : "kucoin.key",
    "config" : {
        "base_currency" : "BTC",
        "quote_currency" : "GBP",
        "live" : 1,
        "sellatloss" : 0
    }
}

Coinbase Pro, Binance and Kucoin (new format)

{
    "binance" : {
        "api_url" : "https://api.binance.com",
        "api_key_file" : "binance.key",
        "config" : {
            "base_currency" : "BTC",
            "quote_currency" : "ZAR",
            "granularity" : "1h",
            "live" : 0,
            "verbose" : 0
        }
    },
    "coinbasepro" : {
        "api_url" : "https://api.pro.coinbase.com",
        "api_key_file" : "coinbase.key",
        "config" : {
            "base_currency" : "BTC",
            "quote_currency" : "GBP",
            "granularity" : "3600",
            "live" : 0,
            "verbose" : 0
        }
    },
    "kucoin" : {
        "api_url" : "https://api.kucoin.com",
        "api_key_file" : "kucoin.key",
        "config" : {
            "base_currency" : "BTC",
            "quote_currency" : "GBP",
            "granularity" : "3600",
            "live" : 0,
            "verbose" : 0
        }
    }
}

All the "config" options in the config.json can be passed as arguments E.g. --market

Command line arguments override config.json config.

For telegram, add a piece to the config.json as follows:

", "client_id" : " " } ">
"telegram" : {
    "token" : "
    
     ",
    "client_id" : "
     
      "
}

     
    

You can use @botfather and @myidbot in telegram to create a bot with token and get a client id.

For configuring logger, add a piece to the config.json as follows: This is also default configuration of the logger, if no config is given and log is not disabled this configuration will apply.

"logger" : {
    "filelog": 1,
    "logfile": "pycryptobot.log",
    "fileloglevel": "DEBUG",
    "consolelog": 1,
    "consoleloglevel": "INFO"
}

"filelog" and "consolelog" can only get 1 (enable) or 0 (disable). "--disablelog" argument or "disablelog" config will disable to writing logfile as backwards compatibility. If you want to disable logging entirely, you can set "filelog" and "consolelog" to 0.

"logfile" is overriden by '--logfile' console argument. If '--logfile' used when running bot "logfile": "pycryptobot.log" line in config file will be ignored.

"fileloglevel" and "consoleloglevel" can get one of 'CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET' For further detail in log levels: https://docs.python.org/3/library/logging.html#logging-levels

Multi-Market Trading

The bot can trade multiple markets at once. This is also documented in my Medium articles. The bot will execute buys using the full "quote currency" balance it has access too and it will sell the full "base currency" balance it has access too. In order to ring-fence your non-bot funds you should create another "Portfolio" in Coinbase Pro and assign API keys to it. That way you limit exposure. You can so something similar with Binance using sub-accounts but I believe you need to be a certain level to do this.

The way you trade multiple markets at once is create multiple Coinbase Pro portfolios for each each bot instance. You will then clone this project for additional bots with the relevant Portfolio keys (config.json).

I have 5 bots running at once for my Portfolios: "Bot - BTC-GBP", "Bot - BCH-GBP", "Bot - ETH-GBP", "Bot - LTC-GBP", and "Bot - XLM-EUR".

Assuming each bot has a config.json that looks similar to this (update the "cryptoMarket" and "fiatMarket" appropriately):

{
    "api_url" : "https://api.pro.coinbase.com",
    "api_key_file" : "coinbase.key"
    "config" : {
        "cryptoMarket" : "BTC",
        "fiatMarket" : "GBP",
        "live" : 1
        "selllowerpcnt" : -2
    }
}

The way I run my five bots is as follow:

BTC-GBP % rm pycryptobot.log; git pull; clear; python3 pycryptobot.py

BCH-GBP % rm pycryptobot.log; git pull; clear; python3 pycryptobot.py

ETH-GBP % rm pycryptobot.log; git pull; clear; python3 pycryptobot.py

LTC-GBP % rm pycryptobot.log; git pull; clear; python3 pycryptobot.py

XLM-EUR % rm pycryptobot.log; git pull; clear; python3 pycryptobot.py

Notice how I don't pass any arguments. It's all retrieved from the config.json but you can pass the arguments manually as well.

The merge from "binance" branch back into "main"

Some of you may have been helping test the new code for a few months in the "binance" branch. This is now merged back into the "main" branch. If you are still using the "binance" branch please carry out the following steps (per bot instance).

git reset --hard
git checkout main
git pull
python3 -m pip install -r requirements.txt

Please note you need to be using Python 3.9.x or greater. The previous bot version only required Python 3.x.

Stats Module

To keep track of the bots performance over time you can run the stats module. e.g.

python3 pycryptobot.py --stats

This will analyse all the completed buy/sell trade pairs to give stats on todays trades, the trades over the last 7 days, the trades over the last 30 days, and all-time trades.

An optional flag of --statstartdate can be given to ignore all trades that happened before a specified date. The date must be of the format: yyyy-mm-dd. e.g.

python3 pycryptobot.py --stats --statstartdate 2021-6-01

To get the stats from all your bots, another optional flag of --statgroup can be used. This takes a list of markets and merges the results into one output. e.g.

python3 pycryptobot.py --stats --statgroup BTCGBP ETHGBP ADAGBP

or via the config.json file e.g.

"config": {
    ....
    "stats": 1,
    "statgroup": ["BTCGBP", "ETHGBP", "ADAGBP"],
    ....
}

Note: --statgroup only accepts a group of markets if the quote currency (in this example GBP) is the same.

If you want more detail than the simple summary, add the optional flag --statdetail. This will print a more detailed list of the transactions. --statdetail can work in conjunction with --statstartdate and --statgroup.

Upgrading the bots

I push updates regularly and it's best to always be running the latest code. In each bot directory make sure you run this regularly.

git pull

I've actually included this in the examples in how to start the bot that will do this for you automatically.

Fun quick non-live demo

python3 pycryptobot.py --market BTC-GBP --granularity 3600 --sim fast --verbose 0

If you get stuck with anything email me or raise an issue in the repo and I'll help you sort it out. Raising an issue is probably better as the question and response may help others.

Enjoy and happy trading! :)

Issues
  • So what exchanges, markets, and config are you all using?

    So what exchanges, markets, and config are you all using?

    According to Github there are 333 of you regularly updating your bots. I'm glad you are finding it useful :)

    I was just curious how all of you are doing?

    1. Which exchange(s) are you using? Coinbase Pro, Binance, or both?
    2. How many bots are you running?
    3. How much are you trading per bot?
    4. Which markets are you trading?
    5. What config is working well for you?

    I'll start off...

    1. I'm using Coinbase Pro only
    2. I have 5 bots running (in case you didn't see Coinbase Pro now supports 10 portfolios!)
    3. Up until yesterday I was trading £500 per bot. When ever the bots have a successful trade I transfer the profits to my bank account. I increased this to £1500 a bot yesterday.
    4. I'm trading "ADA-GBP", "BCH-GBP", "BTC-GBP", "ETH-GBP", and "LTC-GBP". I was trading "XLM-EUR" but I found it too unreliable, too volatile for my liking. From my analysis ADA looks like a better option as it looks more stable and also more independent from Bitcoin and Ethereum.
    5. I'm actually trying out a new config from this morning. I have disabled "sellatloss" for a few weeks and it has been working really well for me. The change I made this morning was to "disablebullonly", "disablebuyobv", and "disablebuyelderray". The reason I disabled them is because they were there to prevent losses but I have "sellatloss" disabled so they are redundant with that on. I would rather be more liberal with my trades and trade more often. So I'm only using EMA crossovers and MACD with sell at loss disabled. I'll let you know how this works out.

    As an example my BTC-GBP config.json looks like this (with my keys removed):

    {
        "coinbasepro" : {
            "api_url" : "https://api.pro.coinbase.com",
            "api_key" : "",
            "api_secret" : "",
            "api_passphrase" : "",
            "config" : {
                "base_currency" : "BTC",
                "quote_currency" : "GBP",
                "live" : 1,
                "sellatloss" : 0,
                "disablebullonly" : 1,
                "disablebuyobv" : 1,
                "disablebuyelderray" : 1
            }
        },
        "telegram" : {
            "token" : "",
            "client_id" : ""
        }
    }
    
    documentation 
    opened by whittlem 44
  • Ignored buymaxsize

    Ignored buymaxsize

    Hi All,

    when the Bot was started it did not respect the buymaxsize present within the configurations and bought for the entire amount of the quote_currency.

    "config" : { "base_currency" : "ADA", "quote_currency" : "USDT", "buymaxsize": 500, .... }

    Regards.

    bug waiting help required 
    opened by TICLAB 25
  • Binance marketSell list indices must be integers or slices, not str

    Binance marketSell list indices must be integers or slices, not str

    Hi all, I just observed this message and the trade didn't happen:

    BNB balance before order: 0.2927 BUSD balance before order: 0.0 04-05-2021 00:33:51 Binance marketSell list indices must be integers or slices, not str BNB balance after order: 0.2927 BUSD balance after order: 0.0

    Running as:

                             Python Crypto Bot                                
    
               Release : v2.0.0 (commit: 6)                                   
    
              Bot Mode : LIVE - live trades using your funds!                 
           Bot Started : 2021-05-03 23:53:14.090838                           
    
          Sell At Loss : 1  --sellatloss 1                                    
     Sell At Resistance : True  --sellatresistance                            
       Trade Bull Only : True  --disablebullonly                              
         Buy Near High : True  --disablebuynearhigh                           
          Use Buy MACD : True  --disablebuymacd                               
           Use Buy OBV : True  --disablebuyobv                                
     Use Buy Elder-Ray : True  --disablebuyelderray                           
    Sell Fibonacci Low : True  --disablefailsafefibonaccilow
    Sell Fibonacci High : True  --disableprofitbankfibonaccihigh
    Candlestick Reversal : True  --disableprofitbankreversal                    
              Telegram : True  --disabletelegram                              
                   Log : True  --disablelog                                   
               Tracker : True  --disabletracker                               
    

    *** smart switch from granularity '1h' (1 hour) to '15m' (15 min) ***

    bug 
    opened by denissonpaz 23
  • Unified granularity

    Unified granularity

    Description

    Here the description of the issue: https://github.com/whittlem/pycryptobot/issues/203

    Fixes # (issue)

    Type of change

    Please make your selection.

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] This change requires a documentation update
    • [ ] This change requires a new dependency
    • [x] Code Maintainability / comments
    • [x] Code Refactoring / future-proofing

    How Has This Been Tested?

    Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration.

    Checklist:

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    • [ ] I have added pytest unit tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes
    • [ ] Any dependent changes have been merged and published in downstream modules
    • [x] I have checked my code and corrected any misspellings
    opened by dthevenin 19
  • Add container image build to repo

    Add container image build to repo

    This PR adds a Dockerfile and example docker-compose.yaml to allow for easier administration.

    In order to enable the build in your repo, you should:

    • create a PAT for your account (User > Settings > Developer settings > Personal Access Tokens) with the read and write package rights
    • put the token into a secret variable for this repo (Settings > secrets > New secret). Give it the name "PACKAGE_TOKEN" as this is configured in the github action
    • Change the visibility of the created "package" (User > Your Profile > Packages > pycryptobot/pycryptobot > Package settings > Change visibility

    It is a bit of work, but it makes usability a lot easier :)

    I also fixed all markdown-lint violations in the readme file.

    You can check the actual container that was built out of this: ghcr.io/lvlie/pycryptobot/pycryptobot:latest

    And I think the "action" log should also be visible as well: https://github.com/lvlie/pycryptobot/runs/2307818414?check_suite_focus=true

    opened by lvlie 18
  • error when buying on binance

    error when buying on binance

    Hello

    i got an error message when attempting to buy Algo on binance this morning :

    2021-04-25 08:00:00 | ALGOUSDT 1h | Close: 1.15 | BUY

    ALGO balance before order: 0.0 USDT balance before order: 199.98 Order quantity after rounding and fees: 172.84 25-04-2021 10:47:14 Binance marketBuy APIError(code=-2010): Account has insufficient balance for requested action. ALGO balance after order: 0.0 USDT balance after order: 199.98

    as you can see, i had ~200 usdt in my acount thanks

    opened by delphsmith 17
  • Launch with error 'KeyError:

    Launch with error 'KeyError: "['specified_funds'] not in index"'

    Describe the bug Errors at launch. It only affects one of my 3 portfolios on startup, as the format doesn't confirm to the specc here: https://github.com/whittlem/pycryptobot/blob/d530ab7d59364acfd4322f47bfc5ee9af35fe289/models/CoinbasePro.py#L192

    To Reproduce Steps to reproduce the behavior:

    1. launch using python3 pycryptobot.py
    2. See error

    Error Log

    Traceback (most recent call last):
      File "pycryptobot.py", line 66, in <module>
        orders = account.getOrders(app.getMarket(), '', 'done')
      File "/home/pi/pycryptobot/BTC/models/TradingAccount.py", line 110, in getOrders
        self.orders = model.getOrders(market, action, status)
      File "/home/pi/pycryptobot/BTC/models/CoinbasePro.py", line 195, in getOrders
        df = resp.copy()[[ 'created_at', 'product_id', 'side', 'type', 'filled_size', 'specified_funds', 'executed_value', 'fill_fees', 'status' ]]
      File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/frame.py", line 3030, in __getitem__
        indexer = self.loc._get_listlike_indexer(key, axis=1, raise_missing=True)[1]
      File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1265, in _get_listlike_indexer
        self._validate_read_indexer(keyarr, indexer, axis, raise_missing=raise_missing)
      File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/indexing.py", line 1315, in _validate_read_indexer
        raise KeyError(f"{not_found} not in index")
    KeyError: "['specified_funds'] not in index"
    

    I've gone in to actually check the columns of resp, and it only contains the following:

    ['id', 'price', 'size', 'product_id', 'profile_id', 'side', 'type', 'time_in_force', 'post_only', 'created_at', 'done_at', 'done_reason', 'fill_fees', 'filled_size', 'executed_value', 'status', 'settled']
    

    Desktop (please complete the following information):

    • OS: Linux; Debian
    • Version: latest git pull as of 2.0.6

    Additional context Config file, aside from base_currency identical to working ones. :

    {
         "coinbasepro" : {
             "api_url" : "https://api.pro.coinbase.com",
             "api_key" : "...",
             "api_secret" : "...",
             "api_passphrase" : "...",
             "config" : {
                 "base_currency" : "BTC",
                 "quote_currency" : "USD",
                 "live" : 1,
                 "sellatloss" : 0,
                 "granularity": 60
             }
         },
         "telegram" : {
             "token" : "...",
             "client_id" : "..."
         }
    }
    
    bug 
    opened by tiems90 17
  • Statsmodels and Pandas issue on Raspberry Pi

    Statsmodels and Pandas issue on Raspberry Pi

    An exception which causes the program to quit.

    On Raspberry Pi running bot from a Terminal screen. All dependencies were updated to the latest versions available and supported on the Raspberry Pi.

    Logger screen:

    /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning)

    Restarting application after exception: KeyError('The end argument could not be matched to a location related to the index of the data.')

    2021-06-15 05:00:00 | ETC-GBP | 3600 | Close: 41.9720 | ^ EMA12/26: 41.7507 > 41.4208 ^ | ^ MACD: 0.3298 > 0.3164 ^ | WAIT | Last Action: BUY | -26.1610% (delta: -14.305) /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) ^[c/home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) /home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py:583: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting. ' ignored when e.g. forecasting.', ValueWarning) KeyError('The end argument could not be matched to a location related to the index of the data.') Traceback (most recent call last): File "pandas/_libs/hashtable_class_helper.pxi", line 1039, in pandas._libs.hashtable.Int64HashTable.get_item KeyError: 1623744000000000000

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "pandas/_libs/index.pyx", line 446, in pandas._libs.index.DatetimeEngine.get_loc KeyError: Timestamp('2021-06-15 08:00:00')

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2897, in get_loc raise KeyError(key) from err KeyError: Timestamp('2021-06-15 08:00:00')

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/indexes/datetimes.py", line 627, in get_loc raise KeyError(orig_key) from err KeyError: '2021-06-15 08:00:00'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "/home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py", line 170, in get_index_loc raise KeyError(str(e)) KeyError: 'only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "/home/pi/.local/lib/python3.7/site-packages/statsmodels/tsa/base/tsa_model.py", line 333, in get_prediction_index raise KeyError('The end argument could not be matched to a' KeyError: 'The end argument could not be matched to a location related to the index of the data.'

    help required 
    opened by Olney1 16
  • Exception('GET (401) https://api.pro.coinbase.com/orders?status=done - request timestamp expired')

    Exception('GET (401) https://api.pro.coinbase.com/orders?status=done - request timestamp expired')

    This error occurs while executing the code about after 20mins

    2021-07-12 13:43:05 | BTC-EUR (BEAR) | 3600 | Current Price: 28200.93 Exception('GET (401) https://api.pro.coinbase.com/orders?status=done - request timestamp expired') Exception: GET (401) https://api.pro.coinbase.com/orders?status=done - request timestamp expired

    opened by SithX 14
  • Insufficient funds Coinbase Pro

    Insufficient funds Coinbase Pro

    Describe the bug Attempt to run bot and get an error message that there are no funds when I do have $100 available.

    To Reproduce Steps to reproduce the behavior:

    1. Run the bot command
    2. get the error message

    Expected behavior I was hoping that the bot would begin to run.

    Screenshots See below

    Desktop (please complete the following information): Raspberry Pi 4 Current code for bot from here Python 3

    I'm running into a similar issue: image

    After I ran the "...--lastaction SELL" I got this error message: image

    I think this is related to other issues but I'm not sure how or what to do to fix this.
    I'm attempting to start a bot for the first time using Coinbase Pro for DOT.

    user support 
    opened by dvpetta 14
  • Changelog reformatting

    Changelog reformatting

    Description

    list changes in CHANGELOG.md as bullet points to improve readability

    Preview

    opened by thiasB 0
  • UnboundLocalError(

    UnboundLocalError("local variable 'margin_text' referenced before assignment")

    opened by MadScrewdriver 1
  • KeyError('ema12') is triggered when

    KeyError('ema12') is triggered when "disablebuyema" parameter is set to 1 in the config.json file

    On PycryptoBot version 4.2.0, when the "disablebuyema" parameter is set to 1 in the config.json file, the scripts stops with a KeyError('ema12')

    opened by ulopem 1
  • Usage of Binance Leverage Tokens

    Usage of Binance Leverage Tokens

    Does the bot support BLVTs (Binance Leverage Tokens)?

    I was thinking about using UP and DOWN tokens so the bot could profit on both market directions.

    Does that make sense or do you know the strategies used by the bot won't allow good trading for these type of tokens?

    BTCUP and BCHUP seems to works fine in test mode...

    However I can't get BTCDOWN or BCHDOWN to work...

    I am getting this error in the docker logs for those containers:

    Traceback (most recent call last):
      File "/app/models/config/binance_parser.py", line 129, in parser
        raise TypeError('Base currency is invalid.')
    TypeError: Base currency is invalid.
    

    I see a similar error described in #299 but not sure if it's the same think.

    Big thanks for all your time and effort spent in this bot. Specially for making it open source. Really appreciate it. Keep up the good work!

    BTW: I am using docker-compose to deploy the bots. Binance as Exchange. Ubuntu Serve 20.04 LTS.

    opened by chopeta 0
  • Insufficient quote funds on some pairs

    Insufficient quote funds on some pairs

    Get Insufficient quote funds message on some pairs after last update.

    Basically use one GBP pot which all my bots fight over. Coins I have tried which give message: ADA, XRP, DOGE, SHIB, DAT Coins which dont have the message: DOT All bots use the same config file set up as below:

    { "binance": { "api_url": "https://api.binance.com", "api_key_file": "binance.txt", "config" : { "base_currency" : "(what ever coin bot is set up for)", "quote_currency" : "GBP", "live" : 1, "sellatloss" : 1, "selllowerpcnt" : -5, "sellatresistance" : 1, "trailingstoploss" : -1.5, "trailingstoplosstrigger" : 5, "nosellmaxpcnt" : 3, "nosellminpcnt" : -3, "disablebullonly" : 1, "disablebuynearhigh" : 0, "buynearhighpcnt" : 3, "disablebuymacd" : 0, "disablebuyobv" : 0, "disablebuyelderray" : 1, "disablefailsafefibonaccilow" :0 , "disableprofitbankreversal" : 0, "disabletracker" : 1, "disabletelegram" : 0, "autorestart" : 0, "graphs" : 0, "verbose" : 0, "enableinsufficientfundslogging": 1, "stats" : 0 } }, "telegram": { "token": "HIDDEN", "client_id": "HIDDEN" } }

    Have plenty of quote funds in account (bots are quoting that there is £0)

    Running on Raspberry pi 4 and a Pi zero both behave the same.

    Additional context pycry

    Thanks for looking

    opened by Kyconic44 4
  • Exception: Insufficient Quote Funds!

    Exception: Insufficient Quote Funds!

    This was all running fine. I recently added a git pull to my startup script and now it wont run and simply spits out:

    Exception: Insufficient Quote Funds! (Actual: 0.00000000, Minimum: 0.00029)

    I have my funds in the portfolio currently fully invested in ETH when I run the command.

    Here is my command line: python3 pycryptobot.py --market ETH-USD --granularity 60 --live 1 --verbose 1

    and config

    {
        "coinbasepro": {
            "config": {
                "base_currency": "ETH",
                "quote_currency": "USD",
                "live": 1,
                "sellatloss": 0,
                "smartswitch": 1,
                "autorestart": 1,
                "disabletelegram": 0
            },
            "api_key_file": "coinbasepro.key",
            "api_url": "https://api.pro.coinbase.com"
        },
            "telegram" : {
                "token" : "<hidden>",
                "client_id" : "<hidden>"
        }
    }
    
    opened by ramiss 0
  • Make the telegram bot detect if a bot is stopped or crashed

    Make the telegram bot detect if a bot is stopped or crashed

    First of all thank you for this great idea of telegram bot to control the bot it's brillant !

    It would be great to improve the /showinfo command by detecting a long bot inactivity (more than 10min without refreshing it's json file) with the status "stopped".

    A way to do it would be to add a metadata last_updated of type datetime or timestamp in the <botname>.json and to check if the last refresh was more than 10 minutes ago for example, then status would be "stopped" otherwise status "active" or the one when it's paused.

    My 2 cents :)

    feature request 
    opened by iThom 0
  • Support quote price less than 0.0001

    Support quote price less than 0.0001

    Add support prices less than 0.0001.

    See an example: SHIB-USD is unsuitable for trading, quote price is less than 0.0001!

    opened by korser1 1
  • Hacktoberfest

    Hacktoberfest

    opened by germainlefebvre4 0
  • Cross-currency Trading

    Cross-currency Trading

    I’m really loving this project! I got it setup with Coinbase Pro using four free worker dynos on Heroku to auto trade four portfolios with a single currency on each. The telegram integration is super useful as well.

    Here’s my question: is it possible to give the script a list of crypto currencies and have it trade between them based on which one is performing best at that time? What kind of overhead would that put on the bot? I’m not sure how much data it has to pull each time it does an evaluation on the market. From a trading perspective is that even something that’s a good idea? I’ve only been trading crypto for less than a year so I’m still learning. But I’m a Python developer so I find this very intriguing. Thanks again for this great project!

    opened by bydesign 0
Releases(4.2.1)
Owner
Michael Whittle
Solution Architect
Michael Whittle
FLEX (Federated Learning EXchange,FLEX) protocol is a set of standardized federal learning agreements designed by Tongdun AI Research Group。

Click to view Chinese version FLEX (Federated Learning Exchange) protocol is a set of standardized federal learning agreements designed by Tongdun AI

同盾科技 40 Sep 18, 2021
A cool, modern and responsive django admin application based on bootstrap 5

django-baton A cool, modern and responsive django admin application based on bootstrap 5 Documentation: readthedocs Live Demo Now you can try django-b

Otto srl 494 Oct 19, 2021
Python books free to read online or download

Python books free to read online or download

Paolo Amoroso 2.9k Oct 15, 2021
A modern Python package manager with PEP 582 support.

A modern Python package manager with PEP 582 support.

Python Development Master(PDM) 1.1k Oct 23, 2021
Collection of admin fields and decorators to help to create computed or custom fields more friendly and easy way

django-admin-easy Collection of admin fields, decorators and mixin to help to create computed or custom fields more friendly and easy way Installation

Ezequiel Bertti 328 Oct 15, 2021
django's default admin interface made customizable. popup windows replaced by modals. :mage: :zap:

django-admin-interface django-admin-interface is a modern responsive flat admin interface customizable by the admin itself. Features Beautiful default

Fabio Caccamo 947 Oct 22, 2021
Legacy django jet rebooted , supports only Django 3

Django JET Reboot Rebooting the original project : django-jet. Django Jet is modern template for Django admin interface with improved functionality. W

null 41 Oct 9, 2021
Modern responsive template for the Django admin interface with improved functionality. We are proud to announce completely new Jet. Please check out Live Demo

Django JET Modern template for Django admin interface with improved functionality Attention! NEW JET We are proud to announce completely new Jet. Plea

Geex Arts 3.2k Oct 18, 2021
"Log in as user" for the Django admin.

django-loginas About "Login as user" for the Django admin. loginas supports Python 3 only, as of version 0.4. If you're on 2, use 0.3.6. Installing dj

Stavros Korokithakis 282 Oct 10, 2021
A Django app for easily adding object tools in the Django admin

Django Object Actions If you've ever tried making admin object tools you may have thought, "why can't this be as easy as making Django Admin Actions?"

Chris Chang 406 Oct 15, 2021
Extendable, adaptable rewrite of django.contrib.admin

django-admin2 One of the most useful parts of django.contrib.admin is the ability to configure various views that touch and alter data. django-admin2

Jazzband 1.1k Oct 19, 2021
Extendable, adaptable rewrite of django.contrib.admin

django-admin2 One of the most useful parts of django.contrib.admin is the ability to configure various views that touch and alter data. django-admin2

Jazzband 1.1k Oct 15, 2021
Material Design for Django

Django Material Material design for Django. Django-Material 1.7.x compatible with Django 1.11/2.0/2.1/2.2/3.0/3.1 Django-Material 1.6.x compatible wit

Viewflow 2.3k Oct 17, 2021
A high-level app and dashboarding solution for Python

Panel provides tools for easily composing widgets, plots, tables, and other viewable objects and controls into custom analysis tools, apps, and dashboards.

HoloViz 1.4k Oct 23, 2021
Django app that enables staff to log in as other users using their own credentials.

Impostor Impostor is a Django application which allows staff members to login as a different user by using their own username and password. Login Logg

Andreu Vallbona Plazas 134 Oct 5, 2021
Material design for django administration

Django Material Administration Quick start pip install django-material-admin Add material.admin and material.admin.default to your INSTALLED_APPS sett

Anton 222 Oct 18, 2021
PyMMO is a Python-based MMO game framework using sockets and PyGame.

PyMMO is a Python framework/template of a MMO game built using PyGame on top of Python's built-in socket module.

Luis Souto Maior 36 Oct 17, 2021
Video Visual Relation Detection (VidVRD) tracklets generation. also for ACM MM Visual Relation Understanding Grand Challenge

VidVRD-tracklets This repository contains codes for Video Visual Relation Detection (VidVRD) tracklets generation based on MEGA and deepSORT. These tr

null 12 Oct 11, 2021
Django Smuggler is a pluggable application for Django Web Framework that helps you to import/export fixtures via the automatically-generated administration interface.

Django Smuggler Django Smuggler is a pluggable application for Django Web Framework to easily dump/load fixtures via the automatically-generated admin

semente 359 Sep 28, 2021