Esta estratégia usa o indicador do oscilador estocástico para determinar as condições de mercado de sobrecompra e sobrevenda para negociação de curto prazo.
O indicador do oscilador estocástico consiste na linha %K e na linha %D. Quando a linha %K cruza acima da linha %D, um sinal de compra cruzada de ouro é gerado. Quando a linha %K cruza abaixo da linha %D, um sinal de venda cruzada de morte é acionado. Esta estratégia simplesmente segue os cruzados no indicador estocástico para determinar entradas.
Especificamente, quando há uma cruz de ouro no indicador estocástico, se o valor de %K for inferior a 80 (não sobrecomprado), uma posição longa será tomada.
GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
Esta estratégia utiliza uma abordagem de stop loss elástica, definindo o preço de stop com base em pontos pivô anteriores, como mostrado abaixo:
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
stoploss_long=valuewhen(piv_low,piv_low,0)
stoploss_short=valuewhen(piv_high,piv_high,0)
Os pivots representam níveis importantes de suporte e resistência. Se o preço atravessar o nível do pivô, a posição será fechada e o preço do stop loss seguirá elasticamente os pontos de pivô em mudança.
Além disso, o preço de parada também considera os preços mais altos e mais baixos do período em curso para uma otimização adicional:
if GoLong
stoploss_long := low<pl ? low : pl
if GoShort
stoploss_short := high>ph ? high : ph
Usando o Stochastic para evitar a perseguição de altos e baixos;
O stop loss elástico segue as mudanças do mercado e otimiza o preço do stop;
A redução de perdas baseada na ruptura do ponto de pivô é mais eficaz;
A otimização do preço de parada usando os preços mais altos e mais baixos atuais torna a parada mais precisa.
Risco de sinais falsos do Stochastic
Risco de preenchimento de stop loss e aumento da perda
Risco de alta frequência de negociação e comissões
Otimizar stop loss, usando métodos como Chandelier Exit, trailing stop, oscilando stop loss etc
Otimizar as regras de entrada com outros indicadores para evitar falsos sinais estocásticos
Otimizar a obtenção de lucros, utilizando a meta de lucro de rastreamento, a meta de lucro oscilante, etc., para aumentar a rentabilidade
Adicionar o tamanho da posição, como quantidade fixa por transação, percentagem de risco fixo, etc., ao controlo do risco por transação
Otimizar parâmetros como K, D períodos, suavização etc com base em diferentes mercados
Esta estratégia entra com base no Stochastic overbought/oversold e gerencia o risco com stop loss elástico. Tem a vantagem de evitar a perseguição de impulso, paradas eficazes, mas também tem alguns riscos de sinal falso. Melhorias futuras podem ser feitas em entradas, paradas, saídas, gerenciamento de risco etc.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 2h basePeriod: 15m 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/ // © Peter_O //@version=4 //strategy(title="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000) // This script was created for educational purposes only. // It is showing how to create pending orders and cancel them // Together with syntax to send these events through TradingView alerts system // All the way to brokers for execution TakeProfitLevel=input(400) // **** Entries logic **** { periodK = 13 //input(13, title="K", minval=1) periodD = 3 //input(3, title="D", minval=1) smoothK = 4 //input(4, title="Smooth", minval=1) k = sma(stoch(close, high, low, periodK), smoothK) d = sma(k, periodD) // plot(k, title="%K", color=color.blue) // plot(d, title="%D", color=color.orange) // h0 = hline(80) // h1 = hline(20) // fill(h0, h1, color=color.purple, transp=75) GoLong=crossover(k,d) and k<80 GoShort=crossunder(k,d) and k>20 // } End of entries logic // **** Pivot-points and stop-loss logic **** { piv_high = pivothigh(high,1,1) piv_low = pivotlow(low,1,1) var float stoploss_long=low var float stoploss_short=high pl=valuewhen(piv_low,piv_low,0) ph=valuewhen(piv_high,piv_high,0) if GoLong stoploss_long := low<pl ? low : pl if GoShort stoploss_short := high>ph ? high : ph plot(stoploss_long, color=color.lime, title="stoploss_long") plot(stoploss_short, color=color.red, title="stoploss_short") // } End of Pivot-points and stop-loss logic CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0 CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0 entry_distance=input(10, title="Entry distance for stop orders") plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny) plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny) strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick) strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel) strategy.cancel("Long", when = CancelLong) strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick) strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel) strategy.cancel("Short", when = CancelShort) if GoLong alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel) alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close) if GoShort alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel) alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close) if CancelLong alertsyntax_cancellong='cancel long' alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close) if CancelShort alertsyntax_cancelshort='cancel short' alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)