Golden Cross Moving Average Trading Strategy - классическая количественная стратегия торговли. Эта стратегия использует скользящие средние разных периодов для определения рыночных тенденций для длинных и коротких позиций. Когда краткосрочная скользящая средняя пересекает длинную скользящую среднюю, это считается сигналом покупки. Когда краткосрочная скользящая средняя пересекает длинную скользящую среднюю, это считается сигналом продажи.
Эта стратегия основана на трех простых скользящих средних (SMA) различных периодов: 50-дневный, 100-дневный и 200-дневный.
Сигнал входа: когда 50-дневная скользящая средняя пересекает 100-дневную скользящую среднюю, перейти на длинный курс.
Сигнал выхода: когда 50-дневная скользящая средняя пересекается ниже 100-дневной скользящей средней, закрываются позиции; или когда цена закрытия находится ниже 100-дневной скользящей средней, выходит; или когда 100-дневная скользящая средняя пересекается ниже 200-дневной скользящей средней, выходит.
Приобретение прибыли и стоп-лосс: установка последующей прибыли и фиксированная стоп-лосс.
Эта стратегия использует способность скользящих средних для эффективного определения тенденций средней цены на рынке.
Простая в реализации, требует всего трех скользящих средних различных периодов.
Движущиеся средние имеют возможности фильтрации шума, которые уменьшают влияние рыночной случайности на сделки и делают сигналы более надежными.
Движущиеся средние эффективно отражают изменения средней тенденции рыночной цены, используя перекрестки между краткосрочными и долгосрочными линиями для определения основных изменений тенденции.
Периоды скользящей средней могут быть скорректированы для различных уровней контроля риска.
Частые перекрестки могут происходить, когда краткосрочные и долгосрочные средние показатели слишком близки, что приводит к чрезмерному количеству недействительных сигналов.
Движущиеся средние реагируют на изменения цен медленно и не могут мгновенно реагировать на новости рынка и основные события.
Невозможность извлечь выгоду из незначительных колебаний.
Субъективный выбор параметров: соответствующие периоды скользящих средних в значительной степени субъективны и зависят от конкретного рынка.
Добавьте фильтры, чтобы уменьшить ложные сигналы, такие как фильтры ценового диапазона, чтобы ограничить сигналы движениями выше определенной величины.
Включить другие показатели для комбинационных стратегий, которые могут улучшить точность сигналов, например, показатели волатильности или объема.
Добавление модулей адаптивной оптимизации для динамической оптимизации скользящих средних периодов на основе алгоритмов машинного обучения, что позволяет адаптироваться к изменяющимся рыночным условиям.
Использование передовых моделей глубокого обучения вместо скользящих средних для более высоких возможностей извлечения и моделирования.
Golden Cross Moving Average Trading Strategy - это типичная стратегия, следующая за трендом. Она отражает тенденции средней рыночной цены просто и практически, подходит для новичков. Однако у нее также есть некоторые недостатки, которые могут быть улучшены за счет улучшения качества сигнала, объединения с другими техническими индикаторами, внедрения адаптивных механизмов и т. д. для адаптации к более сложным рынкам. В целом, это стратегия с высокой справочной и учебной ценностью.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1m basePeriod: 1m 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/ // © CJDeegan //@version=4 strategy(title = "[LIVE] Golden Cross", overlay=true) // ------------Functions------------ //Percent to Decimal Conversion perToDec(a) => a * 0.01 //Price Difference to Tick diffToTick(a,b) => (a - b) / syminfo.mintick // ------------Strategy Inputs------------ takeProfitInput = input(300, "Take Profit Price (% Gain)") stopLossInput = input(25, "Stop Loss (% Loss)") startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2018, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2031, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // ------------Populate Indicators------------ //EMA sma50 = sma(close,50) sma100 = sma(close,100) sma200 = sma(close,200) // ------------Entry Logic------------ //Guards entryGuard = true //Triggers entryTrigger = crossover(sma50,sma100) //Conditions entryCondition = entryGuard and entryTrigger //Calculations //Execution if (inDateRange and entryCondition) strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry") //------------Exit Logic------------ //Guards //Triggers exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200) //Conditions exitCondition = exitTrigger //Calculations //Take Profit takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput)) //Take Profit Ticks takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price) //StopLoss stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput)) //Execution if (inDateRange) strategy.close("Long", when = exitCondition, comment = "Sell Trigger") strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice) //Plots plot(sma50, "SMA 50", color = color.blue) plot(sma100, "SMA 100", color = color.green) plot(sma200, "SMA 200", color = color.yellow) entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr) profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr) stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr) fill(entry,profit, color=color.green) fill(entry,stop, color=color.red)