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
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()
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}
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a5329d0fd305033621f51f43e8849b81880c7c2ebc5a022715dd4e2e6a58d999
|
|
| MD5 |
3d84e587915290f193dda867ddc11c07
|
|
| BLAKE2b-256 |
e22c904835417f4cbdea745be13a160893f6a336b815e533ef633b5d4fcd2d57
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fe35fab424a00376d95f33ce6f62358d32675aaaf667aff5e237cd2241d09ab
|
|
| MD5 |
a49acad591ffd6d73c8a14069cbaa9c3
|
|
| BLAKE2b-256 |
cb62ef41f528c3070a2a64076b5219f15ed6d02fdf655ab6a2f75268167ed8d5
|