Самый эффективный способ симулировать прибыль с учетом списка цен и списка индексов покупки и продажи? - PullRequest
0 голосов
/ 06 ноября 2019

Прямо сейчас я вручную моделирую, какую прибыль я получу, используя мои данные и фальсифицируя торговлю с учетом торговых сборов. Мне интересно, учитывая эту информацию, существует ли математически эквивалентный способ расчета прибыли?

Пример.

def get_profit(peak_indexes, valley_indexes, trade_penalty):
    usdt, btc = 1, 0
    first_usdt, last_usdt = None, usdt
    holding = False
    trades = 0
    for idx, kline in enumerate(df['Close'].values):
        if idx in peak_indexes and holding:
            usdt = (btc * df['Close'].values[idx]) * (1 - trade_penalty)
            last_usdt = usdt
            if first_usdt is None:
                first_usdt = usdt
            btc = 0
            holding = False
            trades += 1
        elif idx in valley_indexes and not holding:
            btc = (usdt / df['Close'].values[idx]) * (1 - trade_penalty)
            usdt = 0
            holding = True
    market_chg = last_usdt / first_usdt - 1
    risk_free = last_usdt - 1
    prof = risk_free - market_chg
    return prof

Следует отметить, что мне не обязательно заботиться о сложении прибыли,но я хочу что-то, что учитывает количество сделок. Например, 3 сделки по 5% каждая лучше, чем 2 сделки по 5% каждая. Я думаю, что я хотел бы получить значение для средней доходности сделки за вычетом риска, умноженного на количество сделок. Это так просто, как что-то вроде:

avg_sell = np.mean(np.take(close_prices, peak_indexes))
avg_buy = np.mean(np.take(close_prices, valley_indexes))
avg_profit = avg_sell / avg_buy - 1
avg_profit -= trade_penalty
num_trades = min(len(peak_indexes), len(valley_indexes))
overall_profit = avg_profit * num_trades

Делает ли это то, что мне нужно, или мне нужно перебирать мои данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...