some time is hard to back test your strategy with back test library i made easy . with 3 lines of code you can back test and see result of your strategy.
https://github.com/xibalbas/signal_backtester/
support the project with your stars :))
what is Signal Backtester?
it is a tiny backtester Based on Backtesting Lib .
easiest way to backtest your generated signal. just need a csv file contain candleStick informations. OHLCV + signal 
why??
some time writing good backtest for a strategy is not too easy . and you may have some challenge with backtest libraries.
so i decided to make a seprate repo for backtesting in easiest way.
what you need is a csv file contain signal column . for buy signal you should put 2, and for sell signal you put 1.
and good news is you did not need to write strategy for how trade we wrote it before you just choose yours and finish you did it :))
see Strategy guide.
First
prepare your data and prepare your signal .
you can write your strategy and generate signal like this 
here is an example of generating signal for EMA cross strategy and show you how generate your signal .
our signal generate as new column signal in our data frame .
notice: your data set column should contain Date,Open, High, Low, Close, Volume,signal
import talib  # notice you can install talib manually
import pandas as pd
def cross_EMA_signals(df, fast_period, slow_period):
    """_summary_
    Args:
        df (_type_): _description_
        fast_period (_type_): _description_
        slow_period (_type_): _description_
    """
    signal = [0] * len(df)
    df["fast"] = talib.EMA(df.Close, timeperiod=fast_period)
    df["slow"] = talib.EMA(df.Close, timeperiod=slow_period)
    for idx in range(len(df)):
        if idx > slow_period:
            if (
                df.iloc[idx - 1].fast < df.iloc[idx - 1].slow
                and df.iloc[idx].fast > df.iloc[idx].slow
            ):
                # buy signal
                signal[idx] = 2
            if (
                df.iloc[idx - 1].fast > df.iloc[idx - 1].slow
                and df.iloc[idx].fast < df.iloc[idx].slow
            ):
                # sell signal
                signal[idx] = 1
    df["signal"] = signal
    df.to_csv("./final_dataset.csv")
df = pd.read_csv("./data.csv")
if __name__ == "__main__":
    cross_EMA_signals(df, 15, 30)
second (Backtest in 3 line)
installation
pip install signal-backtester
make a backtest
from signal_backtester import SignalBacktester
dataset_address = "./final_dataset.csv"
backtest = SignalBacktester(
    dataset=dataset_address,
    strategy="two_side_sl_tp_reversed",
    cash=100000,
    commission=0.0005,
    percent_of_portfolio=99,
    stop_loss=1,
    take_profit=2,
    trailing_stop=3,
    output_path="./result",  # path of result files
)
backtest.run()
and simply get result of Backtesting lib:
final_report.html
final_report.csv
order_report.csv
 
 
              



 
    
Top comments (0)