@Tradehull_Imran
Need your input on this. Is there any change require in this code. Please feel free to modify and help me complete this for intraday strategy for Nifty 50 at TF 15 mins
Strike price should be at Delta = > 0.7
Calculate the 20-period Exponential Moving Average (EMA)
df[‘EMA_20’] = df[‘Close’].ewm(span=20, adjust=False).mean()
Calculate the Volume Weighted Average Price (VWAP)
df[‘VWAP’] = (df[‘Close’] * df[‘Volume’]).cumsum() / df[‘Volume’].cumsum()
Calculate previous day high and low
df[‘Prev_Day_High’] = df[‘High’].shift(1)
df[‘Prev_Day_Low’] = df[‘Low’].shift(1)
Determine bullish or bearish condition based on EMA, VWAP, and previous day levels
df[‘Bullish_Condition’] = (df[‘Close’] > df[‘EMA_20’]) & (df[‘Close’] > df[‘VWAP’]) & (df[‘Close’] > df[‘Prev_Day_High’])
df[‘Bearish_Condition’] = (df[‘Close’] < df[‘EMA_20’]) & (df[‘Close’] < df[‘VWAP’]) & (df[‘Close’] < df[‘Prev_Day_Low’])
Define rejection from support (EMA, VWAP, or previous day low)
df[‘Rejection_From_Support’] = ((df[‘Low’] <= df[‘EMA_20’]) & (df[‘Close’] > df[‘Open’])) |
((df[‘Low’] <= df[‘VWAP’]) & (df[‘Close’] > df[‘Open’])) |
((df[‘Low’] <= df[‘Prev_Day_Low’]) & (df[‘Close’] > df[‘Open’]))
Define rejection from resistance (EMA, VWAP, or previous day high)
df[‘Rejection_From_Resistance’] = ((df[‘High’] >= df[‘EMA_20’]) & (df[‘Close’] < df[‘Open’])) |
((df[‘High’] >= df[‘VWAP’]) & (df[‘Close’] < df[‘Open’])) |
((df[‘High’] >= df[‘Prev_Day_High’]) & (df[‘Close’] < df[‘Open’]))
Define confirmation candle conditions
df[‘Confirmation_Candle_Long’] = df[‘Close’] > df[‘High’].shift(1)
df[‘Confirmation_Candle_Short’] = df[‘Close’] < df[‘Low’].shift(1)
Generate buy and sell signals with confirmation candle
df[‘Buy_Signal’] = df[‘Rejection_From_Support’] & df[‘Bullish_Condition’] & df[‘Confirmation_Candle_Long’].shift(1)
df[‘Sell_Signal’] = df[‘Rejection_From_Resistance’] & df[‘Bearish_Condition’] & df[‘Confirmation_Candle_Short’].shift(1)
Calculate the Average True Range (ATR) for stop loss calculation
df[‘ATR_14’] = df[‘High’].rolling(window=14).max() - df[‘Low’].rolling(window=14).min()
for i in range(1, len(df)):
if df[‘Buy_Signal’].iloc[i]:
stop_loss_long = df[‘Low’].iloc[i] - df[‘ATR_14’].iloc[i]
target_long = df[‘Close’].iloc[i] + 2 * (df[‘Close’].iloc[i] - stop_loss_long)
df[‘Position’].iloc[i] = df[‘Cash’].iloc[i - 1] / df[‘Close’].iloc[i]
df[‘Cash’].iloc[i] = 0
df.loc[i, ‘Stop_Loss_Long’] = stop_loss_long
df.loc[i, ‘Target_Long’] = target_long
elif df[‘Sell_Signal’].iloc[i] and df[‘Position’].iloc[i - 1] > 0:
stop_loss_short = df[‘High’].iloc[i] + df[‘ATR_14’].iloc[i]
target_short = df[‘Close’].iloc[i] - 2 * (stop_loss_short - df[‘Close’].iloc[i])
df[‘Cash’].iloc[i] = df[‘Position’].iloc[i - 1] * df[‘Close’].iloc[i]
df[‘Position’].iloc[i] = 0
df.loc[i, ‘Stop_Loss_Short’] = stop_loss_short
df.loc[i, ‘Target_Short’] = target_short
else:
df[‘Position’].iloc[i] = df[‘Position’].iloc[i - 1]
df[‘Cash’].iloc[i] = df[‘Cash’].iloc[i - 1]
df['Portfolio_Value'].iloc[i] = df['Cash'].iloc[i] + df['Position'].iloc[i] * df['Close'].iloc[i]