No project description provided
Project description
Backtest
Prepare data (example)
import pandas as pd
import numpy as np
df = pd.read_csv("something.csv")
df.index = pd.to_datetime(df.datetime)
df.index = df.index.tz_convert('Asia/Kolkata')
df.datetime = df.index
Data must have columns
datetime, open, high, low, close
Code
import pandas_ta as ta
import numpy as np
def cross(ema1, ema2):
return (ema1 > ema2) & (ema1.shift(1) < ema2.shift(1))
def compute(df, params):
df['ema_fast'] = ta.ema(df.close, params['fast_ema_len'])
df['ema_slow'] = ta.ema(df.close, params['slow_ema_len'])
df['ema_trend'] = ta.ema(df.close, params['trend_filter_ema_len'])
long_cond = (cross(df.ema_fast, df.ema_slow)) & (df.close > df.ema_trend)
short_cond = (cross(df.ema_slow, df.ema_fast)) & (df.close < df.ema_trend)
df['long'] = np.where(long_cond, 1, 0)
df['long_entries'] = np.where((df.long == 1) & (df.long.shift(1) != 1), 1, 0)
df['short'] = np.where(short_cond, -1, 0)
df['short_entries'] = np.where((df.short == -1) & (df.short.shift(1) != -1), -1, 0)
df['entries'] = df.long_entries + df.short_entries
return df
Compute df['entries'] with 1 for BUY and -1 for SELL.
Run
from mptradelib.vectorised_backtest import Backtest
b = Backtest(df, compute)
result = b.run(ema_fast=20, ema_slow=50, ema_trend=200, sl=1, tp=2)
sl and tp are in percentage and mandatory.
params passed in run can be accessed using params inside compute
Optimize
from mptradelib.vectorised_backtest import Backtest
optimization_params = {
ema_fast: range(1, 20, 1),
ema_slow: range(20, 50, 1),
ema_trend: range(100, 200, 1),
sl: range(0, 1),
tp: range(1, 10),
}
b = Backtest(df, compute)
result = b.optimize(runs=1, **optimization_params)
Live Trading
Code
import redis
from mptradelib.broker.session import FyersSession
from mptradelib.broker.ticker import LiveTicker
from mptradelib.broker.broker import HistoricalV2
from mptradelib.feed import Datas
from mptradelib.livetrading import BaseStrategy, LiveTrading
import threading
import pandas_ta as ta
import datetime as dt
class MyStrategy(BaseStrategy):
ema_fast = 20
ema_slow = 50
ema_trend = 200
sl = 1
tp = 2
def next(self, symbol, data):
ema_fast = ta.ema(data.df.close, self.ema_fast)
ema_slow = ta.ema(data.df.close, self.ema_slow)
ema_trend = ta.ema(data.df.close, self.ema_trend)
self.b.buy()
r = redis.Redis(
host='127.0.0.1',
port=6379,
decode_responses=True # <-- this will ensure that binary data is decoded
)
f = FyersSession()
feed = LiveTicker(f, r, "ticks")
end_date = dt.datetime.now()
start_date = end_date - dt.timedelta(days=7)
h = HistoricalV2(f)
hd = h.historical("MCX", "CRUDEOILM24MAYFUT", 1, start_date, end_date)
def producer():
feed.run()
if feed.is_live:
feed.subscribe(["MCX:CRUDEOILM24MAYFUT"])
def consumer():
datas = Datas(r)
datas.load("MCX:CRUDEOILM24MAYFUT", hd.to_dict('records'))
l = LiveTrading(MyStrategy)
l.set_datas(datas)
l.run(ema_fast=20, ema_slow=50, ema_trend=200, sl=1, tp=2)
t = threading.Thread(target=producer)
t.start()
consumer()
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
mptradelib-0.3.1.tar.gz
(15.8 kB
view details)
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 mptradelib-0.3.1.tar.gz.
File metadata
- Download URL: mptradelib-0.3.1.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.10.13 Darwin/23.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42a31410c8ffea66d74283e3152ae2477e392715ffd1332e5d7a1a68f390f595
|
|
| MD5 |
23976a9cd8be154b8e0b619f22343cbb
|
|
| BLAKE2b-256 |
95ddc088aa022f82d36754f501f02be77748ea7e4e74803e0c415b997e68a6d4
|
File details
Details for the file mptradelib-0.3.1-py3-none-any.whl.
File metadata
- Download URL: mptradelib-0.3.1-py3-none-any.whl
- Upload date:
- Size: 17.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.10.13 Darwin/23.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
322e477abefcd53c928fbfe9ba8b5ff1618ea85cf0f84ee7c9d51be4f1c14a57
|
|
| MD5 |
3841f92c888a051f873b524b2661d8f9
|
|
| BLAKE2b-256 |
72e1471bda5ad85eb409f3ea852bfd301d1c3dd2197f4b0073b7144f3a21c1d7
|