Двухполионная стратегия перекрестного торговли - это стратегия, которая рассчитывает средние линии с двумя различными параметрами, а также совершает покупку и продажу через перекресток средней линии. Эта стратегия проста и прямая.
Эта стратегия рассчитывает быстрые и медленные средние, вводя такие параметры, как быстрый средний цикл, медленный средний цикл, тип среднего.
В основном логика этой стратегии заключается в следующем:
Вводные параметры: быстрый среднелинейный цикл maLen1, медленный среднелинейный цикл maLen2, среднелинейный тип maTypeChoice
Вычисляется на основе параметров ввода быстрого среднего maValue1 и медленного среднего maValue2
Сравните две уравнительные линии отношений, которые определяют условия покупки и продажи:
Условия покупки: maValue1 на maValue2
Условия продажи: maValue1 под maValue2
Проведение соответствующих торговых операций при установлении условий покупки и продажи
Визуализация показывает сплошную линию и различает сплошную линию с разными цветами
Отправляем сигналы о покупке и продаже
Использование принципа двустороннего скрещивания, чтобы избежать ошибок, вызванных одиночным скрещиванием
Параметры однолинейности регулируемы для различных циклов
Логика транзакций проста, проста и понятна
Настройка сигналов покупки и продажи, позволяющая контролировать время торгов в режиме реального времени
Визуализация показывает равнолинейные движения, формируя интуитивные торговые показатели
Оптимизация параметров позволяет найти оптимальные комбинации параметров.
Используется для ретро-тестирования для поиска оптимальных параметров, а также для торговли на реальном рынке.
Уравненный пересечение легко производит ошибочный сигнал, который следует судить в сочетании с тенденцией и формой
При двойных вакуумах легко часто открывать позиции, что приводит к потерям в торговых сборах.
Неправильные параметры могут привести к слишком частой или нечастой торговле
Неожиданные события могут привести к сильным последствиям, которые невозможно остановить.
В случае прорыва больших циклов, краткосрочные показатели могут выйти из строя.
Это требует частого мониторинга и не может быть полностью автоматизированным.
Как избежать риска:
В сочетании с трендовыми показателями, чтобы избежать потрясений в торговле
В сочетании с формовыми показателями, подтверждение эффективности сигнала
Оптимизировать параметры, чтобы обеспечить разумную частоту транзакций
Установка стоп-потери, контроль за потерями
Устойчивость параметров проверки на многочасовые периоды
Использование фильтрации времени или сигнала для предотвращения ложных прорывов
Испытать параметры различных уравнений, чтобы найти оптимальные параметры
Проверка различных типов средних линий, выбор наиболее точных средних линий для получения сигналов
Сочетание трендовых индикаторов, чтобы избежать неблагоприятных сделок
В сочетании с показателями волатильности, вы можете определить подходящее время выхода.
Добавление фильтрации времени или сигнала для уменьшения погрешности сигнала
Установка слайдерных управлений для оптимизации эффективности торговли на реальном рынке
Многообразные многоциклические проверки устойчивости
Присоединяйтесь к стратегии автоматического предотвращения потерь
Исследование технологий, таких как машинное обучение, улучшает эффективность обратной связи
Стратегия двусмертного пересечения - это очень типичная стратегия технических индикаторов. Она использует принцип быстрого и медленного свершения, чтобы генерировать торговые сигналы и получать хорошие результаты повторного измерения с помощью оптимизации параметров. Однако эта стратегия также сопряжена с определенными рисками, которые требуют проверки в сочетании с другими техническими индикаторами, такими как тенденции, формы и т. д., чтобы снизить уровень ошибочных сигналов. Кроме того, в реальном торговле также необходимо учитывать торговые детали, такие как контроль точки скольжения. В целом, стратегия двусмертного пересечения подходит для операций средне-краткого периода и является одной из лучших торговых стратегий, которые просты в понимании и реализации.
/*backtest start: 2023-10-05 00:00:00 end: 2023-10-05 22:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // © sehweijun //study( title="Arch1tect's New Toy", shorttitle="Arch1tect's New Toy", overlay=true, resolution="") // strategy( title="Arch1tect's New Toy (Strategy Tester Version)", shorttitle="Arch1tect's New Toy (Strategy Tester Version)", overlay=true, initial_capital = 100000, commission_value=0.07, commission_type=strategy.commission.cash_per_contract) maTypeChoice = input( "EMA", title="MA Type", options=["EMA", "WMA", "SMA"] ) maSrc = input( close, title="MA Source" ) maLen1 = input( 15, minval=1, title="MA Length" ) maLen2 = input( 95, minval=1, title="MA Length" ) maValue1 = if ( maTypeChoice == "EMA" ) ema( maSrc, maLen1 ) else if ( maTypeChoice == "WMA" ) wma( maSrc, maLen1 ) else if ( maTypeChoice == "SMA" ) sma( maSrc, maLen1 ) else 0 maValue2 = if ( maTypeChoice == "EMA" ) ema( maSrc, maLen2 ) else if ( maTypeChoice == "WMA" ) wma( maSrc, maLen2 ) else if ( maTypeChoice == "SMA" ) sma( maSrc, maLen2 ) else 0 buySignal = crossover( maValue1, maValue2 ) sellSignal = crossunder( maValue1, maValue2 ) mainMAColour = ( maValue1 > maValue2 ) ? color.green : color.red plot( maValue1, title="Arch1tect's New Toy", color=mainMAColour, offset=0, linewidth=4 ) //plot( maValue2, title="Arch1tect's Filter", color=color.black, offset=0, linewidth=2 ) var color buyCandleColour = #00ff0a var color sellCandleColour = #ff1100 barcolor( buySignal ? buyCandleColour : sellSignal ? sellCandleColour : na, title="Signal Bar Colour" ) bgcolor( color=buySignal ? buyCandleColour : sellSignal ? sellCandleColour : na, transp=85, title="Signal Background Colour") alertcondition( buySignal or sellSignal, title="Signal change!", message="Signal change!") alertcondition( buySignal, title="Buy signal!", message="Buy signal!") alertcondition( sellSignal, title="Sell signal!", message="Sell signal!") // Strategy Tester stratTesterOn = input( title="Strategy Tester [ON/OFF]", group="Strategy Tester", type=input.bool, defval=true) entryTime = input( "2200-1200", title = "Daily trading time session (in Exchange GMT)", group="Strategy Tester", type = input.session ) startTime = input( "2200-2201", title = "Start Time", group="Strategy Tester", type = input.session ) maxDailyLoss = input( 2500, title = "Max daily loss", group="Strategy Tester", type = input.integer ) maxTotalDrawdown = input( 12000, title = "Max daily loss", group="Strategy Tester", type = input.integer ) contractSize = input( 1, title = "Contract size", group="Strategy Tester", type = input.integer ) tradeOnStartSess = input( title="First trade on session start [ON/OFF]", group="Strategy Tester", type=input.bool, defval=true) fixedTPSL = input( title="Fixed TP/SL PIPS [ON/OFF]", group="Strategy Tester", type=input.bool, defval=false) fixedTPValue = input ( 10.00, minval=0.01, type=input.float, title="TP", group="Strategy Tester" ) fixedSLValue = input ( 10.00, minval=0.01, type=input.float, title="SL", group="Strategy Tester" ) fromDay = input(defval = 1, title = "From Day", group="Date Range", type = input.integer, minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", group="Date Range", type = input.integer, minval = 1, maxval = 12) fromYear = input(defval = 2020, title = "From Year", group="Date Range", type = input.integer, minval = 1970) thruDay = input(defval = 1, title = "Thru Day", group="Date Range", type = input.integer, minval = 1, maxval = 31) thruMonth = input(defval = 1, title = "Thru Month", group="Date Range", type = input.integer, minval = 1, maxval = 12) thruYear = input(defval = 2112, title = "Thru Year", group="Date Range", type = input.integer, minval = 1970) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // strategy.risk.max_intraday_loss( maxDailyLoss, strategy.cash ) // strategy.risk.max_drawdown( maxTotalDrawdown, strategy.cash ) isTime(_position) => range = time( timeframe.period, _position + ':1234567' ) bgcolor( color=isTime( entryTime ) and stratTesterOn and window() ? color.yellow : na, title="Daily trading time session (in Exchange GMT)", transp=75 ) if ( stratTesterOn and window() ) if ( buySignal and isTime( entryTime ) ) if ( not fixedTPSL ) strategy.close_all() strategy.entry( "Buy", strategy.long, contractSize ) if ( fixedTPSL and strategy.position_size == 0 ) strategy.entry( "Buy", strategy.long, contractSize ) strategy.exit( "TP/SL", "Buy", stop=close[0]-fixedSLValue, limit=close[0]+fixedTPValue ) if ( sellSignal and isTime( entryTime )) if ( not fixedTPSL ) strategy.close_all() strategy.entry( "Sell", strategy.short, contractSize ) if ( fixedTPSL and strategy.position_size == 0 ) strategy.entry( "Sell", strategy.short, contractSize ) strategy.exit( "TP/SL", "Sell", stop=close[0]+fixedSLValue, limit=close[0]-fixedTPValue ) if ( isTime( startTime ) and tradeOnStartSess and strategy.position_size == 0 ) if ( maValue1 > maValue2 ) strategy.entry( "Buy", strategy.long, contractSize ) if ( fixedTPSL ) strategy.exit( "TP/SL", "Buy", stop=close[0]-fixedSLValue, limit=close[0]+fixedTPValue ) else strategy.entry( "Sell", strategy.short, contractSize ) if ( fixedTPSL ) strategy.exit( "TP/SL", "Sell", stop=close[0]+fixedSLValue, limit=close[0]-fixedTPValue ) strategy.close_all( when=not isTime( entryTime ) ) plot( strategy.equity )