Hi
I programmed the following intra-day strategy.
Logic:
1 - Used 1 min data
2 - At 10 :00 am, buy stop order is placed at days high and sell stop order is placed at days low.
3 - At 15:20 exit any open positions.
Following is the program, I am not getting the desired result. I am getting problem in placing stop orders. I am not getting any syntex error but it is not executing trades as I wanted. Can you please help me out?
Zipline
from zipline.api import( symbol, get_datetime,order_target_percent,schedule_function,
date_rules, time_rules, attach_pipeline, pipeline_output,
set_commission,set_slippage,get_open_orders,cancel_order,
order_target,order,get_order
)
from zipline.errors import HistoryWindowStartsBeforeData
from zipline.finance import commission,slippage
from zipline.finance.slippage import FixedBasisPointsSlippage
Data manipulation
import pandas as pd
import numpy as np
import talib as ta
import bisect
def initialize(context):
context.universe = [symbol('NIFTY-I')]
context.set_slippage(FixedBasisPointsSlippage(basis_points = 0))
#Inputs
context.inputs = {'starttrade': 45, 'endtrade':345, 'exittime': 365,
'barresolution':'1m' }
#Variable
context.barcount = 0
context.current_bar = 0
context.previous_bar = 0
context.mp = dict((security,0) for security in context.universe)
context.qty = dict((security,0) for security in context.universe)
context.buylevel = 99999
context.selllevel = 0
def before_trading_start(context,data):
pass
def handle_data(context,data):
context.current_bar = data.current_dt.date()
if (context.current_bar != context.previous_bar):
context.barcount = 1
else:
context.barcount = context.barcount + 1
context.previous_bar = context.current_bar
strategy(context,data)
def strategy(context,data):
pricesnew = data.history(context.universe,['high','low'],context.barcount,
context.inputs['barresolution'])
px_high = pricesnew['high'][context.universe[0]].values
px_low = pricesnew['low'][context.universe[0]].values
dayshigh = np.max(px_high)
dayslow = np.min(px_low)
if context.barcount <= context.inputs['starttrade']:
context.buylevel = 99999
context.selllevel = 0
elif context.barcount >= context.inputs['endtrade']:
context.buylevel = 99999
context.selllevel= 0
else:
context.buylevel = dayshigh
context.selllevel = dayslow
placetrade(context,data)
def placetrade(context,data):
for security in context.universe:
marketposition = context.portfolio.positions[security].amount
#print(context.barcount, marketposition,context.buylevel,context.selllevel)
if (marketposition == 0) :
order(security, 75, stop_price = (context.buylevel))
if (marketposition == 0):
order(security, -75, stop_price = (context.selllevel))
if context.barcount == context.inputs['exittime']:
order_target(security, 0)