Эта стратегия отслеживает ценовую тенденцию криптовалют, устанавливая высокие и низкие цены.
Эта стратегия в основном использует метод взвешенной скользящей средней, чтобы определить, есть ли очевидная тенденция к росту или к снижению. В частности, она будет регистрировать самые высокие и самые низкие цены за определенный период. Когда фактическая торговая цена превышает зарегистрированную самую высокую цену, считается, что произошла тенденция к росту, и она будет длинной. Когда фактическая торговая цена ниже зарегистрированной самой низкой цены, считается, что произошла тенденция к снижению, и она будет короткой.
Цены открытия длинного и короткого курсов устанавливаются с помощью параметра ввода
В частности, основная логика стратегии заключается в следующем:
Через эту логическую петлю он может улавливать восходящие и нисходящие тенденции цены и достигать следующего тренда.
Самое большое преимущество этой стратегии заключается в том, что путем корректировки параметров она может автоматически улавливать ценовые тенденции без необходимости ручного суждения о направлении тренда.
Кроме того, эта стратегия очень подходит для количественной торговли и может легко достичь автоматизированного размещения заказов.
Наконец, эта стратегия также может максимизировать доходность путем корректировки параметров.
Наибольший риск этой стратегии заключается в том, что неправильное настройка параметров может привести к чрезмерной частоте торговли, увеличению комиссионных за торговлю и сдвигу убытков.
Кроме того, неправильная настройка параметров может также привести к неспособности вовремя улавливать ценовые тенденции, упуская торговые возможности.
Наконец, эта стратегия слишком чувствительна к краткосрочному шуму рынка, который может генерировать неправильные торговые сигналы.
Следующие аспекты могут быть дополнительно оптимизированы для этой стратегии:
Добавьте логику остановки убытков. Это позволяет остановить убытки, когда убытки превышают определенный процент, чтобы избежать больших потерь.
Добавьте фильтры технических индикаторов, такие как скользящая средняя, KDJ, чтобы судить об общем тренде, чтобы избежать чрезмерной торговли из-за краткосрочного шума.
Оптимизировать логику настройки параметров. Механизм адаптивного изменения может быть установлен для параметров ENTRY и EXIT, а не статического настройки, чтобы они могли корректироваться в зависимости от рыночных условий.
Используйте машинное обучение для обучения оптимальных параметров. Получите оптимальные настройки ENTRY и EXIT для текущей рыночной среды посредством массивного обучения историческим данным.
Самое большое преимущество этой стратегии заключается в том, что, захватывая ценовые тенденции, она достигает автоматизированной торговли, которая может уменьшить влияние человеческих эмоций на торговлю, снизить риски и повысить эффективность.
Основными рисками стратегии являются неправильные настройки параметров и чрезмерная чувствительность к шуму рынка.Это необходимо улучшить с помощью стоп-лосса, фильтров индикаторов, адаптивной оптимизации параметров и многого другого.
В целом, это простая и эффективная стратегия, подходящая для количественной и автоматизированной торговли.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JstMtlQC //@version=4 strategy("Trend Following Breakout",calc_on_order_fills=true,calc_on_every_tick =false, overlay=true, initial_capital=2000,commission_value=.1,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) /////////////// INPUT ENTRY EXIT entry= input(100, "ENTRY H/L") exit= input(50, "EXIT H/L") /////////////// Backtest Input FromYear = input(2015, "Backtest Start Year") FromMonth = input(1, "Backtest Start Month") FromDay = input(1, "Backtest Start Day") ToYear = input(2999, "Backtest End Year") ToMonth = input(1, "Backtest End Month") ToDay = input(1, "Backtest End Day") /////////////// Backtest Setting start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false /////////////// BUY OPEN PLOT highestpricelong = highest(high,entry)[1] plot(highestpricelong, color=color.green, linewidth=2) /////////////// BUY CLOSE PLOT lowestpricelong = lowest(high,exit)[1] plot(lowestpricelong, color=color.green, linewidth=2) /////////////// SHORT OPEN PLOT lowestpriceshort = lowest(low,entry)[1] plot(lowestpriceshort, color=color.red, linewidth=2) /////////////// SHORT CLOSE PLOT highestpriceshort = highest(low,exit)[1] plot(highestpriceshort, color=color.red, linewidth=2) /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////// CONDITION LONG SHORT ////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////// SHORT entryshort= crossunder(close, lowestpriceshort) exitshort= crossover(close,highestpriceshort) /////////////// LONG exitlong= crossover(close, lowestpricelong) entrylong= crossover(close,highestpricelong) /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////// LONG and SHORT ORDER ////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////// LONG if (entrylong) strategy.entry("LongEntry", strategy.long, when = window()) if (exitlong or entryshort) strategy.close("LongEntry", when=window()) /////////////// SHORT if (entryshort) strategy.entry("short", strategy.short, when = window()) if (exitshort or entrylong) strategy.close("short", when=window())