I am getting an error in the line no. 49. Can't figure out why.
Also, how can I implement any one of the following conditions are met and we sell
1. Stop Loss of 10%
2. Profit Target of 2%
3. 5 days past buy and sell on next day open.
Thank you,
Maji
# For this example, we're going to write a simple Dip Buying script. When the
# stock goes down below a certain level quickly, we're going to buy;
# We want to hold it for 5 days or a stop loss of 10% or a profit target of 2%, whichever comes first
# To run an algorithm in Quantopian, you need two functions: initialize and
# handle_data.
def initialize(context):
# This initialize function sets any data or variables that you'll use in
# your algorithm. For instance, you'll want to define the security (or
# securities) you want to backtest. You'll also want to define any
# parameters or values you're going to use.
# In our example, we're looking at Apple. If you re-type this line
# yourself, you'll see the auto-complete that is available for the
# security ID.
context.aapl = sid(24)
context.invested = False
# In these two lines, we set the maximum and minimum we want our algorithm
# to go long or short our security. You don't have to set limits like this
# when you write an algorithm, but it's good practice.
context.max_notional = 1000000.1
context.min_notional = -1000000.0
def handle_data(context, data):
# This handle_data function is where the real work is done. Our data is
# minute-level tick data, and each minute is called a frame. This function
# runs on each frame of the data.
# We've built a handful of useful data transforms for you to use. In this
# line, we're computing the volume-weighted-average-price of the security
# defined above, in the context.aapl variable. For this example, we're
# specifying a three-day average.
vwap = data[context.aapl].vwap(3)
# We need a variable for the current price of the security to compare to
# the average.
price = data[context.aapl].price
# Another powerful built-in feature of the Quantopian backtester is the
# portfolio object. The portfolio object tracks your positions, cash,
# cost basis of specific holdings, and more. In this line, we calculate
# how long or short our position is at this minute.
notional = context.portfolio.positions[context.aapl].amount * price
# This is the meat of the algorithm, placed in this if statement.
# If we have an open position, then sell. I want to add sell conditions here.
if context.invested:
order(context.aapl,-100)
context.invested = False
# If the price of the security is .5% less than the 3-day volume weighted average
# price AND we haven't reached our maximum long, then we call the order
# command and buy 100 shares.
elif not context.invested and price < vwap * 0.995 and notional < context.max_notional:
order(context.aapl,100)
context.invested = True