Tujuan dari strategi ini adalah untuk menguji apakah variabel input yang berbeda seperti warna candlestick, volume dan metode acak dapat digunakan untuk memprediksi perubahan harga dalam bentuk gelombang sinus. Strategi ini mengubah variabel ini menjadi bentuk gelombang sinus. Ketika puncak atau lereng mencapai jumlah waktu yang ditetapkan, keputusan beli atau jual dibuat.
Strategi ini dibagi menjadi tiga bagian. Bagian pertama mendeteksi perubahan warna lilin. Ketika lilin dengan warna yang berbeda muncul setelah beberapa lilin dengan warna yang sama, gelombang sinus berputar arah. Bagian kedua mendeteksi apakah volume lebih tinggi atau lebih rendah dari rata-rata. Ketika rata-rata rusak, gelombang berputar arah. Bagian ketiga menggunakan metode acak untuk mensimulasikan lemparan koin. Ketika hasil acak berbeda, gelombang berputar arah. Ketika tiga gelombang ini terkumpul hingga jumlah waktu yang ditetapkan, keputusan perdagangan dibuat.
Kode ini mengontrol jalan gelombang dengan melacak arah saat ini, jumlah puncak, dan posisi lilin sebelumnya untuk tiga gelombang. Ketika jumlah puncak mencapai pengaturan parameter, itu mengubah arah berjalan.
Teori gelombang sinus ini tampaknya masuk akal, dan bentuk gelombang simulasi juga memiliki beberapa korelasi dengan pasar nyata. tetapi melalui pengujian strategi ini, dapat ditemukan bahwa mereka sebenarnya hasil acak. kombinasi variabel mana yang membuat bentuk gelombang terlihat lebih mirip tidak meningkatkan hasil perdagangan.
Jadi salah satu keuntungan dari strategi ini adalah untuk menyangkal kesalahpahaman bahwa
Risiko terbesar dari strategi ini adalah bahwa sulit untuk menentukan keuntungan dan kerugian dalam perdagangan acak. Hasil di bawah parameter yang berbeda juga sulit diprediksi, dan tidak mungkin untuk menentukan sebelumnya apakah itu dapat menguntungkan.
Selain itu, teori prediksi gelombang sinus itu sendiri salah. perubahan pasar terlalu kompleks untuk disimulasikan dengan siklus sederhana. jadi strategi ini tidak benar-benar dapat digunakan untuk perdagangan yang sebenarnya.
Untuk mengurangi risiko, perlu menganalisis lebih lanjut hasil acak untuk menentukan rentang parameter; atau menggabungkan metode analisis lainnya untuk memverifikasi sinyal perdagangan.
Strategi ini dapat dioptimalkan dalam arah berikut:
Melalui pengujian gelombang sinus yang berbeda, strategi ini menggambarkan sifat pasar yang tidak dapat diprediksi. Pada saat yang sama, juga membantah teori yang salah menggunakan siklus gelombang untuk memprediksi.
Selanjutnya, kepraktisan strategi dapat ditingkatkan dengan meningkatkan variabel, menggabungkan bentuk gelombang, mengatur berhenti, dan mengoptimalkan parameter. Tapi kuncinya masih memahami bahwa perubahan pasar kompleks dan tidak dapat diprediksi. Apa yang perlu kita lakukan adalah mengurangi risiko acak daripada memprediksi pasar.
/*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)