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
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
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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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
universal_dates[-1], freq="M") annual_index = pd.date_range(universal_dates[0], universal_dates[-1], freq="Y") buy_trades = pd.read_csv(buy_trade_file) buy_trades.set_index("Dates", inplace=True) buy_trades.index = pd.to_datetime(buy_trades.index) sell_trades = pd.read_csv(sell_trade_file) sell_trades.set_index("Dates", inplace=True) sell_trades.index = pd.to_datetime(sell_trades.index) expiry_days = pd.read_csv(expiry_days_path) expiry_days = pd.to_datetime(expiry_days["Expiry days"]) expiry_days = expiry_days[expiry_days.between(buy_trades.index[0], buy_trades.index[-1])] nifty_monthly = series_re.price_series_periodic(nifty_data, "M") month_end_date = nifty_monthly.index trade_list, trade_not_found = trade_creation( portfolio_type, portfolio_strategy, buy_trades, sell_trades, price_data_futures2, price_data, nifty_data, expiry_days) trade_list.name = 'trade list' trade_not_found.name = 'trades not found' to_be_saved_as_csv = [trade_list, trade_not_found] my_funcs.csv_creation(to_be_saved_as_csv, current_folder_path / "Portfolio_construction/SML")
import pandas as pd from pathlib import Path from Timeframe_Manipulation import series_resampling import my_funcs import warnings if __name__ == '__main__': warnings.filterwarnings("ignore") folder_path = Path().absolute().joinpath("Data\Price_Data") symbols = ["Nifty Index"] price_data = my_funcs.import_price_data_from_csv_files( folder_path, symbols) price_data_monthly = series_resampling.price_series_periodic( price_data[symbols[0]], period="M") price_data_monthly.to_csv("Nifty Monthly.csv", index=True)
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