mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-06 05:14:38 +08:00
61 lines
1.9 KiB
Python
Executable File
61 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2014 Quantopian, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""Dual Moving Average Crossover algorithm.
|
|
|
|
This algorithm buys apple once its short moving average crosses
|
|
its long moving average (indicating upwards momentum) and sells
|
|
its shares once the averages cross again (indicating downwards
|
|
momentum).
|
|
"""
|
|
|
|
from zipline.api import order_target, record, symbol, history, add_history
|
|
|
|
|
|
def initialize(context):
|
|
# Register 2 histories that track daily prices,
|
|
# one with a 100 window and one with a 300 day window
|
|
add_history(100, '1d', 'price')
|
|
add_history(300, '1d', 'price')
|
|
|
|
context.i = 0
|
|
|
|
|
|
def handle_data(context, data):
|
|
# Skip first 300 days to get full windows
|
|
context.i += 1
|
|
if context.i < 300:
|
|
return
|
|
|
|
# Compute averages
|
|
# history() has to be called with the same params
|
|
# from above and returns a pandas dataframe.
|
|
short_mavg = history(100, '1d', 'price').mean()
|
|
long_mavg = history(300, '1d', 'price').mean()
|
|
|
|
# Trading logic
|
|
if short_mavg[0] > long_mavg[0]:
|
|
# order_target orders as many shares as needed to
|
|
# achieve the desired number of shares.
|
|
order_target(symbol('AAPL'), 100)
|
|
elif short_mavg[0] < long_mavg[0]:
|
|
order_target(symbol('AAPL'), 0)
|
|
|
|
# Save values for later inspection
|
|
record(AAPL=data[symbol('AAPL')].price,
|
|
short_mavg=short_mavg[0],
|
|
long_mavg=long_mavg[0])
|