from kiteconnect import KiteConnect import pandas as pd import nGIFT NIFTY 50 INDEX FUTURESNSEIX:NIFTY1!exactingEnthus52543from kiteconnect import KiteConnect import pandas as pd import numpy as np import time Initialize Zerodha API API_KEY = "your_api_key" API_SECRET = "your_api_secret" ACCESS_TOKEN = "your_access_token" kite = KiteConnect(api_key=API_KEY) kite.set_access_token(ACCESS_TOKEN) def fetch_ohlc(symbol, interval, days): """Fetch historical data""" to_date = pd.Timestamp.today() from_date = to_date - pd.Timedelta(days=days) data = kite.historical_data(instrument_token=symbol, from_date=from_date, to_date=to_date, interval=interval) df = pd.DataFrame(data) return df def calculate_hma(df, period): """Calculate Hull Moving Average (HMA)""" wma_half = df.rolling(window=period//2).mean() wma_full = df.rolling(window=period).mean() hma = ((2 * wma_half) - wma_full).rolling(window=int(np.sqrt(period))).mean() return hma def calculate_atr(df, period=14): """Calculate ATR for stop loss""" df = df - df df = abs(df - df.shift(1)) df = abs(df - df.shift(1)) df = df[].max(axis=1) df = df.rolling(window=period).mean() return df def get_option_symbol(index, option_type, strike): """Generate option symbol""" return f"{index}{strike}{option_type}" def place_order(symbol, quantity, transaction_type): """Place option selling order""" order_id = kite.place_order( tradingsymbol=symbol, exchange=kite.EXCHANGE_NFO, transaction_type=transaction_type, quantity=quantity, order_type=kite.ORDER_TYPE_MARKET, product=kite.PRODUCT_MIS ) return order_id def strategy(): """Execute HMA-based option selling strategy""" index = "BANKNIFTY" # Change to "NIFTY" if needed lot_size = 15 # Adjust according to contract size df = fetch_ohlc(symbol=index, interval='5minute', days=30) df = calculate_hma(df, 9) df = calculate_hma(df, 21) df = calculate_atr(df) df = np.where(df > df, 1, -1) df = df.pct_change() * df.shift(1) df = (1 + df).cumprod() print("Backtesting Results:") print(df[].dropna().tail(10)) if df.iloc > df.iloc: print("Bullish signal - Selling PUT Option") strike_price = round(df.iloc / 100) * 100 option_symbol = get_option_symbol(index, "PE", strike_price) place_order(option_symbol, lot_size, kite.TRANSACTION_TYPE_SELL) elif df.iloc < df.iloc: print("Bearish signal - Selling CALL Option") strike_price = round(df.iloc / 100) * 100 option_symbol = get_option_symbol(index, "CE", strike_price) place_order(option_symbol, lot_size, kite.TRANSACTION_TYPE_SELL) Run strategy every 5 minutes timeframe = 300 # 5 minutes in seconds while True: strategy() time.sleep(timeframe)