Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.79 KB | None | 0 0
  1. from zipline.api import order_value, record, symbol
  2. from zipline import run_algorithm
  3. import pandas as pd
  4. import numpy as np
  5.  
  6. class BackTest(object):
  7.  
  8.     start = pd.Timestamp('2016-01-01', tz='utc')
  9.     end = pd.Timestamp('2018-01-01', tz='utc')
  10.  
  11.     def __init__(self):
  12.         self.stock = None
  13.  
  14.     def average(self, string, days):
  15.         days = abs(days)
  16.         if days != days:
  17.             return 0
  18.         if days > 300:
  19.             days = 300
  20.         if days < 1:
  21.             days = 1
  22.         try:
  23.             average = self.data.history(
  24.                 self.context.asset, string, bar_count=int(days), frequency="1d").mean()
  25.         except IndexError:
  26.             average = 0
  27.             print('error avg')
  28.         if np.isnan(average):
  29.             average = 0
  30.         return average
  31.  
  32.     def maximum(self, string, days):
  33.         days = abs(days)
  34.         if days != days:
  35.             return 0
  36.         if days > 300:
  37.             days = 300
  38.         if days < 1:
  39.             days = 1
  40.         try:
  41.             maximum = self.data.history(
  42.                 self.context.asset, string, bar_count=int(days), frequency="1d").max()
  43.         except IndexError:
  44.             maximum = 0
  45.             print('error max')
  46.         if np.isnan(maximum):
  47.             maximum = 0
  48.         return maximum
  49.  
  50.     def minimum(self, string, days):
  51.         days = abs(days)
  52.         if days != days:
  53.             return 0
  54.         if days > 300:
  55.             days = 300
  56.         if days < 1:
  57.             days = 1
  58.         try:
  59.             minimum = self.data.history(
  60.                 self.context.asset, string, bar_count=int(days), frequency="1d").min()
  61.         except IndexError:
  62.             minimum = 0
  63.             print('error min')
  64.         if np.isnan(minimum):
  65.             minimum = 0
  66.         return minimum
  67.  
  68.     def lag(self, string, days):
  69.         days = abs(days)
  70.         if days != days:
  71.             return 0
  72.         if days > 300:
  73.             days = 300
  74.         if days < 1:
  75.             days = 1
  76.         try:
  77.             lag = self.data.history(
  78.                 self.context.asset, string, bar_count=int(days), frequency="1d")[0]
  79.         except IndexError:
  80.             lag = 0
  81.             print(context.asset)
  82.             print('error lag')
  83.         if np.isnan(lag):
  84.             lag = 0
  85.         return lag
  86.  
  87.     def current_price(self):
  88.         price = self.data.current(self.context.asset, 'price')
  89.         if np.isnan(price):
  90.             price = 0
  91.         return price
  92.  
  93.     def current_vol(self):
  94.         volume = self.data.current(self.context.asset, 'volume')
  95.         if np.isnan(volume):
  96.             volume = 0
  97.         self.volume = volume
  98.         return volume
  99.  
  100.     def initialize(self, context):
  101.         context.i = 0
  102.         context.asset = symbol('AAPL')
  103.  
  104.     def handle_data(self, context, data):
  105.         # Skip first 300 days to get full windows
  106.         context.i += 1
  107.         if context.i < 300:
  108.             return
  109.         # Trading logic
  110.         self.data = data
  111.         self.context = context
  112.         if(75 > self.current_vol()):
  113.           order_value(context.asset, 10000)
  114.         if(274 > 206):
  115.           order_value(context.asset, -10000)
  116.  
  117.     def analyze(self, context, perf):
  118.         self.sortino = perf.sortino[-1]
  119.         self.sortinos = perf.sortino
  120.         self.port = perf.portfolio_value
  121.         # print(perf.portfolio_value[-1], self.sortino, perf.sortino[-1])
  122.         if (self.sortino == None):
  123.             self.sortino = 0
  124.  
  125.     def run(self):
  126.         run_algorithm(start=self.start, end=self.end, initialize=self.initialize,
  127.                       capital_base=100000.0, handle_data=self.handle_data,
  128.                       bundle='quantopian-quandl', analyze=self.analyze)
  129.  
  130. backtest = BackTest()
  131. backtest.run()
  132. print(backtest.sortino)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement