binance-stepper-bot / reports.py /
Aleksandr Gaisov Initial commit
8409173 4 years ago
1 contributor
129 lines | 5.234kb
#!/usr/bin/env python3

import datetime
import csv

import bot
import send

# A function for constructing the daily report in a '.csv' file
def daily_report(num_closed_spreads, asset_profit):
    current_date = datetime.datetime.now()  # Current date
    day_before_date = current_date - datetime.timedelta(days=1)  # Date a day before
    
    day_before_date_str = day_before_date.strftime("%d.%m.%Y")
    
    report_name = day_before_date_str + '_daily.csv'
    report_path = 'reports/daily/' + report_name
    
    with open(report_path, 'w') as database:
            
        headers =['date', 'closed', 'profit']
        csv_writer = csv.DictWriter(database, headers)

        csv_writer.writeheader()
            
        csv_writer.writerow({'date':day_before_date_str, 'closed':str(num_closed_spreads), 'profit':str(asset_profit)})
    
    try:  # Try to send the generated report via email
        send.send_daily_report(report_name, day_before_date_str)
        print('\n| Daily Report has been Sent\n')
        
    except FileNotFoundError:
        print('[!!!] Cannot send the email: Report does not exists')
        
    except:
        print('[!!!] Cannot send the email: Unexpected Error')

# A function for constructing the weekly report in a '.csv' file
def weekly_report(num_closed_spreads, asset_profit):
    current_date = datetime.datetime.now()  # Current date
    week_before_date = current_date - datetime.timedelta(days=7)  # Date a week before

    current_date_str = current_date.strftime("%d.%m.%Y")
    week_before_date_str = week_before_date.strftime("%d.%m.%Y")
    
    report_name = week_before_date_str + '_' + current_date_str + '_weekly.csv'
    report_path = 'reports/weekly/' + report_name

    with open(report_path, 'w') as database:
            
        headers =['date', 'closed', 'profit']
        csv_writer = csv.DictWriter(database, headers)

        csv_writer.writeheader()
            
        csv_writer.writerow({'date':current_date_str, 'closed':str(num_closed_spreads), 'profit':str(asset_profit)})
        
    try:  # Try to send the generated report via email
        send.send_weekly_report(report_name, week_before_date_str + '-' + current_date_str)
        print('\n| Weekly Report has been Sent\n')
        
    except FileNotFoundError:
        print('[!!!] Cannot send the email: Report does not exists')
        
    except:
        print('[!!!] Cannot send the email: Unexpected Error')

# A function for getting the number of the previous month (ex. dec=12 => return nov=11)        
def _get_past_month_num():
    current_month_num = int(datetime.datetime.now().strftime("%m"))  # Get the current number of a month (1 - 12)
    
    if current_month_num == 1:
        return 12
    else:
        return current_month_num - 1

# A function for constructing the monthly report in a '.csv' file
def monthly_report(num_closed_spreads, asset_profit):
    current_date = datetime.datetime.now()  # Current date
    month_before_date = current_date.replace(month=_get_past_month_num())  # Date a month before
    
    current_date_str = current_date.strftime("%d.%m.%Y")
    month_before_date_str = month_before_date.strftime("%b.%Y")
    
    report_name = month_before_date_str + '_monthly.csv'
    report_path = 'reports/monthly/' + report_name

    with open(report_path, 'w') as database:
            
        headers =['date', 'closed', 'profit']
        csv_writer = csv.DictWriter(database, headers)

        csv_writer.writeheader()
            
        csv_writer.writerow({'date': current_date_str, 'closed':str(num_closed_spreads), 'profit':str(asset_profit)})
        
    try:  # Try to send the generated report via email
        send.send_monthly_report(report_name, month_before_date_str)
        print('\n| Monthly Report has been Sent\n')
        
    except FileNotFoundError:
        print('[!!!] Cannot send the email: Report does not exists')
        
    except:
        print('[!!!] Cannot send the email: Unexpected Error')

# A function for saving all closed BIDS and OFFERS
def save_order(type_, coin_price):
    current_date_str = datetime.datetime.now().strftime("%d.%m.%Y")  # Current date
    current_month_str = datetime.datetime.now().strftime("%b")  # Current month
    current_year_str = datetime.datetime.now().strftime("%Y")  # Current year

    try:  # Try to create a new file, if it does not exists and write down the info
        with open('orders/' + current_month_str + '_' + current_year_str + '_orders.csv', 'x') as database:
            
            headers =['date', 'pair', 'type', 'price', 'coins']
            csv_writer = csv.DictWriter(database, headers)

            csv_writer.writeheader()
    except FileExistsError:
        pass
    
    # However if the file already exists, then open it in 'append' mode
    with open('orders/' + current_month_str + '_' + current_year_str + '_orders.csv', 'a') as database:
            
        headers =['date', 'pair', 'type', 'price', 'coins']
        csv_writer = csv.DictWriter(database, headers)
             
        csv_writer.writerow({'date': current_date_str, 'pair': bot.TRADING_PAIR, 'type': type_, 'price': str(coin_price), 'coins': bot.COINS_PER_ORDER_TO_PRINT})