在给出价格清单和买卖指数清单的情况下,模拟利润的最有效方法是什么?

2024-05-23 17:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

现在,我正在手动模拟通过运行我的数据和包含交易费用的模拟交易,我将获得多少利润。我想知道有没有一种数学上等价的方法来计算利润

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

这是我需要它做的,还是我需要迭代我的数据


Tags: 交易tradesavgfirstlastbtctradeprofit