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
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
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.1.0.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.1.0.tar.gz.
File metadata
- Download URL: mptradelib-0.1.0.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 |
46a8a56a566ff6dc99dcc810794cbe50435a4a22ae86a7e57b515fb7d6939ab6
|
|
| MD5 |
557bb176d2a1cf4e35224910c80ea22e
|
|
| BLAKE2b-256 |
9d5c3ec014a20cc8e61fa57571301658d379deac456a24bf66b063f8327fe010
|
File details
Details for the file mptradelib-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mptradelib-0.1.0-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 |
560d451229e2f262fad20e5529a5c2255fbfba1dd9284a0a27b781a40052a54a
|
|
| MD5 |
d0d1b63a6a68bada2e6f5a09490e8ac4
|
|
| BLAKE2b-256 |
85203bd686aa13bdee3e27f1838171b130bfceb6dcfe510e47206e4271dffa55
|