Это стратегия торговли фьючерсами, которая использует механизм мартингейла для достижения высокой доходности.
Основная логика этой стратегии заключается в следующем: когда цена запускает линию стоп-лосса, открыть позиции с большим размером, снижая линию стоп-лосса на определенный процент. Увеличивая размеры позиций, он стремится снизить среднюю цену входа. Когда количество позиций достигает установленного максимального количества заказов, он ждет переворота цены, чтобы получить прибыль.
В частности, он сначала входит по текущей цене с установленным размером позиции и получает уровень прибыли / убытка. Когда цена движется к линии стоп-лосса, более крупные позиции будут вновь открыты, и линия стоп-лосса снижается на установленный процент. Такие операции по повторному открытию и снижению стоп-лосса снизят среднюю цену открытия, увеличивая потенциал прибыли. После того, как количество дополнительных заказов достигнет максимума, он ждет переворота цены, чтобы получить прибыль.
Самое большое преимущество заключается в возможности снизить стоимость за счет повторного открытия с использованием кредитного плеча, при этом имея шанс на благоприятное изменение, когда тенденции отрицательны.
Он также хорошо работает для сырьевых товаров и других рынков с высокой волатильностью, увеличивая прибыль/убытки с помощью кредитного плеча.
Основной риск заключается в том, что цена может продолжить снижающийся тренд после возобновления, даже превышая предыдущие уровни стоп-лосса, что приводит к большим потерям. Это может быть смягчено путем установления более широкого процента стоп-лосса, меньшего коэффициента рычага и т. д.
Еще один риск заключается в недостаточном капитале для поддержки максимального количества заказов до отмены.
Некоторые способы дальнейшей оптимизации стратегии:
Динамически регулировать уровень кредиторской привлекательности, снижая прибыль и повышая при убытках
Включать индикаторы тренда для остановки потерь при неясности тренда
Установка ширины стоп-лосса на основе волатильности рынка, более широкая при волатильности
Добавить модули автоматического остановки для ограничения чрезвычайных потерь
Это типичная торговая стратегия мартингейла с использованием рычага. Снижая стоимость за счет добавления заказов, он добивается более высокой доходности, но также вводит риски.
/*backtest start: 2023-01-19 00:00:00 end: 2024-01-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Leveraged Martingale Strategy with Fees", overlay=true) // User-defined input parameters var float takeProfitPct = input(2.0, title="Take Profit Percentage") / 100.0 var float positionMultiplier = input(2.0, title="Position Size Multiplier") var int maxOrders = input(10, title="Maximum Number of Reinforced Orders") var float tradeSizeUSD = input(10000.0, title="Trade Size in USD") var float dropPctForNextTrade = input(1.0, title="Drop Percentage for Next Trade") / 100.0 var float leverage = input(5.0, title="Leverage Factor") var bool enterAtCurrentPrice = input(true, title="Enter First Trade at Current Price") var float takerFeePct = input(0.1, title="Taker Order Fee Percentage") / 100.0 // State variables var float last_entry_price = na var float avg_entry_price = na var float total_position_size = 0.0 var int num_trades = 0 // Entry logic if (num_trades == 0) if (enterAtCurrentPrice or close < last_entry_price * (1 - dropPctForNextTrade)) float size = tradeSizeUSD / close * leverage strategy.entry("Long", strategy.long, qty=size) avg_entry_price := close total_position_size := size last_entry_price := close num_trades := 1 else if (close < last_entry_price * (1 - dropPctForNextTrade) and num_trades < maxOrders) float size = tradeSizeUSD / close * leverage * pow(positionMultiplier, num_trades) strategy.entry("Double Long" + tostring(num_trades), strategy.long, qty=size) avg_entry_price := ((avg_entry_price * total_position_size) + (close * size)) / (total_position_size + size) total_position_size := total_position_size + size last_entry_price := close num_trades := num_trades + 1 // Take profit logic adjusted for leverage and fees var float take_profit_price = na var float fee_deduction = na if (num_trades > 0) take_profit_price := avg_entry_price * (1 + takeProfitPct / leverage) fee_deduction := total_position_size * close * takerFeePct if (close > take_profit_price + fee_deduction / total_position_size) strategy.close_all() num_trades := 0