Example #1
0
    def ma(data: list, data_properties: dict, ma_type: int = 0) -> dict:
        """
        Strategy for moving averages.
        :param data: list[numeric]
        :param data_properties: dict
        :param ma_type: Moving Average Type
                SMA = 0 (Default case)
                EMA = 1
        :return: dict
                Result from strategy_builder
        """
        close = data_parser.get_close(data)
        if ma_type == 1:
            ma50 = indicators.ema(close, period=50)
            ma200 = indicators.ema(close, period=200)
        else:
            ma50 = indicators.sma(close, period=50)
            ma200 = indicators.sma(close, period=200)
        buy = Condition(data1=ma50, data2=ma200, operation=Operation.CROSSOVER)
        sell = Condition(data1=ma50, data2=ma200, operation=Operation.CROSSUNDER)
        chart_1 = ChartElement(data=ma50, label="ma50", chart_type=ChartType.LINE, plot=ChartAxis.SAME_AXIS)
        chart_2 = ChartElement(data=ma200, label="ma200", chart_type=ChartType.LINE, plot=ChartAxis.SAME_AXIS)
        charts = [chart_1, chart_2]
        result = strategy_builder(data_properties=data_properties, data_list=data, strategy=BUY, buy=buy, sell=sell,
                                  charts=charts)

        return result
Example #2
0
    def rsi(data: list, data_properties: dict) -> dict:
        """
        Strategy for Relative Strength Index.
        :param data: list[numeric]
        :param data_properties: dict
        :return: dict
                Result from strategy_builder
        """
        close = data_parser.get_close(data)
        rsi = indicators.rsi(close, period=5)
        buy = Condition(data1=rsi, data2=35, operation=Operation.LESS_THAN)
        # sell = Condition(data1=rsi, data2=80, operation=Operation.GREATER_THAN)
        sell_01 = Condition(data1=rsi, data2=28, operation=Operation.LESS_THAN)
        chart_1 = ChartElement(data=rsi, label="rsi", chart_type=ChartType.LINE, plot=ChartAxis.DIFFERENT_AXIS)
        charts = [chart_1]
        result = strategy_builder(data_properties=data_properties, data_list=data, strategy=BUY, buy=buy, target=.5,
                                  sl=sell_01,
                                  charts=charts)

        return result
Example #3
0
    def macd(data: list, data_properties: dict) -> dict:
        """
        Strategy for Moving Average Convergence/Diversion.
        :param data: list[numeric]
        :param data_properties: dict
        :return: dict
                Result from strategy_builder
        """
        close = data_parser.get_close(data)
        macd = indicators.macd(close)
        macd_series = macd[Keys.macd_value]
        macd_signal = macd[Keys.macdsignal]
        buy = Condition(data1=macd_series, data2=macd_signal, operation=Operation.CROSSOVER)
        sell = Condition(data1=macd_series, data2=macd_signal, operation=Operation.CROSSUNDER)
        chart_1 = ChartElement(data=macd, label="macd", chart_type=ChartType.LINE, plot=ChartAxis.DIFFERENT_AXIS)
        charts = [chart_1]
        result = strategy_builder(data_properties=data_properties, data_list=data, strategy=BUY, buy=buy, sell=sell,
                                  charts=charts)

        return result
Example #4
0
    def pivot(data: list, data_properties: dict) -> dict:
        """
        Strategy for Pivot points.
        :param data: list[numeric]
        :param data_properties: dict
        :return: dict
                Result from strategy_builder
        """
        close = data_parser.get_close(data)
        pivot = indicators.pivot(data)
        pp = pivot[Keys.pp]
        r1 = pivot[Keys.r1]
        s1 = pivot[Keys.s1]
        buy = Condition(data1=close, data2=pp, operation=Operation.GREATER_THAN)
        sell = Condition(data1=close, data2=pp, operation=Operation.LESS_THAN)
        chart_1 = ChartElement(data=pivot, label="pivot", chart_type=ChartType.JUMPLINE, plot=ChartAxis.SAME_AXIS)
        charts = [chart_1]
        result = strategy_builder(data_properties=data_properties, data_list=data, strategy=BUY, buy=buy, sell=sell,
                                  charts=charts, target=r1, sl=s1, backtest_chart=ChartType.COLUMN)

        return result
Example #5
0
    def bbands(data: list, data_properties: dict) -> dict:
        """
        Strategy for Bollinger Bands.
        :param data: list[numeric]
        :param data_properties: dict
        :return: dict
                Result from strategy_builder
        """
        close = data_parser.get_close(data)
        bbands = indicators.bollinger_bands(close, timeperiod=20)
        upperband = bbands[Keys.upperband]
        middleband = bbands[Keys.middleband]
        lowerband = bbands[Keys.lowerband]
        buy = Condition(data1=close, data2=middleband, operation=Operation.LESS_THAN)
        sell = Condition(data1=close, data2=middleband, operation=Operation.GREATER_THAN)
        chart_1 = ChartElement(data=bbands, label="bbands", chart_type=ChartType.LINE, plot=ChartAxis.SAME_AXIS)
        charts = [chart_1]
        result = strategy_builder(data_properties=data_properties, data_list=data, strategy=SELL, buy=buy, sell=sell,
                                  charts=charts, target=lowerband, sl=upperband)

        return result
