Strategi Garis Putus Kuantitatif


Tanggal Pembuatan: 2023-11-21 13:43:24 Akhirnya memodifikasi: 2023-12-01 15:01:07
menyalin: 1 Jumlah klik: 622
1
fokus pada
1617
Pengikut

Strategi Garis Putus Kuantitatif

Ringkasan

Tujuan dari strategi ini adalah untuk menguji apakah variabel-variabel input yang berbeda seperti warna K-line, jumlah transaksi, dan metode acak dapat digunakan untuk memprediksi perubahan harga dengan cara gelombang sinkron. Strategi ini mengubah variabel-variabel ini menjadi bentuk gelombang sinkron, dan membuat keputusan beli atau jual ketika puncak atau lembah gelombang mencapai jumlah yang ditetapkan.

Prinsip Strategi

Strategi ini dibagi menjadi tiga bagian, bagian pertama mendeteksi perubahan warna K-line. Ketika beberapa K-line dengan warna yang sama muncul, gelombang sinkron bergeser. Bagian kedua mendeteksi apakah volume transaksi lebih tinggi atau lebih rendah dari rata-rata, dan gelombang bergeser ketika nilai rata-rata terpecah. Bagian ketiga menggunakan metode acak untuk mensimulasikan koin yang dilempar, dengan hasil acak yang berbeda.

Kode ini mengontrol gerakan gelombang dengan melacak arah saat ini dari tiga gelombang, jumlah puncak gelombang, dan kondisi dari garis K di atas. Ketika jumlah puncak gelombang mencapai parameter yang ditetapkan, arah gerak berubah. Dengan loop ini, gerak gelombang sinkron dapat disimulasikan.

Analisis Keunggulan

Teori gelombang sinkron ini tampaknya masuk akal, dan bentuk gelombang yang disimulasikan juga memiliki beberapa hubungan dengan pasar nyata. Namun, melalui pengujian strategi ini, dapat ditemukan bahwa sebenarnya adalah hasil acak.

Jadi, salah satu keuntungan dari strategi ini adalah untuk membantah kesalahpahaman bahwa pasar forex dapat memprediksi forex. Variabel di pasar memang dapat mempengaruhi harga, tetapi tidak dapat diprediksi, dan keputusan acak dapat menghasilkan hasil yang mendekati.

Analisis risiko

Risiko terbesar dari strategi ini adalah sulitnya menentukan keuntungan dan kerugian dalam perdagangan acak. Hasilnya juga sulit diprediksi dengan parameter yang berbeda, tidak dapat ditentukan lebih awal apakah dapat menguntungkan.

Selain itu, teori prediksi gelombang sinkron itu sendiri adalah salah. Perubahan pasar terlalu rumit dan tidak mungkin dilakukan dengan simulasi periodik sederhana. Oleh karena itu, strategi ini tidak dapat benar-benar diterapkan dalam perdagangan saham.

Untuk mengurangi risiko, diperlukan analisis lebih lanjut dari hasil acak untuk menentukan kisaran parameter; atau digabungkan dengan metode analisis lainnya untuk memverifikasi sinyal perdagangan.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Menambahkan lebih banyak variabel yang dikonversi menjadi gelombang, memperluas ruang sampel
  2. Kombinasi dari tiga gelombang saat ini untuk mencari kombinasi terbaik
  3. Pengaturan Stop Loss, seperti Stop Loss Ratio
  4. Mengoptimalkan masuk dan keluar logika, melakukan pengujian kembali untuk mencari parameter terbaik

Meringkaskan

Strategi ini menjelaskan sifat pasar yang tidak dapat diprediksi dengan menguji berbagai gelombang sinkron. Strategi ini juga membantah teori yang salah dengan menggunakan siklus gelombang untuk memprediksi.

Langkah selanjutnya adalah meningkatkan ketersediaan strategi secara real-time dengan cara menambahkan variabel, menggabungkan bentuk gelombang, mengatur parameter stop loss dan optimasi. Namun, penting untuk memahami bahwa perubahan pasar rumit dan tidak mudah diprediksi. Yang harus kita lakukan adalah mengurangi risiko acak, bukan memprediksi pasar.

Kode Sumber Strategi
/*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)