Skip to main content

gmocoin-backtest is a python library for backtest with gmocoin fx btc trade technical analysis on Python 3.7 and above.

Project description

gmocoin-backtest

PyPI License: MIT codecov Build Status PyPI - Python Version Downloads

gmocoin-backtest is a python library for backtest with gmocoin fx btc trade technical analysis on Python 3.7 and above.

backtest data from here

Installation

$ pip install gmocoin-backtest

Usage

basic run

from gmocoin_backtest import Backtest

class MyBacktest(Backtest):
    def strategy(self):
        fast_ma = self.sma(period=5)
        slow_ma = self.sma(period=25)
        # golden cross
        self.sell_exit = self.buy_entry = (fast_ma > slow_ma) & (
            fast_ma.shift() <= slow_ma.shift()
        )
        # dead cross
        self.buy_exit = self.sell_entry = (fast_ma < slow_ma) & (
            fast_ma.shift() >= slow_ma.shift()
        )

MyBacktest(from_date="2021-07-15", to_date="2021-08-15").run()

basic.png

advanced run

from gmocoin_backtest import Backtest
from pprint import pprint

class MyBacktest(Backtest):
    def strategy(self):
        rsi = self.rsi(period=10)
        ema = self.ema(period=20)
        atr = self.atr(period=20)
        lower = ema - atr
        upper = ema + atr
        self.buy_entry = (rsi < 30) & (self.df.C < lower)
        self.sell_entry = (rsi > 70) & (self.df.C > upper)
        self.sell_exit = ema > self.df.C
        self.buy_exit = ema < self.df.C

bt = MyBacktest(
    symbol="BTC", # (default=BTC_JPY)
    sqlite_file_name="backtest.sqlite3", # (default=backtest.sqlite3)
    from_date="2021-07-15", # (default="")
    to_date="2021-08-15", # (default="")
    size=0.1, # (default=0.001)
    interval="1H", # 5-60S(second), 1-60T(minute), 1-24H(hour) (default=1T)
    data_dir="data", # data directory (default=data)
)
pprint(bt.run(), sort_dicts=False)
{'total profit': -76320.2,
 'total trades': 25,
 'win rate': 56.0,
 'profit factor': 0.549,
 'maximum drawdown': 105907.1,
 'recovery factor': -0.721,
 'riskreward ratio': 0.431,
 'sharpe ratio': -0.226,
 'average return': -0.075,
 'stop loss': 0,
 'take profit': 0}

advanced.png

Supported indicators

  • Simple Moving Average 'sma'
  • Exponential Moving Average 'ema'
  • Moving Average Convergence Divergence 'macd'
  • Relative Strenght Index 'rsi'
  • Bollinger Bands 'bbands'
  • Stochastic Oscillator 'stoch'
  • Average True Range 'atr'

Strategy examples

MACD

class MyBacktest(Backtest):
    def strategy(self):
        macd, signal = self.macd(fast_period=12, slow_period=26, signal_period=9)
        self.sell_exit = self.buy_entry = (macd > signal) & (
            macd.shift() <= signal.shift()
        )
        self.buy_exit = self.sell_entry = (macd < signal) & (
            macd.shift() >= signal.shift()
        )

Bollinger Bands

class MyBacktest(Backtest):
    def strategy(self):
        upper, mid, lower = self.bbands(period=20, band=2)
        self.sell_exit = self.buy_entry = (upper > self.df.C) & (
            upper.shift() <= self.df.C.shift()
        )
        self.buy_exit = self.sell_entry = (lower < self.df.C) & (
            lower.shift() >= self.df.C.shift()
        )

Stochastic

class MyBacktest(Backtest):
    def strategy(self):
        k, d = self.stoch(k_period=5, d_period=3)
        self.sell_exit = self.buy_entry = (
            (k > 20) & (d > 20) & (k.shift() <= 20) & (d.shift() <= 20)
        )
        self.buy_exit = self.sell_entry = (
            (k < 80) & (d < 80) & (k.shift() >= 80) & (d.shift() >= 80)
        )

Moving average divergence rate

class MyBacktest(Backtest):
    def strategy(self):
        sma = self.sma(period=20)
        ratio = (self.df.C - sma) / sma * 100
        self.sell_exit = self.buy_entry = ratio > -5 & (ratio.shift() <= -5)
        self.buy_exit = self.sell_entry = ratio < 5 & (ratio.shift() >= 5)

Momentum

class MyBacktest(Backtest):
    def strategy(self):
        mom = self.df.C - self.df.C.shift(10)
        self.sell_exit = self.buy_entry = mom > 0 & (mom.shift() <= 0)
        self.buy_exit = self.sell_entry = mom < 0 & (mom.shift() >= 0)

Donchian Channels

class MyBacktest(Backtest):
    def strategy(self):
        high = self.df.H.rolling(20).max()
        low = self.df.L.rolling(20).min()
        self.sell_exit = self.buy_entry = (high > self.df.C) & (
            high.shift() <= self.df.C
        )
        self.buy_exit = self.sell_entry = (low < self.df.C) & (
            low.shift() >= self.df.C
        )

Relative Vigor Index

class MyBacktest(Backtest):
    def rvi(
        self, *, period: int = 10, price: str = "C"
    ) -> Tuple[pd.DataFrame, pd.DataFrame]:
        co = self.df.C - self.df.O
        n = (co + 2 * co.shift(1) + 2 * co.shift(2) + co.shift(3)) / 6
        hl = self.df.H - self.df.L
        d = (hl + 2 * hl.shift(1) + 2 * hl.shift(2) + hl.shift(3)) / 6
        rvi = n.rolling(period).mean() / d.rolling(period).mean()
        signal = (rvi + 2 * rvi.shift(1) + 2 * rvi.shift(2) + rvi.shift(3)) / 6
        return rvi, signal

    def strategy(self):
        rvi, signal = self.rvi(period=5)
        self.sell_exit = self.buy_entry = (rvi > signal) & (
            rvi.shift() <= signal.shift()
        )
        self.buy_exit = self.sell_entry = (rvi < signal) & (
            rvi.shift() >= signal.shift()
        )

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gmocoin-backtest-0.1.2.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

gmocoin_backtest-0.1.2-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file gmocoin-backtest-0.1.2.tar.gz.

File metadata

  • Download URL: gmocoin-backtest-0.1.2.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for gmocoin-backtest-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a5329d0fd305033621f51f43e8849b81880c7c2ebc5a022715dd4e2e6a58d999
MD5 3d84e587915290f193dda867ddc11c07
BLAKE2b-256 e22c904835417f4cbdea745be13a160893f6a336b815e533ef633b5d4fcd2d57

See more details on using hashes here.

File details

Details for the file gmocoin_backtest-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: gmocoin_backtest-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for gmocoin_backtest-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8fe35fab424a00376d95f33ce6f62358d32675aaaf667aff5e237cd2241d09ab
MD5 a49acad591ffd6d73c8a14069cbaa9c3
BLAKE2b-256 cb62ef41f528c3070a2a64076b5219f15ed6d02fdf655ab6a2f75268167ed8d5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page