Strategi Talian Putus Kuantitatif


Tarikh penciptaan: 2023-11-21 13:43:24 Akhirnya diubah suai: 2023-12-01 15:01:07
Salin: 1 Bilangan klik: 622
1
fokus pada
1617
Pengikut

Strategi Talian Putus Kuantitatif

Gambaran keseluruhan

Tujuan strategi ini adalah untuk menguji apakah pembolehubah input yang berbeza seperti warna K-line, jumlah pertukaran dan kaedah rawak dapat digunakan untuk meramalkan perubahan harga dalam bentuk gelombang sinkron. Strategi ini mengubah pembolehubah ini menjadi bentuk gelombang sinkron, membuat keputusan membeli atau menjual apabila puncak atau lembah gelombang mencapai jumlah yang ditetapkan.

Prinsip Strategi

Strategi ini dibahagikan kepada tiga bahagian, bahagian pertama mengesan perubahan warna K-garis. Apabila beberapa K-garis warna yang sama, apabila terdapat warna yang berbeza, gelombang sinkron bertukar. Bahagian kedua mengesan sama ada jumlah lalu lintas lebih tinggi atau lebih rendah daripada nilai purata, gelombang bertukar apabila nilai purata pecah. Bahagian ketiga menggunakan kaedah rawak untuk mensimulasikan duit syiling, dan gelombang bertukar apabila hasil rawak berbeza.

Kod ini mengawal pergerakan gelombang dengan mengesan arah semasa tiga gelombang, jumlah puncak gelombang dan keadaan garis K teratas. Apabila jumlah puncak gelombang mencapai parameter yang ditetapkan, perubahan arah pergerakan. Melalui kitaran ini untuk meniru pergerakan gelombang sinkron.

Analisis kelebihan

Teori gelombang sinkron ini kelihatan masuk akal, corak gelombang yang dimodelkan juga mempunyai hubungan dengan pasaran sebenar. Tetapi ujian strategi ini dapat didapati, sebenarnya adalah hasil rawak.

Oleh itu, salah satu kelebihan strategi ini adalah untuk membantah anggapan yang salah bahawa pasaran ketumbar boleh meramalkan ketumbar.

Analisis risiko

Risiko terbesar strategi ini adalah sukar untuk menentukan keuntungan dan kerugian dalam perdagangan rawak. Hasilnya juga sukar untuk diramalkan dengan parameter yang berbeza, tidak dapat menentukan terlebih dahulu sama ada ia menguntungkan.

Di samping itu, teori ramalan gelombang sinkron itu sendiri adalah salah. Perubahan pasaran terlalu rumit dan tidak dapat dilakukan dengan simulasi kitaran sederhana. Oleh itu, strategi ini tidak dapat digunakan untuk perdagangan dalam talian.

Untuk mengurangkan risiko, analisis lanjut terhadap hasil rawak diperlukan untuk menentukan julat parameter; atau digabungkan dengan kaedah analisis lain untuk mengesahkan isyarat perdagangan.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Menambah lebih banyak pembolehubah kepada gelombang, meluaskan ruang sampel
  2. Menggabungkan tiga gelombang semasa untuk mencari kombinasi terbaik
  3. Tetapkan cara untuk menghentikan kerugian, seperti stop loss ratio
  4. Mengoptimumkan logik masuk dan keluar, melakukan pengukuran untuk mencari parameter terbaik

ringkaskan

Strategi ini menerangkan sifat pasaran yang tidak dapat diramalkan dengan menguji gelombang sinkron yang berbeza. Ia juga membantah teori yang salah yang menggunakan kitaran gelombang untuk meramalkan.

Langkah seterusnya, anda boleh meningkatkan ketersediaan strategi secara langsung dengan menambah pembolehubah, bentuk gelombang gabungan, menetapkan parameter berhenti dan pengoptimuman. Tetapi penting untuk memahami bahawa perubahan pasaran adalah rumit dan berubah-ubah dan tidak mudah diramalkan.

Kod 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)