A estratégia de negociação de cruzamento de duas linhas equiláteros é feita através da computação de duas linhas equiláteros de diferentes configurações de parâmetros e realiza operações de compra e venda através de cruzamentos de linhas equiláteros. A estratégia é simples e direta, adequada para negociação de curto e médio prazo.
A estratégia é calculada principalmente através da entrada de parâmetros como o ciclo de média rápida, o ciclo de média lenta e o tipo de média. A compra é feita quando a média rápida atravessa a média lenta e a venda é feita quando a média rápida atravessa a média lenta.
A lógica central da estratégia é:
Parâmetros de entrada: ciclo médio rápido maLen1, ciclo médio lento maLen2, tipo médio maTypeChoice
Calculando a média rápida maValue1 e a média lenta maValue2 de acordo com os parâmetros de entrada
Comparação de duas relações de tamanho e linha média para definir as condições de compra e venda:
Condições de compra: maValue1 com maValue2
Condições de venda: maValue1 com maValue2
Realizar operações de transação correspondentes quando as condições de compra e venda estiverem estabelecidas
Visualizar a relação entre a linha média e o tamanho da linha média em diferentes cores
Enviar sinais de compra e venda
Usando o princípio de dupla transversal uniforme, evitar ser enganado por uma única oscilação uniforme
Parâmetros de linha média ajustáveis para diferentes operações de ciclo
A lógica de transação é simples, direta e fácil de entender
Indicações de compra e venda personalizadas, com tempo real de negociação
Indicador de negociação intuitivo
Pode-se encontrar a melhor combinação de parâmetros através de otimização de parâmetros
Pode ser usado para rastrear e encontrar os melhores parâmetros, também pode ser usado para negociação em disco rígido
O cruzamento de equilíbrio é propenso a produzir sinais errados, que devem ser julgados em combinação com tendências e formas.
Quando os binários estão em equilíbrio, é fácil abrir posições com frequência e perder custos de negociação.
Parâmetros errados podem levar a transações muito ou pouco frequentes
A situação pode se tornar violenta e não pode ser controlada.
Indicadores de curto período podem falhar quando um grande ciclo se rompe
O que é necessário é monitoramento frequente e não pode ser totalmente automático.
A solução para o risco:
Combinação de indicadores de tendência para evitar negociação de barras de choque
Combinação de indicadores morfológicos para confirmar a eficácia do sinal
Parâmetros de otimização para que a frequência de negociação seja razoável
Configurar um ponto de parada de perda para controlar a perda individual
Verificação de estabilidade de parâmetros por períodos de tempo múltiplos
Filtragem de tempo ou sinal para evitar falsas brechas
Teste diferentes parâmetros de média para encontrar o melhor parâmetro
Testar diferentes tipos de linha média e selecionar a linha média mais precisa para produzir o sinal
Combinação de indicadores de tendência para evitar transações fora de tendência
Combinando os indicadores de flutuação para determinar o momento certo para jogar
Adicionar filtros de tempo ou sinal para reduzir sinais errados
Configuração de controle de ponto de deslizamento para otimizar o efeito de negociação em disco rígido
Estabilidade comprovada por múltiplos ciclos
Aderir a uma estratégia de stop loss automática
Explorar tecnologias como a aprendizagem de máquina para melhorar a detecção
A estratégia de cruzamento de dupla equilíbrio é uma estratégia de indicadores técnicos muito típica. Ela usa o princípio de cruzamento de equilíbrio rápido e lento para gerar sinais de negociação, e pode obter bons resultados de retrospectiva por meio da otimização de parâmetros. Mas a estratégia também possui um certo risco, e precisa ser validada com outros indicadores técnicos, como tendências, formas, etc., para reduzir a taxa de sinais errados.
/*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 )