Esta estratégia é projetada com base no princípio da cruz de ouro das médias móveis. Especificamente, usa duas médias móveis simples de períodos diferentes, a saber, a linha de 50 períodos e a linha de 200 períodos. Quando a linha de 50 períodos atravessa a linha de 200 períodos de baixo, um sinal de compra é gerado. Quando a linha de 50 períodos atravessa a linha de 200 períodos de cima, um sinal de venda é gerado.
A estratégia é escrita na linguagem Pine Script, com a lógica principal como segue:
A importância do uso do indicador SMA aqui é que ele pode efetivamente filtrar o ruído do mercado e capturar tendências de longo prazo.
A estratégia apresenta as seguintes vantagens:
A estratégia apresenta também alguns riscos:
Pode ajustar dois parâmetros SMA para reduzir a probabilidade de falha.
Não pode responder ao mercado de curto prazo, apenas adequado para investidores de longo prazo.
Pode definir stop loss, ou ajustar adequadamente a gestão da posição.
A estratégia pode ser ainda melhorada nos seguintes aspectos:
Adicionar outros indicadores de filtragem, combinando várias condições de compra/venda para reduzir os falsos sinais.
Mecanismo de stop loss obrigatório quando o preço ultrapassa um determinado nível.
Otimizar a gestão de posições, tais como pirâmide ao longo da tendência, trailing stop loss, etc. Para controlar o drawdown e buscar um maior retorno.
Optimização de parâmetros: avaliar o impacto de diferentes parâmetros na relação rendimento/risco.
Em geral, esta é uma estratégia típica de rastreamento de tendências. Utiliza a vantagem da SMA para capturar de forma simples e eficiente tendências de longo prazo. Pode personalizar com base no estilo e no espaço de ajuste de um. Também precisa notar deficiências existentes para otimização e melhoria.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // www.tradingview.com/u/TradeFab/ // www.tradefab.com // ___ __ __ __ __ __ // | |__) /\ | \ |__ |__ /\ |__) // | | \ /~~\ |__/ |__ | /~~\ |__) // // DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss // and is not suitable for every investor. You are responsible for all the risks and // financial resources you use and for the chosen trading system. // Past performance is not indicative for future results. In making an investment decision, // traders must rely on their own examination of the entity making the trading decisions! // // TradeFab's Golden Cross Strategy. // The strategy goes long when the faster SMA 50 (the simple moving average of the last 50 bars) crosses // above the SMA 200. Orders are closed when the SMA 50 crosses below SMA 200. The strategy does not short. // VERSION = "1.2" // 1.2 FB 2020-02-09 converted to Pine version 4 // 1.1 FB 2017-01-15 added short trading // 1.0 FB 2017-01-13 basic version using SMAs // strategy( title = "TFs Golden Cross " + VERSION, shorttitle = "TFs Golden Cross " + VERSION, overlay = true ) /////////////////////////////////////////////////////////// // === INPUTS === /////////////////////////////////////////////////////////// inFastSmaPeriod = input(title="Fast SMA Period", type=input.integer, defval=50, minval=1) inSlowSmaPeriod = input(title="Slow SMA Period", type=input.integer, defval=200, minval=1) // backtest period testStartYear = input(title="Backtest Start Year", type=input.integer, defval=2019, minval=2000) testStartMonth = input(title="Backtest Start Month", type=input.integer, defval=1, minval=1, maxval=12) testStartDay = input(title="Backtest Start Day", type=input.integer, defval=1, minval=1, maxval=31) testStopYear = input(title="Backtest Stop Year", type=input.integer, defval=2099, minval=2000) testStopMonth = input(title="Backtest Stop Month", type=input.integer, defval=12, minval=1, maxval=12) testStopDay = input(title="Backtest Stop Day", type=input.integer, defval=31, minval=1, maxval=31) /////////////////////////////////////////////////////////// // === LOGIC === /////////////////////////////////////////////////////////// smaFast = sma(close, inFastSmaPeriod) smaSlow = sma(close, inSlowSmaPeriod) bullishCross = crossover (smaFast, smaSlow) bearishCross = crossunder(smaFast, smaSlow) // detect valid backtest period isTestPeriod() => true /////////////////////////////////////////////////////////// // === POSITION EXECUTION === /////////////////////////////////////////////////////////// strategy.entry("long", strategy.long, when=bullishCross) strategy.entry("short", strategy.short, when=bearishCross) /////////////////////////////////////////////////////////// // === PLOTTING === /////////////////////////////////////////////////////////// // background color nopColor = color.new(color.gray, 50) bgcolor(not isTestPeriod() ? nopColor : na) bartrendcolor = close > smaFast and close > smaSlow and change(smaSlow) > 0 ? color.green : close < smaFast and close < smaSlow and change(smaSlow) < 0 ? color.red : color.blue barcolor(bartrendcolor) plot(smaFast, color=change(smaFast) > 0 ? color.green : color.red, linewidth=2) plot(smaSlow, color=change(smaSlow) > 0 ? color.green : color.red, linewidth=2) // label posColor = color.new(color.green, 75) negColor = color.new(color.red, 75) dftColor = color.new(color.blue, 75) posProfit= (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0 posDir = (strategy.position_size > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat" posCol = (posProfit > 0) ? posColor : (posProfit < 0) ? negColor : dftColor var label lb = na label.delete(lb) lb := label.new(bar_index, max(high, highest(5)[1]), color=posCol, text="Pos: "+ posDir + "\nPnL: "+tostring(posProfit, "#.##")+"%" + "\nClose: "+tostring(close, "#.##"))