Source code for robin_stocks.robinhood.export

from csv import writer
from datetime import date
from pathlib import Path
from robin_stocks.robinhood.helper import *
from robin_stocks.robinhood.orders import *
from robin_stocks.robinhood.stocks import *
from robin_stocks.robinhood.crypto import *


[docs]def fix_file_extension(file_name): """ Takes a file extension and makes it end with .csv :param file_name: Name of the file. :type file_name: str :returns: Adds or replaces the file suffix with .csv and returns it as a string. """ path = Path(file_name) path = path.with_suffix('.csv') return path.resolve()
[docs]def create_absolute_csv(dir_path, file_name, order_type): """ Creates a filepath given a directory and file name. :param dir_path: Absolute or relative path to the directory the file will be written. :type dir_path: str :param file_name: An optional argument for the name of the file. If not defined, filename will be stock_orders_{current date} :type file_name: str :param file_name: Will be 'stock', 'option', or 'crypto' :type file_name: str :returns: An absolute file path as a string. """ path = Path(dir_path) directory = path.resolve() if not file_name: file_name = "{}_orders_{}.csv".format(order_type, date.today().strftime('%b-%d-%Y')) else: file_name = fix_file_extension(file_name) return(Path.joinpath(directory, file_name))
[docs]@login_required def export_completed_stock_orders(dir_path, file_name=None): """Write all completed orders to a csv file :param dir_path: Absolute or relative path to the directory the file will be written. :type dir_path: str :param file_name: An optional argument for the name of the file. If not defined, filename will be stock_orders_{current date} :type file_name: Optional[str] """ file_path = create_absolute_csv(dir_path, file_name, 'stock') all_orders = get_all_stock_orders() with open(file_path, 'w', newline='') as f: csv_writer = writer(f) csv_writer.writerow([ 'symbol', 'date', 'order_type', 'side', 'fees', 'quantity', 'average_price' ]) for order in all_orders: # include candled order if partial executed if order['state'] == 'cancelled' and len(order['executions']) > 0: for partial in order['executions']: csv_writer.writerow([ get_symbol_by_url(order['instrument']), partial['timestamp'], order['type'], order['side'], order['fees'], partial['quantity'], partial['price'] ]) if order['state'] == 'filled' and order['cancel'] is None: csv_writer.writerow([ get_symbol_by_url(order['instrument']), order['last_transaction_at'], order['type'], order['side'], order['fees'], order['quantity'], order['average_price'] ]) f.close()
[docs]@login_required def export_completed_crypto_orders(dir_path, file_name=None): """Write all completed crypto orders to a csv file :param dir_path: Absolute or relative path to the directory the file will be written. :type dir_path: str :param file_name: An optional argument for the name of the file. If not defined, filename will be crypto_orders_{current date} :type file_name: Optional[str] """ file_path = create_absolute_csv(dir_path, file_name, 'crypto') all_orders = get_all_crypto_orders() with open(file_path, 'w', newline='') as f: csv_writer = writer(f) csv_writer.writerow([ 'symbol', 'date', 'order_type', 'side', 'fees', 'quantity', 'average_price' ]) for order in all_orders: if order['state'] == 'filled' and order['cancel_url'] is None: try: fees = order['fees'] except KeyError: fees = 0.0 csv_writer.writerow([ get_crypto_quote_from_id(order['currency_pair_id'], 'symbol'), order['last_transaction_at'], order['type'], order['side'], fees, order['quantity'], order['average_price'] ]) f.close()
[docs]@login_required def export_completed_option_orders(dir_path, file_name=None): """Write all completed option orders to a csv :param dir_path: Absolute or relative path to the directory the file will be written. :type dir_path: str :param file_name: An optional argument for the name of the file. If not defined, filename will be option_orders_{current date} :type file_name: Optional[str] """ file_path = create_absolute_csv(dir_path, file_name, 'option') all_orders = get_all_option_orders() with open(file_path, 'w', newline='') as f: csv_writer = writer(f) csv_writer.writerow([ 'chain_symbol', 'expiration_date', 'strike_price', 'option_type', 'side', 'order_created_at', 'direction', 'order_quantity', 'order_type', 'opening_strategy', 'closing_strategy', 'price', 'processed_quantity' ]) for order in all_orders: if order['state'] == 'filled': for leg in order['legs']: instrument_data = request_get(leg['option']) csv_writer.writerow([ order['chain_symbol'], instrument_data['expiration_date'], instrument_data['strike_price'], instrument_data['type'], leg['side'], order['created_at'], order['direction'], order['quantity'], order['type'], order['opening_strategy'], order['closing_strategy'], order['price'], order['processed_quantity'] ]) f.close()