Эта стратегия представляет собой простую скользящую среднюю (SMA) кроссоверную стратегию, подходящую для криптовалютных рынков. Она использует быстрые, средние и медленные SMA для идентификации потенциальных сигналов входа и выхода. Когда быстрая SMA пересекает среднюю SMA, генерируется сигнал покупки. Когда быстрая SMA пересекает среднюю SMA, генерируется сигнал продажи.
Стратегия позволяет трейдерам устанавливать следующие ключевые параметры:
Быстрая SMA, средняя SMA и медленная SMA рассчитываются на основе длин SMA, установленных пользователем.
Когда быстрая SMA пересекает среднюю SMA, генерируется сигнал покупки. Когда быстрая SMA пересекает среднюю SMA, генерируется сигнал продажи.
Стратегия рассчитывает номинальную основную сумму за сделку на основе средств счета и процента допустимого риска за сделку. Затем она использует ATR для расчета диапазона стоп-лосса и в конечном итоге определяет размер позиции для каждой сделки.
Может оптимизировать сокращение периодов SMA, добавление других индикаторов и т.д.
Эта стратегия объединяет правила перекрестного использования SMA, управление рисками и размещение позиций для обеспечения надежной тенденционной системы, подходящей для крипторынков.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Onchain Edge Trend SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Configuration Parameters priceSource = input(close, title="Price Source") includeIncompleteBars = input(true, title="Consider Incomplete Bars") maForecastMethod = input(defval="flat", options=["flat", "linreg"], title="Moving Average Prediction Method") linearRegressionLength = input(3, title="Linear Regression Length") fastMALength = input(7, title="Fast Moving Average Length") mediumMALength = input(30, title="Medium Moving Average Length") slowMALength = input(50, title="Slow Moving Average Length") tradingCapital = input(100000, title="Trading Capital") tradeRisk = input(1, title="Trade Risk (%)") // Calculation of Moving Averages calculateMA(source, period) => sma(source, period) predictMA(source, forecastLength, regressionLength) => maForecastMethod == "flat" ? source : linreg(source, regressionLength, forecastLength) offset = includeIncompleteBars ? 0 : 1 actualSource = priceSource[offset] fastMA = calculateMA(actualSource, fastMALength) mediumMA = calculateMA(actualSource, mediumMALength) slowMA = calculateMA(actualSource, slowMALength) // Trading Logic enterLong = crossover(fastMA, mediumMA) exitLong = crossunder(fastMA, mediumMA) // Risk and Position Sizing riskCapital = tradingCapital * tradeRisk / 100 lossThreshold = atr(14) * 2 tradeSize = riskCapital / lossThreshold if (enterLong) strategy.entry("Enter Long", strategy.long, qty=tradeSize) if (exitLong) strategy.close("Enter Long") // Display Moving Averages plot(fastMA, color=color.blue, linewidth=2, title="Fast Moving Average") plot(mediumMA, color=color.purple, linewidth=2, title="Medium Moving Average") plot(slowMA, color=color.red, linewidth=2, title="Slow Moving Average")