Эта стратегия использует перекрестный EMA для отслеживания ценовых тенденций. Она длится, когда быстрая EMA пересекает более медленной EMA, и закрывает позицию, когда быстрая EMA пересекает ниже медленной EMA. В основном подходит для продуктов с очевидными тенденциями, эффективно следующих за тенденциями и получающих избыточную доходность.
Основным показателем этой стратегии является EMA.
EMA (t) = C (t) ×2/ (n+1) + EMA (t-1) × (n-1) / (n+1)
где t - текущий тик, C ((t) - текущая цена закрытия, а n - значение параметра N. EMA - это метод скользящей средней с взвешенным коэффициентом, придающий большее значение последним ценам, тем самым быстрее реагируя на последние изменения цен.
Стратегия строит быстрые и медленные EMA и принимает быстрый переход EMA выше медленной EMA в качестве сигнала покупки, а быстрый переход EMA ниже медленной EMA в качестве сигнала продажи.
Преимущества этой стратегии:
Основными рисками являются:
Для снижения вышеуказанных рисков могут быть приняты следующие меры оптимизации:
Стратегия может быть оптимизирована из следующих аспектов:
В целом, это простая и практичная стратегия, использующая EMA для оценки ценовых тенденций. Логика ясна и проста в реализации. Преимущества заключаются в простоте корректировки параметров и эффективного следования тенденциям. Недостатки склонны к ложным сигналам, а фактическая производительность может быть уступать бэкстестам. Следующие шаги оптимизации могут сосредоточиться на добавлении фильтров, динамических параметров, построении модели, чтобы сделать стратегию более надежной.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("EMA交叉策略by GPT", format = format.inherit, overlay = true, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, initial_capital = 1000000) // 定義回測交易開始和結束時間的變數 start_time = input(title="開始時間", type=input.time, defval=timestamp("01 Jan 2020 00:00 +0000")) end_time = input(title="結束時間", type=input.time, defval=timestamp("31 Dec 2050 23:59 +0000")) // 判斷是否在回測交易時間範圍內 in_range = true // Define input variables fast_length = input(title="Fast EMA Length", type=input.integer, defval=5) slow_length = input(title="Slow EMA Length", type=input.integer, defval=20) // Define EMAs fast_ema = ema(close, fast_length) slow_ema = ema(close, slow_length) // Define buy and sell signals buy_signal = crossover(fast_ema, slow_ema) sell_signal = crossunder(fast_ema, slow_ema) // Buy signal if in_range and buy_signal strategy.entry("Buy", strategy.long, when=in_range) // Sell signal if in_range and sell_signal strategy.close("Buy", when=sell_signal)