mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-28 03:01:12 +08:00
149 lines
5.3 KiB
ReStructuredText
149 lines
5.3 KiB
ReStructuredText
Utilities
|
|
=========
|
|
|
|
This section covers a variety of utilites that provide complimentary
|
|
functionality to your trading algorithms. These are code snippets that you can
|
|
add to any algorithm to add the desired functionality.
|
|
|
|
If you are looking for example trading algorithms, see the corresponding section.
|
|
|
|
Output to CSV file
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
Add this script to the analyze method to create and save a CSV file with the
|
|
results from the trading algorithm. This file will include the default
|
|
parameters of the results DataFrame plus any recorded variables and will be
|
|
saved in the same location where your trading algorithm is saved. The exact
|
|
script that you need to use depends on the interface that you are using to run
|
|
your trading algorithm, which could be the CLI or a Python Interpreter.
|
|
|
|
1. Script to use with CLI:
|
|
|
|
.. code-block:: python
|
|
|
|
def analyze(context=None, results=None):
|
|
import sys
|
|
import os
|
|
from os.path import basename
|
|
|
|
# Save results in CSV file
|
|
filename = os.path.splitext(basename(sys.argv[3]))[0]
|
|
results.to_csv(filename + '.csv')
|
|
|
|
2. Script to use with Python Interpreter:
|
|
|
|
.. code-block:: python
|
|
|
|
def analyze(context=None, results=None):
|
|
import os
|
|
from os.path import basename
|
|
|
|
# Save results in CSV file
|
|
filename = os.path.splitext(os.path.basename(__file__))[0]
|
|
results.to_csv(filename + '.csv')
|
|
|
|
Extracting market data
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Use this script to save the price and volume data of one cryptoasset in a CSV
|
|
file, which will be saved in the same location and with the same name as your
|
|
Python file. To get custom data, simply modify the asset's symbol and the dates.
|
|
Run this script directly from your development environment: python scriptname.py,
|
|
where the contents of 'scriptname.py' are as follows. Two different version are
|
|
provided as an example for daily- and minute-resolution data respectively:
|
|
|
|
Simpler case for daily data
|
|
|
|
.. code-block:: python
|
|
|
|
import os
|
|
import pytz
|
|
from datetime import datetime
|
|
|
|
from catalyst.api import record, symbol, symbols
|
|
from catalyst.utils.run_algo import run_algorithm
|
|
|
|
def initialize(context):
|
|
# Portfolio assets list
|
|
context.asset = symbol('btc_usdt') # Bitcoin on Poloniex
|
|
|
|
def handle_data(context, data):
|
|
# Variables to record for a given asset: price and volume
|
|
price = data.current(context.asset, 'price')
|
|
volume = data.current(context.asset, 'volume')
|
|
record(price=price, volume=volume)
|
|
|
|
def analyze(context=None, results=None):
|
|
|
|
# Generate DataFrame with Price and Volume only
|
|
data = results[['price','volume']]
|
|
|
|
# Save results in CSV file
|
|
filename = os.path.splitext(os.path.basename(__file__))[0]
|
|
data.to_csv(filename + '.csv')
|
|
|
|
''' Bitcoin data is available on Poloniex since 2015-3-1.
|
|
Dates vary for other tokens. In the example below, we choose the
|
|
full month of July of 2017.
|
|
'''
|
|
start = datetime(2017, 1, 1, 0, 0, 0, 0, pytz.utc)
|
|
end = datetime(2017, 7, 31, 0, 0, 0, 0, pytz.utc)
|
|
results = run_algorithm(initialize=initialize,
|
|
handle_data=handle_data,
|
|
analyze=analyze,
|
|
start=start,
|
|
end=end,
|
|
exchange_name='poloniex',
|
|
capital_base=10000,
|
|
base_currency = 'usdt')
|
|
|
|
More versatile case for minute data
|
|
|
|
.. code-block:: python
|
|
|
|
import os
|
|
import csv
|
|
import pytz
|
|
from datetime import datetime
|
|
|
|
from catalyst.api import record, symbol, symbols
|
|
from catalyst.utils.run_algo import run_algorithm
|
|
|
|
|
|
def initialize(context):
|
|
# Portfolio assets list
|
|
context.asset = symbol('btc_usdt') # Bitcoin on Poloniex
|
|
|
|
# Creates a .CSV file with the same name as this script to store results
|
|
context.csvfile = open(os.path.splitext(
|
|
os.path.basename(__file__))[0]+'.csv', 'w+')
|
|
context.csvwriter = csv.writer(context.csvfile)
|
|
|
|
def handle_data(context, data):
|
|
# Variables to record for a given asset: price and volume
|
|
# Other options include 'open', 'high', 'open', 'close'
|
|
# Please note that 'price' equals 'close'
|
|
date = context.blotter.current_dt # current time in each iteration
|
|
price = data.current(context.asset, 'price')
|
|
volume = data.current(context.asset, 'volume')
|
|
|
|
# Writes one line to CSV on each iteration with the chosen variables
|
|
context.csvwriter.writerow([date,price,volume])
|
|
|
|
def analyze(context=None, results=None):
|
|
# Close open file properly at the end
|
|
context.csvfile.close()
|
|
|
|
|
|
# Bitcoin data is available from 2015-3-2. Dates vary for other tokens.
|
|
start = datetime(2017, 7, 30, 0, 0, 0, 0, pytz.utc)
|
|
end = datetime(2017, 7, 31, 0, 0, 0, 0, pytz.utc)
|
|
results = run_algorithm(initialize=initialize,
|
|
handle_data=handle_data,
|
|
analyze=analyze,
|
|
start=start,
|
|
end=end,
|
|
exchange_name='poloniex',
|
|
data_frequency='minute',
|
|
base_currency ='usdt',
|
|
capital_base=10000 ) |