stable/docs/bot-optimization.md
2018-01-02 22:50:54 -08:00

5.6 KiB

Bot Optimization

This page explains where to customize your strategies, validate their performance by using Backtesting, and tuning them by finding the optimal parameters with Hyperopt.

Table of Contents

Change your strategy

The bot is using buy and sell strategies to buy and sell your trades. Both are customizable.

Buy strategy

The default buy strategy is located in the file freqtrade/analyze.py. Edit the function populate_buy_trend() to update your buy strategy.

Sample:

def populate_buy_trend(dataframe: DataFrame) -> DataFrame:
    """
    Based on TA indicators, populates the buy signal for the given dataframe
    :param dataframe: DataFrame
    :return: DataFrame with buy column
    """
    dataframe.loc[
        (
            (dataframe['rsi'] < 35) &
            (dataframe['fastd'] < 35) &
            (dataframe['adx'] > 30) &
            (dataframe['plus_di'] > 0.5)
        ) |
        (
            (dataframe['adx'] > 65) &
            (dataframe['plus_di'] > 0.5)
        ),
        'buy'] = 1

    return dataframe

Sell strategy

The default buy strategy is located in the file freqtrade/analyze.py Edit the function populate_sell_trend() to update your buy strategy.

Sample:

def populate_sell_trend(dataframe: DataFrame) -> DataFrame:
    """
    Based on TA indicators, populates the sell signal for the given dataframe
    :param dataframe: DataFrame
    :return: DataFrame with buy column
    """
    dataframe.loc[
        (
            (
                (crossed_above(dataframe['rsi'], 70)) |
                (crossed_above(dataframe['fastd'], 70))
            ) &
            (dataframe['adx'] > 10) &
            (dataframe['minus_di'] > 0)
        ) |
        (
            (dataframe['adx'] > 70) &
            (dataframe['minus_di'] > 0.5)
        ),
        'sell'] = 1
    return dataframe

Add more Indicator

As you have seen, buy and sell strategies need indicators. You can see the indicators in the file freqtrade/analyze.py. Of course you can add more indicators by extending the list contained in the function populate_indicators().

Sample:

def populate_indicators(dataframe: DataFrame) -> DataFrame:
    """
    Adds several different TA indicators to the given DataFrame
    """
    dataframe['sar'] = ta.SAR(dataframe)
    dataframe['adx'] = ta.ADX(dataframe)
    stoch = ta.STOCHF(dataframe)
    dataframe['fastd'] = stoch['fastd']
    dataframe['fastk'] = stoch['fastk']
    dataframe['blower'] = ta.BBANDS(dataframe, nbdevup=2, nbdevdn=2)['lowerband']
    dataframe['sma'] = ta.SMA(dataframe, timeperiod=40)
    dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)
    dataframe['mfi'] = ta.MFI(dataframe)
    dataframe['rsi'] = ta.RSI(dataframe)
    dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5)
    dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10)
    dataframe['ema50'] = ta.EMA(dataframe, timeperiod=50)
    dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)
    dataframe['ao'] = awesome_oscillator(dataframe)
    macd = ta.MACD(dataframe)
    dataframe['macd'] = macd['macd']
    dataframe['macdsignal'] = macd['macdsignal']
    dataframe['macdhist'] = macd['macdhist']
    hilbert = ta.HT_SINE(dataframe)
    dataframe['htsine'] = hilbert['sine']
    dataframe['htleadsine'] = hilbert['leadsine']
    dataframe['plus_dm'] = ta.PLUS_DM(dataframe)
    dataframe['plus_di'] = ta.PLUS_DI(dataframe)
    dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
    dataframe['minus_di'] = ta.MINUS_DI(dataframe)
    return dataframe

Test your strategy with Backtesting

Now you have good Buy and Sell strategies, you want to test it against real data. This is what we call backtesting.

Backtesting will use the crypto-currencies (pair) tickers located in /freqtrade/tests/testdata. If the 5 min and 1 min ticker for the crypto-currencies to test is not already in the testdata folder, backtesting will download them automatically. Testdata files will not be updated until your specify it.

Run a backtesting against the currencies listed in your config file

With 5 min tickers (Per default)

python3 ./freqtrade/main.py backtesting --realistic-simulation

With 1 min tickers

python3 ./freqtrade/main.py backtesting --realistic-simulation --ticker-interval 1

Reload your testdata files

python3 ./freqtrade/main.py backtesting --realistic-simulation --refresh-pairs-cached

With live data (do not alter your testdata files)

python3 ./freqtrade/main.py backtesting --realistic-simulation --live

Find optimal parameters with Hyperopt

To be completed, please feel free to complete this section.

Show your buy strategy on a graph

To be completed, please feel free to complete this section.

Next step

Now you have a perfect bot and want to control it from Telegram. Your next step is to learn Telegram usage.