Двухлинейная перекрестная торговая стратегия - это стратегия, используемая для вычисления средней линии с двумя различными параметрами и совершения операций по покупке и продаже через перекрестку средней линии. Эта стратегия проста и непосредственна и подходит для среднесрочных и краткосрочных торгов.
Эта стратегия основана на вычислении быстрых средних и медленных средних линий путем ввода параметров, таких как быстрый средний цикл, медленный средний цикл и тип средних линий. Операции по покупке совершаются, когда быстрый средний пересекает медленный средний, а операции по продаже - когда быстрый средний пересекает медленный средний.
Основная логика этой стратегии заключается в следующем:
Ввод параметров: быстрый среднелинейный период 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 )