O objetivo desta estratégia é testar se diferentes variáveis de entrada, como cores de velas, volume e métodos aleatórios podem ser usados para prever mudanças de preço na forma de ondas senoidais.
A estratégia é dividida em três partes. A primeira parte detecta mudanças nas cores dos velares. Quando uma vela com uma cor diferente aparece após várias velas da mesma cor, a onda senoidal muda de direção. A segunda parte detecta se o volume é maior ou menor do que a média. Quando a média é quebrada, a onda muda de direção. A terceira parte usa um método aleatório para simular o lançamento de moedas. Quando o resultado aleatório é diferente, a onda muda de direção.
O código controla a corrida das ondas rastreando a direção atual, o número de picos e a posição do candelabro anterior para as três ondas.
A teoria das ondas senoidais parece fazer sentido, e as formas de onda simuladas também têm alguma correlação com o mercado real. Mas através do teste desta estratégia, pode-se descobrir que eles são realmente resultados aleatórios.
Assim, uma vantagem desta estratégia é refutar o equívoco de que "o mercado pode ser previsto".As variáveis no mercado afetam os preços, mas são imprevisíveis, e decisões aleatórias também podem obter resultados semelhantes.
O maior risco desta estratégia é que é difícil determinar o lucro e a perda na negociação aleatória. Os resultados sob diferentes parâmetros também são difíceis de prever e é impossível determinar antecipadamente se pode ser lucrativo.
Além disso, a própria teoria da previsão de ondas senoidais é errada. As mudanças de mercado são muito complexas para serem simuladas com simples ciclicidade.
Para reduzir os riscos, é necessário analisar ainda mais os resultados aleatórios para determinar o intervalo de parâmetros; ou combinar outros métodos analíticos para verificar os sinais de negociação.
Esta estratégia pode ser otimizada nas seguintes direcções:
Ao testar diferentes ondas senoidais, esta estratégia ilustra a natureza imprevisível do mercado. Ao mesmo tempo, também refuta a teoria errônea de usar ciclos de onda para prever.
Em seguida, a praticidade da estratégia pode ser melhorada aumentando variáveis, combinando formas de onda, definindo paradas e otimizando parâmetros.
/*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)