Tujuan strategi ini adalah untuk menguji sama ada pembolehubah input yang berbeza seperti warna candlestick, jumlah dan kaedah rawak dapat digunakan untuk meramalkan perubahan harga dalam bentuk gelombang sinus. Strategi ini menukar pembolehubah ini menjadi bentuk gelombang sinus. Apabila puncak atau lereng mencapai jumlah masa yang ditetapkan, keputusan beli atau jual dibuat.
Strategi ini dibahagikan kepada tiga bahagian. Bahagian pertama mengesan perubahan warna candlestick. Apabila lilin dengan warna yang berbeza muncul selepas beberapa lilin dengan warna yang sama, gelombang sinus bertukar arah. Bahagian kedua mengesan sama ada jumlahnya lebih tinggi atau lebih rendah daripada purata. Apabila purata dipecahkan, gelombang bertukar arah. Bahagian ketiga menggunakan kaedah rawak untuk mensimulasikan meniup duit syiling. Apabila hasil rawak berbeza, gelombang bertukar arah. Apabila tiga gelombang ini terkumpul kepada bilangan masa yang ditetapkan, keputusan perdagangan dibuat.
Kod ini mengawal aliran gelombang dengan mengesan arah semasa, bilangan puncak, dan kedudukan lilin sebelumnya untuk tiga gelombang. Apabila jumlah puncak mencapai tetapan parameter, ia mengubah arah berjalan. gelung ini mensimulasikan aliran gelombang sinus.
Teori gelombang sinus ini nampaknya masuk akal, dan bentuk gelombang yang disimulasikan juga mempunyai beberapa korelasi dengan pasaran sebenar. Tetapi melalui ujian strategi ini, dapat didapati bahawa mereka sebenarnya hasil rawak.
Oleh itu, salah satu kelebihan strategi ini adalah untuk membantah salah faham bahawa
Risiko terbesar strategi ini adalah bahawa sukar untuk menentukan keuntungan dan kerugian dalam perdagangan rawak. Hasil di bawah parameter yang berbeza juga sukar diramalkan, dan mustahil untuk menentukan terlebih dahulu sama ada ia boleh menguntungkan.
Selain itu, teori ramalan gelombang sinus itu sendiri salah. Perubahan pasaran terlalu kompleks untuk disimulasikan dengan kitaran sederhana. jadi strategi ini tidak boleh digunakan untuk perdagangan sebenar.
Untuk mengurangkan risiko, adalah perlu untuk menganalisis lebih lanjut hasil rawak untuk menentukan julat parameter; atau menggabungkan kaedah analisis lain untuk mengesahkan isyarat perdagangan.
Strategi ini boleh dioptimumkan ke arah berikut:
Dengan menguji gelombang sinus yang berbeza, strategi ini menggambarkan sifat pasaran yang tidak dapat diramalkan. Pada masa yang sama, ia juga membantah teori yang salah menggunakan kitaran gelombang untuk meramalkan.
Seterusnya, kepraktisan strategi dapat ditingkatkan dengan meningkatkan pembolehubah, menggabungkan bentuk gelombang, menetapkan berhenti, dan mengoptimumkan parameter. Tetapi kunci masih untuk memahami bahawa perubahan pasaran adalah kompleks dan tidak dapat diramalkan. Apa yang perlu kita lakukan adalah mengurangkan risiko rawak daripada meramalkan pasaran.
/*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)