Sumber dimuat naik... memuat...

Strategi Tren Tinggi-Rendah

Penulis:ChaoZhang, Tarikh: 2023-11-23 11:03:18
Tag:

img

Ringkasan

Strategi ini direka berdasarkan prinsip pasaran membeli rendah dan menjual tinggi. Ia mengesan harga tertinggi dan terendah dalam tempoh tertentu, menubuhkan kedudukan panjang apabila harga memecahkan harga terendah, dan menutup kedudukan apabila harga jatuh di bawah harga tertinggi atau syarat mengambil keuntungan dipenuhi. Pada masa yang sama, strategi ini menambah penapis trend pilihan yang hanya membenarkan pembelian apabila harga berada dalam trend menaik.

Logika Strategi

Pengiraan Harga Tertinggi dan Terendah

  • Harga terendah (kriteria rendah): Panggilan fungsi ta.lowest untuk mengira harga terendah dalam tempoh pencarian semula yang ditetapkan oleh pengguna (default 20 bar) dan merangka garis harga terendah.

  • Harga tertinggi (kriteria tertinggi): Panggilan fungsi ta.highest untuk mengira harga tertinggi dalam tempoh melihat kembali yang ditetapkan oleh pengguna (default 10 bar) dan merangka garis harga tertinggi.

Isyarat kemasukan

Apabila harga semasa memecahkan garis harga terendah, isyarat beli dicetuskan untuk menubuhkan kedudukan panjang.

Isyarat keluar

Dua kaedah keluar disediakan untuk pilihan:

  1. Pendapatan mengambil tetap: Tutup kedudukan untuk keuntungan apabila harga mencapai tahap mengambil keuntungan yang ditetapkan (contohnya 8% di atas harga masuk).

  2. Pembahagian harga tertinggi: Tutup kedudukan untuk mengurangkan kerugian apabila harga jatuh di bawah garis harga tertinggi, menilai pembalikan trend.

Penapis Trend

Tambah garis EMA untuk menentukan arah trend. Izinkan membeli hanya apabila harga berada di atas garis EMA (meningkat). Penapis ini boleh diaktifkan atau dilumpuhkan.

Analisis Kelebihan

  • Mengambil strategi klasik membeli rendah dan menjual tinggi, sejajar dengan asas pasaran.

  • Tambah penilaian trend untuk mengelakkan pembukaan yang kerap semasa turun naik harga.

  • Menyediakan dua pilihan keluar untuk mengejar keuntungan tinggi atau mengurangkan kerugian.

  • Parameter yang boleh disesuaikan menyesuaikan diri dengan lebih banyak persekitaran pasaran.

  • Ruang yang besar untuk pengoptimuman strategi melalui penyesuaian parameter, reka bentuk penapis dll.

Analisis Risiko

  • Tahap keuntungan tetap tidak dapat diselaraskan berdasarkan pergerakan pasaran sebenar, yang mengakibatkan keuntungan awal atau sasaran keuntungan yang tidak mencukupi.

  • Menjual pada perpecahan harga tertinggi mungkin sudah menghasilkan kerugian besar, tidak dapat mengawal kerugian dengan berkesan.

  • Penghakiman trend EMA hanya melihat kembali tempoh tertentu, mungkin ketinggalan perubahan trend sebenar.

  • Hasil ujian belakang tidak boleh mewakili masa depan.

Arahan pengoptimuman

  • Tambah kaedah mengambil keuntungan seperti hentian, keluar separa dan lain-lain untuk menyesuaikan tahap mengambil keuntungan secara dinamik.

  • Mengoptimumkan isyarat keluar, contohnya, keluar separa, menambah penunjuk lain.

  • Meningkatkan penilaian trend dengan menggabungkan lebih banyak penunjuk atau pembelajaran mesin.

  • Mengoptimumkan parameter dengan backtest yang lebih luas untuk mencari set yang optimum.

  • Tambah kaedah stop loss untuk mengawal kerugian dengan lebih baik.

Ringkasan

Strategi ini umumnya menggunakan prinsip jual tinggi pembelian rendah klasik dan boleh berfungsi dengan baik di bawah keadaan tertentu. Tetapi masih ada ruang untuk peningkatan melalui penyesuaian parameter, pengoptimuman keluar, mekanisme stop loss dan lain-lain. Artikel ini memberikan analisis mendalam mengenai logika strategi, kebaikan, keburukan dan arah pengoptimuman, bertujuan untuk berkongsi idea strategi serta mengingatkan pelabur tentang risiko dan berdagang dengan berhati-hati dengan strategi kuantitatif.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

Lebih lanjut