Ejemplo n.º 1
0
def wma20_macd_system(price_data, wma_period1=20,period="", trade_type="Both_leg", underlying_instrument_data=None):
    wma_period1 = wma_period1
    period_wma = str(wma_period1) + "_wma"

    if period=="":
        price_period=price_data
    else:
        price_period=series_resampling.price_series_periodic(price_data,period)

    wma_1.wma(price_period, wma_period1)

    macd_1.macd(price_period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["Signal"] = np.where((price_signal_period[period_wma] <= price_signal_period["Close"]) &
                                      (price_signal_period["macd_diff"] > 0), 1,
                                      np.where((price_signal_period[period_wma] > price_signal_period["Close"]) &
                                               (price_signal_period["macd_diff"] < 0), -1, 0))
    price_signal["Signal"] = price_signal_period["Signal"].resample("D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 2
0
def bband_system(price_data, period1=10, period="", trade_type="Both_leg", underlying_instrument_data=None):
    period_sma = str(period1) + "_SMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(price_data, period)

    bollinger_percentage.bollinger_percentage(price_period, period1)

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["Signal"] = np.where((price_signal_period["Bollinger percentage"] > 1), 1,
                                             np.where((price_signal_period["Bollinger percentage"] < -1), -1,
                                             np.nan))
    price_signal_period["Signal"].fillna(method="ffill",inplace=True)

    price_signal["Signal"] = price_signal_period["Signal"].resample("D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
def periodic_reversal_system(price_data,
                             period_1=14,
                             period="",
                             trade_type="Both_leg",
                             underlying_instrument_data=None):

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal = price_data
    price_signal_period = price_period

    price_signal_period["Signal"] = signal_generation(
        price_signal_period.index, period_1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 4
0
def duration_system(price_data,
                    period=100,
                    period="",
                    trade_type="Both_leg",
                    underlying_instrument_data=None):
    period_duration = str(period) + "_duration"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["Signal"] = np.where(
        (price_signal_period["Close"] > price_signal_period[period_sma]), 1,
        -1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 5
0
def technical_setups_system(price_data,indicator="bullish_engulfing", period1=20, period="",trade_type="Both_leg", underlying_instrument_data=None):

    if period=="":
        price_period=price_data
    else:
        price_period=series_resampling.price_series_periodic(price_data,period)

    method_name = indicator
    method = eval(method_name)

    strategy_func=getattr(method,indicator)

    strategy_func(price_period)

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["Signal"] = np.where(price_signal_period["Indicator"].rolling(period1).sum()>0,1,0)
    price_signal_period["Signal"]=price_signal_period["Signal"].shift()

    price_signal["Signal"] = price_signal_period["Signal"].resample("D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 6
0
def oscillator_system(price_data,
                      period="",
                      trade_type="Both_leg",
                      underlying_instrument_data=None):
    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    oscillator.oscillator(price_period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["Signal"] = price_signal_period["Oscillator"].apply(
        signal_generator)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"] = price_signal["Signal"].shift(1)
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)
    price_signal["Trades"].fillna(0, inplace=True)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Open"], underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Open")

    return trades, price_signal
Ejemplo n.º 7
0
def vortex_system(price_data, period="", trade_type="Both_leg", underlying_instrument_data=None):

    if period=="":
        price_period=price_data
    else:
        price_period=series_resampling.price_series_periodic(price_data,period)

    price_signal = price_data
    price_signal_period = price_period

    vortex.vortex(price_period)

    price_signal_period["Signal"] = np.where((price_signal_period["Vortex"]>0), 1, -1)

    price_signal["Signal"] = price_signal_period["Signal"].resample("D").ffill()
    price_signal["Signal"] = price_signal["Signal"].shift(1)
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)
    price_signal["Trades"].fillna(0,inplace=True)


    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(price_signal, price_signal["Open"],
                                                                     underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Open")

    return trades,price_signal
Ejemplo n.º 8
0
def pattern_system(price_data,
                   atr_period=44,
                   daily_range_period=4,
                   period="",
                   trade_type="Both_leg",
                   underlying_instrument_data=None):
    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["ATR"] = atr.atr(price_signal_period, atr_period)
    price_signal_period["4 DR"] = price_signal_period["Close"].rolling(
        daily_range_period).max() - price_signal_period["Close"].rolling(
            daily_range_period).min()

    price_signal_period["Trading Window"] = np.where(
        (price_signal_period["4 DR"] < price_signal_period["ATR"]), 1, 0)

    price_signal_period["Trading Window"] = price_signal_period[
        "Trading Window"].shift(1)
    price_signal_period["Buy Level"] = price_signal_period["Open"] + 0.62 * (
        price_signal_period["High"].shift(1) -
        price_signal_period["Low"].shift(1))

    price_signal_period["Sell Level"] = price_signal_period["Open"] - 0.62 * (
        price_signal_period["High"].shift(1) -
        price_signal_period["Low"].shift(1))

    Signal = price_signal_period.apply(lambda x: signal_generation(*x), axis=1)

    Signal = Signal.apply(pd.Series)
    Signal.columns = ["Signal", "Trade_Level"]
    price_signal_period = pd.concat([price_signal_period, Signal], axis=1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trade_Level"] = price_signal_period["Trade_Level"]
    price_signal["Trade_Level"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Trade_Level"],
            underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Trade_Level")

    return trades, price_signal
def regression_crossover_system(price_data,
                                period1=10,
                                period2=5,
                                period3=50,
                                period="",
                                trade_type="Both_leg",
                                underlying_instrument_data=None):
    period_sma = str(period1) + "_SMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    sma.sma(price_period, period1)

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["row_number"] = np.arange(1,
                                                  len(price_signal_period) + 1)
    price_signal_period["d5_LS"] = rolling_apply(
        get_slope, period2, price_signal_period["Close"],
        price_signal_period["row_number"])
    price_signal_period["d5_LS"].fillna(0, inplace=True)

    price_signal_period["d50_LR"] = rolling_apply(
        regress_predict, period3, price_signal_period["row_number"],
        price_signal_period["d5_LS"])
    price_signal_period["d50_LR"].fillna(0)

    price_signal_period["Signal"] = np.where(
        (price_signal_period["Close"] > price_signal_period[period_sma]) &
        (price_signal_period["d5_LS"] > price_signal_period["d50_LR"]), 1,
        np.where(
            (price_signal_period["Close"] < price_signal_period[period_sma]) &
            (price_signal_period["d5_LS"] < price_signal_period["d50_LR"]), -1,
            0))

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
def body_outside_band_system(price_data,
                             period1=20,
                             bandwidth=1,
                             profit_target=6,
                             trailing_stop=2,
                             period="",
                             trade_type="Both_leg",
                             underlying_instrument_data=None):
    trailing_stop = -trailing_stop / 100
    profit_target = profit_target / 100
    bandwidth = bandwidth / 100
    period_ema = str(period1) + "_EMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    ema.ema(price_signal_period, period1)
    price_signal_period["Upper_band"] = price_signal_period[period_ema] * (
        1 + (bandwidth))
    price_signal_period["Lower_band"] = price_signal_period[period_ema] * (
        1 - (bandwidth))

    price_signal_period["Trade_signal"] = np.where(
        price_signal_period["Low"] > price_signal_period["Upper_band"].shift(),
        1,
        np.where(
            price_signal_period["High"] <
            price_signal_period["Lower_band"].shift(), -1, 0))

    price_signal_period["Signal"] = 0

    signal_generation(price_signal_period, profit_target, trailing_stop)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Close"], underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 11
0
def rsi2sma50sl2_system(price_data,
                        period_sma=50,
                        period_rsi=2,
                        stop_level=2,
                        period="",
                        trade_type="Both_leg",
                        underlying_instrument_data=None):

    stop_level = stop_level / 100

    period_sma_str = str(period_sma) + "_SMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    sma.sma(price_period, period_sma)
    rsi.rsi(price_period, period_rsi)

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["Signal_sma"] = np.where(
        (price_signal_period[period_sma_str] <= price_signal_period["Close"]),
        1, -1)

    price_signal_period["Signal_rsi"] = np.where(
        (price_signal_period["rsi"] > 90), -1,
        np.where((price_signal_period["rsi"] < 10), 1, 0))

    price_signal_period["Signal"] = price_signal_period.apply(
        lambda x: signal_generation(*x), axis=1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Signal"] = price_signal[["Close", "Signal"]].apply(
        lambda x: stop_loss(*x, stop_level), axis=1)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 12
0
def breakout_system(price_data,
                    period="",
                    trade_type="Both_leg",
                    underlying_instrument_data=None):
    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["Buy Level"] = price_signal_period["Open"] + (
        price_signal_period["Close"].shift(1) -
        price_signal_period["Low"].shift(1))
    price_signal_period["Sell Level"] = price_signal_period["Open"] - (
        price_signal_period["High"].shift(1) -
        price_signal_period["Close"].shift(1))

    price_signal_period["Position window today"] = np.where(
        price_signal_period["Open"] > price_signal_period["Close"].shift(1), 1,
        np.where(
            price_signal_period["Open"] <
            price_signal_period["Close"].shift(1), -1, 0))

    price_signal_period["Position window yesterday"] = price_signal_period[
        "Position window today"].shift(1)

    Signal = price_signal_period.apply(lambda x: signal_generation(*x), axis=1)

    Signal = Signal.apply(pd.Series)
    Signal.columns = ["Signal", "Trade_Level"]
    price_signal_period = pd.concat([price_signal_period, Signal], axis=1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trade_Level"] = price_signal_period["Trade_Level"]
    price_signal["Trade_Level"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Trade_Level"],
            underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Trade_Level")

    return trades, price_signal
Ejemplo n.º 13
0
def seasonal_short_system(price_data,
                          entry_date=16,
                          exit_date=22,
                          period="",
                          trade_type="Both_leg",
                          underlying_instrument_data=None):

    period = ""

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["Signal"] = -1

    if entry_date < exit_date:
        price_signal_period["Signal"][
            price_signal_period.index.day > exit_date] = 0
        price_signal_period["Signal"][
            price_signal_period.index.day <= entry_date] = 0
    else:
        price_signal_period["Signal"][
            price_signal_period.index.day > exit_date] = 0
        price_signal_period["Signal"][
            price_signal_period.index.day > entry_date] = -1

    price_signal_period.loc[price_signal_period["Signal"].shift(-1) == -1,
                            "Signal"] = -1

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"] = price_signal["Signal"].shift(1)
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)
    price_signal["Trades"].fillna(0, inplace=True)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Close"], underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Close")

    return trades, price_signal
Ejemplo n.º 14
0
def expanding_bollinger_band_system(price_data,
                                    period1=10,
                                    period="",
                                    trade_type="Both_leg",
                                    underlying_instrument_data=None):
    period_sma = str(period1) + "_SMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    sma.sma(price_period, period1)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["std_level"] = price_signal_period["Close"].rolling(
        period1).std()
    price_signal_period["std_sma"] = price_signal_period["std_level"].rolling(
        period1 * 2).mean()

    price_signal_period["expanding_bollinger"] = np.where(
        (price_signal_period["std_level"] > price_signal_period["std_sma"]), 1,
        0)

    price_signal_period["sma_signal"] = np.where(
        (price_signal_period["Close"] > price_signal_period[period_sma]), 1,
        -1)

    price_signal_period["Signal"] = price_signal_period[
        "expanding_bollinger"] * price_signal_period["sma_signal"]

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
def seasonal_short_sma_system(price_data,
                              period_sma=10,
                              entry_date=16,
                              exit_date=22,
                              period="",
                              trade_type="Both_leg",
                              underlying_instrument_data=None):

    period = ""

    period_str = str(period_sma) + "_SMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    sma.sma(price_signal_period, period_sma)

    price_signal_period["sma_signal"] = np.where(
        price_signal_period["Close"] < price_signal_period[period_str], -1, 0)

    price_signal_period["Signal"] = np.nan
    price_signal_period["Signal"] = signal_generation(price_signal_period,
                                                      entry_date, exit_date)
    price_signal_period["Signal"].fillna(method="ffill", inplace=True)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)
    price_signal["Trades"].fillna(0, inplace=True)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Close"], underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Close")

    return trades, price_signal
Ejemplo n.º 16
0
def rsi50_55sma_system(price_data,
                       period_sma=55,
                       period_rsi=14,
                       period="",
                       trade_type="Both_leg",
                       underlying_instrument_data=None):

    period_sma_str = str(period_sma) + "_SMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    sma.sma(price_period, period_sma)
    rsi.rsi(price_period, period_rsi)

    price_signal_period = price_period

    price_signal = price_data

    # price_signal_period[period_sma] = sma_1

    price_signal_period["Signal"] = np.where(
        (price_signal_period[period_sma_str] <= price_signal_period["Close"]) &
        (price_signal_period["rsi"] > 50), 1,
        np.where(
            (price_signal_period[period_sma_str] >
             price_signal_period["Close"]) & (price_signal_period["rsi"] < 50),
            -1, 0))

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 17
0
def roc_system(price_data,
               period1=10,
               period2=25,
               period3=40,
               period="",
               trade_type="Both_leg",
               underlying_instrument_data=None):

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal = price_data
    price_signal_period = price_period

    roc.roc(price_period, period1)
    roc.roc(price_period, period2)
    roc.roc(price_period, period3)

    price_signal_period["roc_average"] = price_period[[
        str(period1) + "_roc",
        str(period2) + "_roc",
        str(period3) + "_roc"
    ]].mean(axis=1)

    price_signal_period["Signal"] = np.where(
        (price_signal_period["roc_average"] > 0), 1, -1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)
    price_signal["Trades"].fillna(0, inplace=True)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, None, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 18
0
def rsi2_system(price_data,
                period_rsi=2,
                period="",
                trade_type="Both_leg",
                underlying_instrument_data=None):

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    rsi.rsi(price_period, period_rsi)

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["rsi_1"] = price_signal_period["rsi"].shift(1)
    price_signal_period["rsi_1"].fillna(0, inplace=True)

    price_signal_period["Signal"] = np.where(
        ((price_signal_period["rsi"] > 10) &
         (price_signal_period["rsi_1"] < 10)), 1,
        np.where(((price_signal_period["rsi"] < 90) &
                  (price_signal_period["rsi_1"] > 90)), -1, 0))

    price_signal_period["Signal"].replace(to_replace=0,
                                          method="ffill",
                                          inplace=True)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 19
0
def kchannel_system(price_data,
                    period1=20,
                    period="",
                    trade_type="Both_leg",
                    underlying_instrument_data=None):
    period_ema = str(period1) + "_EMA"

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    ema.ema(price_period, period1)
    atr.atr(price_period, period1)

    price_period["Upper band"] = price_period[period_ema] + price_period["ATR"]
    price_period["Lower band"] = price_period[period_ema] - price_period["ATR"]

    price_signal_period = price_period

    price_signal = price_data

    price_signal_period["Signal"] = np.where(
        (price_signal_period["Close"] > price_signal_period["Upper band"]), 1,
        np.where(
            (price_signal_period["Close"] < price_signal_period["Lower band"]),
            -1, np.nan))
    price_signal_period["Signal"].fillna(method="ffill", inplace=True)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 20
0
def assymetric_system(price_data,
                      period_1=10,
                      period_2=20,
                      period="",
                      trade_type="Both_leg",
                      underlying_instrument_data=None):

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    sma.sma(price_period, period_1)
    sma.sma(price_period, period_2)

    price_signal_period = price_period

    price_signal_period["min_of_2"] = price_signal_period[[
        str(period_1) + "_SMA", str(period_2) + "_SMA"
    ]].min(axis=1)

    price_signal = price_data

    price_signal_period["Signal"] = np.where(
        (price_signal_period["Close"] > price_signal_period["min_of_2"]), 1,
        -1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    price_signal.to_csv("Price_signal.csv", index=True)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 21
0
def stochastics_system(price_data, period1=14,period2=3,long_level=50,short_level=50, long_stop=0,short_stop=0, period="", trade_type="Both_leg", underlying_instrument_data=None):

    if long_stop==0:
        long_stop=short_level
    if short_stop==0:
        short_stop=long_level

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(price_data, period)

    highest_high=price_period["High"].rolling(period1).max()
    lowest_low=price_period["Low"].rolling(period1).min()

    percentage_k=((price_period["Close"]-lowest_low)/(highest_high-lowest_low))*100

    price_signal_period = price_period

    price_signal_period["percentage_d"] = percentage_k.rolling(period2).mean()


    price_signal = price_data

    price_signal_period["Signal"] = np.where(((price_signal_period["percentage_d"] > long_level) & (price_signal_period["percentage_d"].shift() < long_level)), 1,
                                             np.where(((price_signal_period["percentage_d"] < short_level) & (price_signal_period["percentage_d"].shift() > short_level)), -1,
                                             np.where(((price_signal_period["percentage_d"] < long_stop) & (price_signal_period["percentage_d"].shift() > long_stop)),0,
                                                      np.where(((price_signal_period["percentage_d"] > short_stop) & (price_signal_period["percentage_d"].shift() < short_stop)),0,
                                                               np.nan))))
    price_signal_period["Signal"].fillna(method="ffill",inplace=True)

    price_signal["Signal"] = price_signal_period["Signal"].resample("D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(price_signal, underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
def ma_trailing_stop_system(price_data,
                            std_period=20,
                            trailing_stop=3,
                            period="",
                            trade_type="Both_leg",
                            underlying_instrument_data=None):
    trailing_stop = trailing_stop / 100

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["std_level"] = (
        price_signal_period["Close"] -
        price_signal_period["Close"].rolling(std_period).mean()
    ) / price_signal_period["Close"].rolling(std_period).std()

    price_signal_period["Signal"] = 0

    signal_generation(price_signal_period, trailing_stop)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Close"], underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 23
0
def island_reversal_system(price_data,
                           profit_target=10,
                           stop_level=2,
                           period="",
                           trade_type="Both_leg",
                           underlying_instrument_data=None):
    profit_target = profit_target / 100
    stop_level = -stop_level / 100

    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    island_reversal.island_reversal(price_signal_period)

    price_signal_period["Signal"] = price_signal_period.apply(
        lambda x: signal_generation(*x, profit_target, stop_level), axis=1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Close"], underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal)

    return trades, price_signal
Ejemplo n.º 24
0
def keltner_system(price_data,
                   period1=21,
                   period2=21,
                   period="",
                   trade_type="Both_leg",
                   underlying_instrument_data=None):
    if period == "":
        price_period = price_data
    else:
        price_period = series_resampling.price_series_periodic(
            price_data, period)

    price_signal_period = price_period
    price_signal = price_data

    price_signal_period["Average_close"] = price_signal_period[[
        "High", "Low", "Close"
    ]].mean(axis=1)
    price_signal_period["Average_close_average"] = price_signal_period[
        "Average_close"].rolling(period1).mean()

    true_range = pd.concat([
        price_signal_period["High"] - price_signal_period["Low"],
        abs(price_signal_period["High"] -
            price_signal_period["Close"].shift()),
        abs(price_signal_period["Low"] - price_signal_period["Close"].shift())
    ],
                           axis=1)

    true_range = true_range.max(axis=1)

    price_signal_period["atr"] = true_range.rolling(period2).mean()

    price_signal_period["upper_band"] = price_signal_period[
        "Average_close_average"] + 1.3 * price_signal_period["atr"]
    price_signal_period["lower_band"] = price_signal_period[
        "Average_close_average"] - 1.3 * price_signal_period["atr"]

    cols = ["Average_close_average", "upper_band", "lower_band"]

    price_signal_period[cols] = price_signal_period[cols].shift(fill_value=0)

    price_signal_period["Average_close_signal"] = np.where(
        price_signal_period["Average_close_average"] >=
        price_signal_period["Average_close_average"].shift(), 1, -1)

    Signal = price_signal_period.apply(lambda x: signal_generation(*x), axis=1)

    Signal = Signal.apply(pd.Series)
    Signal.columns = ["Signal", "Trade_Level"]
    price_signal_period = pd.concat([price_signal_period, Signal], axis=1)

    price_signal["Signal"] = price_signal_period["Signal"].resample(
        "D").ffill()
    price_signal["Signal"].fillna(0, inplace=True)

    price_signal["Trade_Level"] = price_signal_period["Trade_Level"]
    price_signal["Trade_Level"].fillna(0, inplace=True)

    price_signal[
        "Trades"] = price_signal["Signal"] - price_signal["Signal"].shift(1)

    if trade_type == "Individual":
        trades = creating_individual_trade.creating_individual_trade(
            price_signal, price_signal["Trade_Level"],
            underlying_instrument_data)
    else:
        trades = tc.trade_generation(price_signal, "Trade_Level")

    return trades, price_signal