Estratégia de negociação automática baseada no STOCH

Autora:ChaoZhang, Data: 23 de janeiro de 2023
Tags:

Esta estratégia projeta um sistema de negociação automática simples baseado no indicador STOCH. É adequado para Forex, índices de ações, commodities e pode ser estendido para ações e mercados de criptomoedas.

Estratégia geral

Esta estratégia identifica estados de sobrecompra e sobrevenda usando o indicador STOCH combinado com pontos PIVOT para definir posições de stop loss, realizando a tendência seguinte. Ele vai longo ou curto quando o indicador STOCH mostra sinais de sobrecompra ou sobrevenda. Os pontos de stop loss são definidos perto dos pontos PIVOT do dia para controlar efetivamente os riscos. Os pontos de lucro parcial são definidos para fechar posições parciais após certo nível de lucro.

Estratégia lógica

Esta estratégia utiliza o cruzamento de linhas %K e %D do indicador STOCH para gerar sinais longos e curtos. Especificamente, quando a linha %K cruza acima da linha %D, ela vai longo. Quando a linha %K cruza abaixo da linha %D, ela vai curta. Isso captura os estados de sobrecompra e sobrevenda.

Para controlar os riscos, o ponto de stop loss longo é definido perto do ponto PIVOT mais baixo diário e o ponto de stop loss curto é definido perto do ponto PIVOT mais alto diário.

Para lucro parcial, fecha 50% da posição após um certo nível de lucro após a abertura da posição.

Em resumo, esta estratégia Captura pontos de sobrecompra e sobrevenda adequadamente; Controla riscos usando stop loss; e otimiza a eficiência do uso de capital.

Forças da estratégia

  • A utilização do indicador STOCH permite capturar de forma eficaz os estados de sobrecompra e sobrevenda.

  • O mecanismo de captação parcial de lucro otimiza a eficiência do uso do capital.

  • Os parâmetros personalizáveis permitem flexibilidade com base nas condições do mercado e na preferência de risco.

  • Lógica simples e clara, fácil de compreender e dominar para todos os comerciantes.

Riscos estratégicos

  • Como uma estratégia de tendência, pode ficar preso em mercados de faixa e não obter lucro.

  • O STOCH pode gerar sinais falsos, causando negociações desnecessárias.

  • A distância de stop loss perto dos pontos de pivô pode ser muito próxima após a ruptura.

  • Alguns parâmetros, como o período, podem precisar de ajustamentos para diferentes mercados, caso contrário, afetam o desempenho da estratégia.

  • O backtest baseia-se apenas em dados históricos, não pode garantir o desempenho futuro, mais fatores incontroláveis na negociação ao vivo.

  • Os sistemas de negociação automática exigem conexões estáveis para evitar problemas de execução de negociações.

Optimização da Estratégia

  • Adicionar um filtro de tendência para evitar negociações sem tendências claras, como usar MA para determinar a direção da tendência.

  • Adicionar análise de volume para detectar falhas e evitar armadilhas.

  • Ajustar parâmetros como entradas STOCH com base em diferentes produtos e prazos para otimizar o desempenho.

  • Considere algoritmos de aprendizado de máquina para treinar modelos usando big data e otimizar automaticamente parâmetros.

  • Definir o rácio do fator de lucro para introduzir o controle de risco e evitar grandes perdas de negócios.

  • Adicionar mais filtros como condições de negociação, fundamentos para melhorar a taxa de vitória.

Conclusão

Esta estratégia adota uma abordagem simples e intuitiva de tendência baseada no indicador STOCH para identificar pontos de sobrecompra / sobrevenda. Com o PIVOT stop loss para controlar o risco e lucro parcial para otimizar a eficiência do capital. O projeto abrange Capture, Control e Optimize. A lógica é simples e personalizável. Mas também tem alguns riscos e pode ser otimizada ainda mais.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
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 - Forex, indices, commodities, stocks, crypto", commission_type=strategy.commission.cash_per_contract, commission_value=0.00003, overlay=false, default_qty_value=20000, initial_capital=1000)
//
// This script was created for educational purposes only.
// It is showing how to use Alerts-Straight-From-Strategies and
// dynamic variables in TradingView alerts.
// And how to auto-execute them in Forex, indices, commodities markets
// 
// (This method will also work with stocks and crypto - anything your 
// broker is offering via their MT4/MT5 platform).
 
TakeProfitLevel=input(400)
TakePartialProfitLevel=input(150)

// **** Entries logic **** {
periodK = input(13, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = 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 and year>2009
GoShort=crossunder(k,d) and k>20 and year>2009

AlertTest=open>close or open<close or open==close
// } 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
// } End of Pivot-points and stop-loss logic

// **** Trade counter and partial closing mechanism **** {
var int trade_id=0
if GoLong or GoShort
    trade_id:=trade_id+1

TakePartialProfitLong = barssince(GoLong)<barssince(GoShort) and crossover(high,(valuewhen(GoLong,close,0)+TakePartialProfitLevel*syminfo.mintick))
TakePartialProfitShort = barssince(GoLong)>barssince(GoShort) and crossunder(low,(valuewhen(GoShort,close,0)-TakePartialProfitLevel*syminfo.mintick))
// } End of Trade counter and partial closing mechanism

strategy.entry("Long", strategy.long, when=GoLong)
strategy.exit("XPartLong", from_entry="Long", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.entry("Short", strategy.short, when=GoShort)
strategy.exit("XPartShort", from_entry="Short", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)

if GoLong
    alertsyntax_golong='long slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if TakePartialProfitLong
    alertsyntax_closepartlong='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartlong, freq=alert.freq_once_per_bar_close)
if TakePartialProfitShort
    alertsyntax_closepartshort='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartshort, freq=alert.freq_once_per_bar_close)


Mais.