How to create a stratergy using kiteconnect module

chiju
Do you guys have any examples so that I can start create one.
  • Imran
    Imran edited July 2018
    hii @chiju

    opening range breakout code:
    from kiteconnect import WebSocket;
    from kiteconnect import KiteConnect;
    import time,os,datetime,math;
    trd_portfolio = {325121:"AMBUJACEM",40193:"APOLLOHOSP",41729:"APOLLOTYRE",49409:"ARVIND",54273:"ASHOKLEY",60417:"ASIANPAINT",1510401:"AXISBANK",1214721:"BANKINDIA",94977:"BATAINDIA",108033:"BHARATFORG",2714625:"BHARTIARTL",558337:"BOSCHLTD",134657:"BPCL",2763265:"CANBK",320001:"CASTROLIND",3905025:"CEATLTD",177665:"CIPLA",5215745:"COALINDIA",3876097:"COLPAL",197633:"DABUR",3513601:"DCBBANK",261889:"FEDERALBNK",1207553:"GAIL",340481:"HDFC",341249:"HDFCBANK",345089:"HEROMOTOCO",356865:"HINDUNILVR",1346049:"INDUSINDBK",415745:"IOC",424961:"ITC",3001089:"JSWSTEEL",492033:"KOTAKBANK",2061825:"KTKBANK",2939649:"LT",2815745:"MARUTI",4464129:"OIL",633601:"ONGC",636673:"ORIENTBANK",2905857:"PETRONET",3834113:"POWERGRID",738561:"RELIANCE",779521:"SBIN",1887745:"STAR",895745:"TATASTEEL",3050241:"YESBANK"}
    buy_percentage_distribution = []
    sell_percentage_distribution = []
    trd_tkn1 = [];
    live_open = {}
    live_high = {}
    live_low = {}
    live_close = {}
    buy_count = {}
    sell_count = {}

    for x in trd_portfolio:
    trd_tkn1.append(x)
    live_open[x] = 0
    live_high[x] = 0
    live_low[x] = 0
    live_close[x] = 0
    buy_count[x] = 0
    sell_count[x] = 0

    #--- Taking input credentials from user to make connection with ZERODHA API
    c_id = "xxxxxx"
    ak = "xxxxxxxxxxxxxxxxxxxxx"
    asecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    try:
    trd_capital = int(input("[*] Enter Trading Capital (eg. 10000, 25000) : "));
    trd_tp = float(input("[*] Enter your Reward (eg.2500, 4500, 6000 ) : "))
    trd_sl = float(input("[*] Enter your Risk (eg.1200, 1500, 1800 ) : "))
    trd_inc_dec = float(input("[*] Enter Percentage Increment Decrement (eg. 0.25%,0.5%,1%,2%) : "))/100
    time_frame = int(input("[*] Enter timeframe (eg. 5, 15) : "));
    trailing_stoploss = int(input("[*] Enter trailing-stoploss (eg. 1, 2) : "));


    print("------------------------ ENTER BUY PRICE PERCENTAGE DISTRIBUTION ------------------------")
    total_percentage = 0;
    while total_percentage is not 100:
    print("\t[+] Please make total percentage 100")
    total_percentage = 0;
    buy_percentage_distribution = []
    for x in range(1,5):
    buy_percentage_distribution.append(int(input("\t"+str(x)+": ")))
    total_percentage+=buy_percentage_distribution[x-1]


    print("------------------------ ENTER SELL PRICE PERCENTAGE DISTRIBUTION ------------------------")
    total_percentage = 0;
    while total_percentage is not 100:
    print("\t[+] Please make total percentage 100")
    total_percentage = 0;
    sell_percentage_distribution = []
    for x in range(1,5):
    sell_percentage_distribution.append(int(input("\t"+str(x)+": ")))
    total_percentage+=sell_percentage_distribution[x-1]

    except Exception as e:
    print(e)
    print("[!] Please enter correct data")
    i = input("[!] PRESS ENTER TO EXIT... ")
    exit();


    kite = KiteConnect(api_key=ak)
    print("[*] Generate access Token : ",kite.login_url())
    request_tkn = input("[*] Enter Your Request Token Here : ")[-32:];
    data = kite.request_access_token(request_tkn, secret=asecret)
    kite.set_access_token(data["access_token"])
    kws = WebSocket(ak, data["public_token"], c_id)


    # VARIABLE DECLARATION
    is_ohlc_calculation_done = False;

    def calculate_ohlc(tick):
    global live_open,live_high,live_low,live_close;
    for company_data in tick:
    live_open[company_data['instrument_token']] = company_data['ohlc']['open']
    live_high[company_data['instrument_token']] = company_data['ohlc']['high']
    live_low[company_data['instrument_token']] = company_data['ohlc']['low']
    live_close[company_data['instrument_token']] = company_data['ohlc']['close']

    def do_buy_sell_operation(tick):
    global live_high,live_low,buy_count,sell_count,trd_inc_dec
    global trd_capital,buy_percentage_distribution,sell_percentage_distribution
    global trd_tp,trd_sl,trailing_stoploss;

    for company_data in tick:
    var_x1 = round(live_high[company_data['instrument_token']]+company_data['ohlc']['open']*(trd_inc_dec*buy_count[company_data['instrument_token']]),2);

    if company_data['last_price'] >= var_x1 and buy_count[company_data['instrument_token']]<4:
    quant = int((trd_capital*(buy_percentage_distribution[buy_count[company_data['instrument_token']]]/100))//company_data['last_price']);
    stoploss = round((trd_tp*buy_percentage_distribution[buy_count[company_data['instrument_token']]]/100)/quant,2)
    takeprofit = round((trd_sl*buy_percentage_distribution[buy_count[company_data['instrument_token']]]/100)/quant,2)

    kite.order_place(tradingsymbol=trd_portfolio[company_data['instrument_token']], exchange="NSE", quantity=quant , transaction_type="BUY",order_type="LIMIT", price=company_data['last_price'], squareoff_value=takeprofit, stoploss_value=stoploss,trailing_stoploss=trailing_stoploss, variety="bo",validity="DAY");

    print((buy_count[company_data['instrument_token']]+1),". BUY : ",trd_portfolio[company_data['instrument_token']]," AT ",company_data['last_price']," => ",var_x1," QUANTITY : ",quant)

    buy_count[company_data['instrument_token']]+=1;



    var_x2 = round(live_low[company_data['instrument_token']]-company_data['ohlc']['open']*(trd_inc_dec*buy_count[company_data['instrument_token']]),2);

    if company_data['last_price'] <= var_x2 and sell_count[company_data['instrument_token']]<4:
    quant = int((trd_capital*(sell_percentage_distribution[sell_count[company_data['instrument_token']]]/100))//company_data['last_price']);
    stoploss = round((trd_tp*sell_percentage_distribution[sell_count[company_data['instrument_token']]]/100)/quant,2)
    takeprofit = round((trd_sl*sell_percentage_distribution[sell_count[company_data['instrument_token']]]/100)/quant,2)

    kite.order_place(tradingsymbol=trd_portfolio[company_data['instrument_token']], exchange="NSE", quantity=quant , transaction_type="SELL",order_type="LIMIT", price=company_data['last_price'], squareoff_value=takeprofit, stoploss_value=stoploss,trailing_stoploss=trailing_stoploss, variety="bo",validity="DAY");

    print((sell_count[company_data['instrument_token']]+1),". SELL : ",trd_portfolio[company_data['instrument_token']]," AT ",company_data['last_price']," => ",var_x2," QUANTITY : ",quant)

    sell_count[company_data['instrument_token']]+=1;



    def on_tick(tick, ws):
    # ACCESSING GLOBAL VARIABLES
    global is_ohlc_calculation_done;

    if is_ohlc_calculation_done:
    do_buy_sell_operation(tick);

    if not is_ohlc_calculation_done:
    is_ohlc_calculation_done = True;
    calculate_ohlc(tick);

    def on_connect(ws):
    ws.subscribe(trd_tkn1)
    ws.set_mode(ws.MODE_FULL, trd_tkn1)


    kws.on_tick = on_tick
    kws.on_connect = on_connect
    kws.enable_reconnect(reconnect_interval=5, reconnect_tries=50)

    time_to_go = "09"+str(15+time_frame)+"00";

    while int(time.strftime("%H%M%S")) != int(time_to_go):
    print(time_to_go," : ",time.strftime("%H%M%S"))

    kws.connect()
    for any queries mail to:[email protected]
  • Imran
    also you can find some sample code on github:
    example for python : https://github.com/zerodhatech/pykiteconnect/tree/kite3
  • cdesai1987
    Contact me for the best algo developed in India @ 9850073217
  • shivdaskumar
    hii imran
    I want a algo for a strategy... can you share your contact
  • Imran
    hii @shivdaskumar
    contact 9370789912 for algo
  • Parva
    Hey @Imran
    Can you please tell me what Percentage Increment Decrement and buy and sell percentage distribution signify?
    Thankyou
Sign In or Register to comment.