Strategi perdagangan kuantitatif berdasarkan pembalikan purata pergerakan saluran ATR


Tarikh penciptaan: 2023-12-11 15:38:25 Akhirnya diubah suai: 2023-12-11 15:38:25
Salin: 3 Bilangan klik: 776
1
fokus pada
1621
Pengikut

Strategi perdagangan kuantitatif berdasarkan pembalikan purata pergerakan saluran ATR

Gambaran keseluruhan

Strategi ini adalah satu strategi yang hanya melakukan lebih banyak, ia menggunakan harga memecahkan ATR saluran bawah untuk menentukan masa masuk, dan dengan ATR saluran rata-rata atau ATR saluran atas untuk berhenti keluar. Pada masa yang sama, ia juga akan menggunakan ATR untuk mengira harga berhenti.

Prinsip Strategi

Apabila harga jatuh di bawah batas bawah saluran ATR, menunjukkan bahawa harga mengalami penurunan yang luar biasa. Pada masa ini, strategi akan melakukan lebih banyak masuk pada masa pembukaan K seterusnya. Harga hentian adalah harga masuk dengan mengurangkan faktor hentian ATR dengan ATR.

Secara khusus, strategi ini merangkumi logik berikut:

  1. Hitung ATR dan ATR saluran rata-rata
  2. Tentukan syarat penapisan masa
  3. Apabila harga berada di bawah had rendah saluran ATR, tanda boleh dibuat untuk masuk lebih banyak
  4. “Saya tidak tahu apa yang akan berlaku selepas ini.
  5. Rekod harga masuk
  6. Hitung harga berhenti kerugian
  7. Hentikan kedudukan apabila harga melebihi garis rata-rata saluran ATR atau batas atas saluran ATR
  8. Apabila harga berada di bawah harga stop loss, stop loss keluar

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan saluran ATR untuk menentukan kemasukan dan hentian, kebolehpercayaan yang lebih tinggi
  2. Berusaha untuk masuk ke dalam permainan hanya selepas turun secara tidak normal, dan mengelakkan mengejar tinggi.
  3. Peraturan-peraturan yang ketat dan kawalan risiko yang berkesan
  4. Ia sesuai untuk dagangan cepat, tanpa perlu memegang jawatan lama
  5. Peraturan mudah difahami, mudah dilaksanakan dan dioptimumkan

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Kos dagangan dan risiko tergelincir yang disebabkan oleh perdagangan yang kerap
  2. Kemungkinan berlaku penangguhan yang diaktifkan secara berterusan
  3. Optimasi parameter yang tidak betul boleh menjejaskan kesan strategi
  4. Stop loss mungkin terlalu besar apabila harga saham turun naik

Risiko ini boleh dikurangkan dengan cara menyesuaikan kitaran ATR, mengurangkan faktor stop loss dan sebagainya. Ia juga penting untuk memilih broker yang mempunyai yuran perdagangan yang lebih rendah.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dengan:

  1. Menambah penapis untuk penunjuk lain untuk mengelakkan kehilangan masa masuk yang terbaik
  2. Optimumkan parameter kitaran ATR
  3. Mempertimbangkan untuk menyertai mekanisme kemasukan semula
  4. Dinamika penyesuaian stop loss
  5. Menambah peraturan untuk menilai trend, mengelakkan masuk ke dalam pasaran dengan berlawanan arah

ringkaskan

Strategi ini secara keseluruhannya adalah strategi yang mudah dan praktikal untuk membalikkan garis rata-rata. Ia mempunyai peraturan kemasukan yang jelas, mekanisme penangguhan yang ketat, dan cara berhenti yang baik. Ia juga menyediakan ruang untuk menyesuaikan parameter.

Kod sumber strategi
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 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/
// © Bcullen175

//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)

i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Check filter(s)
f_dateFilter = true

atr = ta.atr(period)

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition   = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance    = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice       = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition   = strategy.position_size > 0 and low < stopPrice

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)