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()
)
Metadata
Release files for gmocoin-backtest 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| gmocoin-backtest-0.1.2.tar.gz | 9.2 kB | Without provenance | Details for gmocoin-backtest-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| gmocoin_backtest-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for gmocoin_backtest-0.1.2-py3-none-any.whl |
Total release size: 17.4 kB
Release files / gmocoin-backtest-0.1.2.tar.gz
| Download URL | gmocoin-backtest-0.1.2.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a5329d0fd305033621f51f43e8849b81880c7c2ebc5a022715dd4e2e6a58d999
|
|
BLAKE2b-256 checksum How to use checksums |
e22c904835417f4cbdea745be13a160893f6a336b815e533ef633b5d4fcd2d57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / gmocoin_backtest-0.1.2-py3-none-any.whl
| Download URL | gmocoin_backtest-0.1.2-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8fe35fab424a00376d95f33ce6f62358d32675aaaf667aff5e237cd2241d09ab
|
|
BLAKE2b-256 checksum How to use checksums |
cb62ef41f528c3070a2a64076b5219f15ed6d02fdf655ab6a2f75268167ed8d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Security for gmocoin-backtest 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.