Прямо сейчас я вручную моделирую, какую прибыль я получу, используя мои данные и фальсифицируя торговлю с учетом торговых сборов. Мне интересно, учитывая эту информацию, существует ли математически эквивалентный способ расчета прибыли?
Пример.
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
Делает ли это то, что мне нужно, или мне нужно перебирать мои данные?