
O objetivo desta estratégia é testar se diferentes variáveis de entrada, como a cor da linha K, o volume de transação e o método aleatório, podem ser usados para prever a mudança de preço em forma de ondas positivas. A estratégia converte essas variáveis em forma de ondas positivas, quando o pico ou o vale da onda atingem um número definido de vezes, para tomar uma decisão de compra ou venda.
A estratégia é dividida em três partes: a primeira parte detecta a mudança de cor das linhas K. Quando várias linhas K da mesma cor são seguidas por uma outra cor, as ondas sinistras são desviadas. A segunda parte detecta se o volume de transação está acima ou abaixo da média, e as ondas são desviadas quando a média é ultrapassada.
O código controla o funcionamento das ondas, rastreando a direção atual das três ondas, o pico das ondas e a situação da linha K anterior. Quando o pico das ondas atinge o parâmetro definido, a direção de funcionamento é alterada. O funcionamento das ondas positivas é simulado por este ciclo.
A teoria das ondas sincronizadas parece ser muito razoável, e as ondas simuladas também têm uma certa correlação com o mercado real. No entanto, através do teste desta estratégia, é possível descobrir que, na verdade, são resultados aleatórios.
Assim, uma vantagem da estratégia é refutar a ideia errada de que o mercado de criptomoedas é previsível. Variações no mercado realmente afetam o preço, mas não são previsíveis, e decisões aleatórias podem obter resultados semelhantes.
O maior risco desta estratégia é a dificuldade de determinar os lucros e perdas em operações aleatórias. O resultado com diferentes parâmetros também é difícil de prever e não é possível determinar com antecedência se será lucrativo.
Além disso, a teoria da previsão de ondas de sincronismo é errada em si mesma. As mudanças no mercado são muito complexas para serem simuladas com uma simples simulação periódica. Portanto, a estratégia não pode ser realmente aplicada em negociações em ações reais.
Para reduzir o risco, é necessária uma análise mais aprofundada dos resultados aleatórios para determinar a gama de parâmetros; ou em combinação com outros métodos de análise para validar os sinais de negociação.
A estratégia pode ser melhorada nas seguintes direções:
Esta estratégia mostra a natureza imprevisível do mercado, testando diferentes ondas de sincronismo. Ao mesmo tempo, refuta a teoria errada de que os ciclos de ondas são usados para fazer previsões.
O passo seguinte é aumentar a disponibilidade em campo da estratégia por meio do aumento de variáveis, combinação de ondas, configuração de parâmetros de stop loss e otimização. Mas a chave é entender que as mudanças no mercado são complexas e variáveis e não são fáceis de prever. O que queremos fazer é reduzir o risco aleatório, não prever o mercado.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 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/
// © Gentleman-Goat
//@version=5
strategy("Sine Wave Theory",overlay=false, precision = 2, initial_capital = 1000,shorttitle = "SINE_W_T")
var bar_change_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Bar Change")
bar_change_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Bar Change")
bar_change_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Bar Change")
bar_change_trade = input.bool(defval=true,title="Trade",group="Bar Change")
var volume_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Volume")
avg_volume_length = input.int(7,title="Lookback Length",group="Volume")
volume_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Volume")
volume_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Volume")
volume_trade = input.bool(defval=false,title="Trade",group="Volume")
var coin_flip_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Coin Flip")
coin_flip_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Coin Flip")
coin_flip_seed = input.int(defval=1,title="Seed #",group="Coin Flip")
coin_flip_trade = input.bool(defval=false,title="Trade",group="Coin Flip")
avg_volume = ta.sma(volume,avg_volume_length)
//Green or Red Candle
bar_color = close>open ? color.green : color.red
bar_color_time_adj = request.security(syminfo.tickerid, bar_change_sine_wave_res, bar_color)
//Above or Below Average
volume_state = (volume>avg_volume) ? color.blue : color.purple
volume_state_time_adj = request.security(syminfo.tickerid, volume_sine_wave_res, volume_state)
//Coinflip
coin_flip = math.random(0,100,coin_flip_seed)>=50 ? color.teal : color.yellow
var bar_change_wave_count = 0
var volume_wave_count = 0
var coin_flip_wave_count = 0
//Wave Counters
if(volume_state_time_adj[1] != volume_state_time_adj)
volume_wave_count := volume_wave_count + volume_wave_direction
if(bar_color_time_adj[1] != bar_color_time_adj)
bar_change_wave_count := bar_change_wave_count + bar_change_wave_direction
if(coin_flip[1] != coin_flip)
coin_flip_wave_count := coin_flip_wave_count + coin_flip_wave_direction
//Direction changers
if(math.abs(bar_change_wave_count) == bar_change_sine_wave_number and bar_color_time_adj[1] != bar_color_time_adj)
bar_change_wave_direction := bar_change_wave_direction * -1
if(math.abs(volume_wave_count) == volume_sine_wave_number and volume_state_time_adj[1] != volume_state_time_adj)
volume_wave_direction := volume_wave_direction * -1
if(math.abs(coin_flip_wave_count) == coin_flip_sine_wave_number and coin_flip[1] != coin_flip)
coin_flip_wave_direction := coin_flip_wave_direction * -1
//Entry positions
if(bar_change_wave_count==bar_change_sine_wave_number and bar_change_trade==true)
strategy.entry(id="short",direction=strategy.short)
if(bar_change_wave_count==bar_change_sine_wave_number*-1 and bar_change_trade==true)
strategy.entry(id="long",direction=strategy.long)
if(volume_wave_count==volume_sine_wave_number and volume_trade==true)
strategy.entry(id="short-volume",direction=strategy.short)
if(volume_wave_count==volume_sine_wave_number*-1 and volume_trade==true)
strategy.entry(id="long-volume",direction=strategy.long)
if(coin_flip_wave_count==coin_flip_sine_wave_number and coin_flip_trade==true)
strategy.entry(id="short-coinflip",direction=strategy.short)
if(coin_flip_wave_count==coin_flip_sine_wave_number*-1 and coin_flip_trade==true)
strategy.entry(id="long-coinflip",direction=strategy.long)
hline(0, title='Center', color=color.white, linestyle=hline.style_dashed, linewidth=1)
plot(bar_change_wave_count,title="Bar Change", color=bar_color, linewidth=2)
plot(volume_wave_count,title="Volume Average Change", color=volume_state, linewidth=2)
plot(coin_flip_wave_count,title="Coin Flip Change", color=coin_flip, linewidth=2)