Example #6
0
    def stoch(data: list, data_properties: dict) -> dict:
        """
        Strategy for Stochastic Oscillator.
        :param data: list[numeric]
        :param data_properties: dict
        :return: dict
                Result from strategy_builder
        """
        high = data_parser.get_high(data)
        low = data_parser.get_low(data)
        close = data_parser.get_close(data)
        stoch = indicators.stoch(high, low, close)
        fastk = stoch[Keys.fastk]
        fastd = stoch[Keys.fastd]
        buy = Condition(data1=fastk, data2=fastd, operation=Operation.CROSSOVER)
        sell = Condition(data1=fastk, data2=fastd, operation=Operation.CROSSUNDER)
        charts = [
            ChartElement(data=stoch, label="STOCH", chart_type=ChartType.LINE, plot=ChartAxis.DIFFERENT_AXIS)]
        result = strategy_builder(data_properties=data_properties, data_list=data, strategy=BUY, buy=buy, sell=sell,
                                  charts=charts)

        return result
Example #7
0
def cum_pl_short():
    """
    Chart for back test reports of Cumulative profit and loss
    :return: None
    """
    data_prop, data = data_parser.get_data(start_date="2000-01-18")
    high = data_parser.get_high(data)
    low = data_parser.get_low(data)
    close = data_parser.get_close(data)
    sma = indicators.sma(close)
    ema = indicators.ema(close)
    macd = indicators.macd(close)
    rsi = indicators.rsi(close)
    stoch = indicators.stoch(high, low, close)
    bbands = indicators.bollinger_bands(close)
    pivot = indicators.pivot(data)
    chart_1 = ChartElement(data=sma,
                           label="sma",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.YELLOW)
    chart_2 = ChartElement(data=ema,
                           label="ema",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.PINK)
    chart_3 = ChartElement(data=stoch,
                           label="stoch",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.DIFFERENT_AXIS,
                           color=ChartColor.PURPLE)
    chart_4 = ChartElement(data=bbands,
                           label="bbands",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.BLUE)
    chart_5 = ChartElement(data=pivot,
                           label="pivot",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.GREEN)
    chart_6 = ChartElement(data=rsi,
                           label="rsi",
                           chart_type=ChartType.LINE,
                           plot=1,
                           color=ChartColor.RED)
    chart_7 = ChartElement(data=macd,
                           label="macd",
                           chart_type=ChartType.LINE,
                           plot=2,
                           color="magenta")
    charts = [chart_1, chart_2, chart_3, chart_6]
    buy = Condition(data1=sma, data2=ema, operation=Operation.CROSSOVER)
    sell = Condition(data1=rsi, data2=70, operation=Operation.GREATER_THAN)
    result = strategy.strategy_builder(data_properties=data_prop,
                                       data_list=data,
                                       charts=charts,
                                       buy=buy,
                                       sell=sell,
                                       target=1.0,
                                       sl=0.5,
                                       strategy=strategy.BUY)

    cum_short = result['short']['DATE_CUM_PL']
    # print(cum_short)

    return render_template("cum_pl_short.html", shortData=cum_short)
Example #8
0
def chart():
    """
    For plotting normal candle chart or along with indicators
    :return: None
    """
    # prop, data = data_parser.get_data(start_date="2017-08-18")
    # result = Strategies.rsi(data, data_properties=prop)
    # data_properties = result['data_properties']
    # main_chart = []
    # for key, values in data_properties.items():
    #     main_chart.append([key, values])
    # params = result['params']
    # data = result['data']

    # print(params,data_with_indicators)
    # final_data = data_with_indicators[1:]
    # print(final_data)

    data_prop, data = data_parser.get_data(start_date="2007-01-18")
    high = data_parser.get_high(data)
    low = data_parser.get_low(data)
    close = data_parser.get_close(data)
    sma = indicators.sma(close)
    ema = indicators.ema(close)
    macd = indicators.macd(close)
    rsi = indicators.rsi(close)
    stoch = indicators.stoch(high, low, close)
    bbands = indicators.bollinger_bands(close)
    pivot = indicators.pivot(data)
    chart_1 = ChartElement(data=sma,
                           label="sma",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.YELLOW)
    chart_2 = ChartElement(data=ema,
                           label="ema",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.PINK)
    chart_3 = ChartElement(data=stoch,
                           label="stoch",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.DIFFERENT_AXIS,
                           color=ChartColor.PURPLE)
    chart_4 = ChartElement(data=bbands,
                           label="bbands",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.BLUE)
    chart_5 = ChartElement(data=pivot,
                           label="pivot",
                           chart_type=ChartType.LINE,
                           plot=ChartAxis.SAME_AXIS,
                           color=ChartColor.GREEN)
    chart_6 = ChartElement(data=rsi,
                           label="rsi",
                           chart_type=ChartType.LINE,
                           plot=1,
                           color=ChartColor.RED)
    chart_7 = ChartElement(data=macd,
                           label="macd",
                           chart_type=ChartType.LINE,
                           plot=2,
                           color="magenta")
    charts = [chart_4, chart_6]
    buy = Condition(data1=sma, data2=ema, operation=Operation.CROSSOVER)
    sell = Condition(data1=rsi, data2=70, operation=Operation.GREATER_THAN)
    result = strategy.strategy_builder(data_properties=data_prop,
                                       data_list=data,
                                       charts=charts,
                                       buy=buy,
                                       sell=sell,
                                       target=1.0,
                                       sl=0.5,
                                       strategy=strategy.BUY)
    # strategy.show_back_testing_reports(result, auto_open=True)
    data_properties = result['data_properties']
    main_chart = []
    for key, values in data_properties.items():
        main_chart.append([key, values])
    params = result['params']
    # print(params)
    data_list = result['data']
    return render_template("chart.html",
                           chartData=data_list,
                           chart_params=params,
                           main_chart_properties=main_chart)