Strategi perdagangan kuantitatif penembusan harga kunci panjang Livermore

ATR Pivot Points Trend Analysis JESSE LIVERMORE risk management
Tarikh penciptaan: 2025-07-16 11:24:22 Akhirnya diubah suai: 2025-08-07 10:07:04
Salin: 0 Bilangan klik: 326
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif penembusan harga kunci panjang Livermore Strategi perdagangan kuantitatif penembusan harga kunci panjang Livermore

Gambaran keseluruhan

Strategi perdagangan kuantitatif penembusan harga utama multi-kepala adalah kaedah perdagangan sistematik berdasarkan falsafah perdagangan Jesse Livermore. Strategi ini menangkap tepat masa harga menembusi tahap sokongan dan rintangan utama dengan mengenal pasti trend utama, penyesuaian semula jadi dan penyesuaian kecil di pasaran.

Prinsip Strategi

Strategi ini berdasarkan kepada falsafah perdagangan Jesse Livermore, yang membahagikan trend pasaran kepada enam jenis keadaan: tren utama ke atas (MAIN_UP), tren utama ke bawah (MAIN_DOWN), pantulan semula jadi (NATURAL_REBOUND), pantulan semula jadi (NATURAL_RETRACEMENT), pantulan sekunder (SECONDARY_REBOUND) dan pantulan sekunder (SECONDARY_RETRACEMENT).

Strategi untuk menentukan keadaan trend di pasaran dengan mengira hubungan harga semasa dengan titik-titik penting sejarah, digabungkan dengan nisbah jarak pivot yang telah ditetapkan (ia boleh menjadi peratusan tetap atau berdasarkan pengiraan ATR dinamik). Logik khusus adalah seperti berikut:

  1. Dalam trend kenaikan utama, apabila harga terus meningkat atau penurunan tidak melebihi nilai terendah yang ditakrifkan oleh perkalian utama, mengekalkan keadaan trend naik dan mengemas kini titik tertinggi; apabila penyesuaian melebihi nilai terendah, beralih ke keadaan penyesuaian semula jadi.

  2. Dalam trend penurunan utama, apabila harga terus menurun atau rebound tidak melebihi had yang ditakrifkan oleh perkalian utama, mengekalkan keadaan trend menurun dan mengemas kini titik terendah; apabila rebound melebihi had, beralih ke keadaan rebound semula jadi.

  3. Antara pantulan semulajadi / penyesuaian dan pantulan kecil / penyesuaian, berdasarkan hubungan harga dengan paras tinggi dan rendah dan penggandaan utama dan sekunder yang ditetapkan untuk menilai perubahan trend.

Logik penjanaan isyarat dagangan adalah: apabila trend dua kitaran berturut-turut mengesahkan trend naik utama, binaan kedudukan multihead; apabila trend dua kitaran berturut-turut mengesahkan trend turun utama, keluar dari kedudukan kosong.

Kelebihan Strategik

  1. Penghakiman Trend SistematikStrategi: Sistematiskan falsafah perdagangan Livermore, mendefinisikan keadaan trend yang berbeza dengan model matematik yang jelas, menghilangkan ketidakpastian yang disebabkan oleh penilaian subjektif.

  2. Sangat boleh menyesuaikan diriDengan peratusan jarak pusat berparameter dan pilihan ATR, strategi dapat disesuaikan dengan keadaan pasaran dan kadar turun naik yang berbeza, meningkatkan fleksibiliti strategi.

  3. Mekanisme pengesahanStrategi yang memerlukan dua kitaran trend yang berturut-turut disahkan sebelum melakukan perdagangan, berkesan mengurangkan kerugian yang disebabkan oleh perobosan palsu.

  4. Pengurusan kewangan bersepaduStrategi: Menggunakan peratusan hak dan kepentingan akaun untuk menguruskan kedudukan, memastikan bahawa lubang risiko tetap konsisten di pelbagai saiz akaun.

  5. Penangkapan trend jangka panjangDengan membezakan antara trend utama dan trend kecil, strategi ini dapat menangkap trend kitaran besar dengan berkesan dan mengelakkan gangguan oleh bunyi jangka pendek.

Risiko Strategik

  1. Risiko ketinggalan zamanOleh kerana strategi ini memerlukan pengesahan keadaan trend selama dua kitaran untuk melakukan perdagangan, mungkin kehilangan sebahagian keuntungan pada awal trend, atau mengalami penarikan balik yang lebih besar apabila trend berbalik.

  2. Kepekaan ParameterPrestasi strategi sangat bergantung kepada parameter seperti peratusan jarak pusat, penggandaan pusat utama dan sekunder, parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau kehilangan isyarat penting.

  3. Sekatan transaksi satu arahStrategi ini direka untuk melakukan perdagangan berganda sahaja, dan mungkin menghadapi jangka masa yang lebih lama dalam pasaran turun yang panjang, yang mempengaruhi kadar pulangan keseluruhan.

  4. Kompleksiti yang menentukan trendLogik peralihan antara enam keadaan trend adalah lebih rumit dan boleh menyebabkan peralihan keadaan yang kerap apabila pasaran bergolak, meningkatkan kos perdagangan.

  5. Kekurangan mekanisme kawalan kerugian: Tiada seting stop loss yang jelas dalam kod, mungkin menghadapi kerugian yang lebih besar jika pasaran berubah secara mendadak.

Arah pengoptimuman strategi

  1. Meningkatkan mekanisme kawalan kerugianMemperkenalkan strategi hentikan kerugian berdasarkan ATR atau peratusan tetap untuk mengawal risiko perdagangan tunggal sebelum trend berbalik. Secara khusus, anda boleh menetapkan harga hentikan kerugian sambil menubuhkan kedudukan berbilang kepala untuk melindungi keselamatan dana anda.

  2. Mekanisme pengesahan trend yang dioptimumkanStrategi semasa memerlukan dua tempoh pengesahan trend berturut-turut, boleh dipertimbangkan untuk menggabungkan jumlah trafik atau petunjuk teknikal lain untuk pengesahan trend, meningkatkan kualiti isyarat.

  3. Tambah fungsi pengosonganStrategi untuk memperluaskan strategi untuk menyokong perdagangan kosong, memanfaatkan peluang keuntungan dalam trend menurun, dan meningkatkan prestasi strategi sepanjang masa.

  4. Pengaturan parameter dinamikMemperkenalkan mekanisme penyesuaian parameter dinamik berdasarkan turun naik sejarah atau keadaan pasaran, membolehkan strategi lebih sesuai dengan keadaan pasaran yang berbeza.

  5. Tambah syarat penapisanMenambah peluang menang dengan menggabungkan penapis kitaran pasaran, bermusim atau asas.

  6. Pembinaan Gudang dan GudangMenerapkan mekanisme kemasukan dan keluar berpelbagai, mengurangkan risiko pilihan masa, dan mengoptimumkan kecekapan penggunaan dana.

ringkaskan

Strategi perdagangan kuantitatif penembusan harga utama multihead berjaya mengubah konsep perdagangan klasik Jesse Livermore menjadi sistem algoritma yang dilaksanakan secara kuantitatif. Dengan menentukan enam keadaan tren di pasaran dan syarat-syarat peralihan mereka, strategi ini dapat mengenal pasti dan menjejaki tren naik utama dengan berkesan, dan melakukan perdagangan multihead berdasarkan trend yang disahkan.

Walaupun strategi mempunyai kelebihan seperti mekanisme pengesahan sistematik, beradaptasi dan terbina dalam, ia juga menghadapi risiko seperti keterlambatan, kepekaan parameter dan kurangnya penghentian. Dengan menambah mekanisme penghentian, pengesahan trend yang optimum, pengembangan fungsi pengesahan kosong, dan penyesuaian parameter dinamik, pengoptimuman ke arah yang lebih baik dapat meningkatkan kestabilan dan keuntungan strategi.

Secara keseluruhannya, strategi ini menyediakan kerangka yang kukuh untuk pelabur yang mencari cara untuk melaksanakan falsafah perdagangan Livermore secara sistematik, dengan harapan untuk memperoleh keuntungan jangka panjang yang stabil dalam perdagangan sebenar dengan penyesuaian parameter yang sesuai dan pengoptimuman pengurusan risiko.

Kod sumber strategi
/*backtest
start: 2024-07-16 00:00:00
end: 2025-07-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bozhang_ox

//@version=6
strategy("Trading strategy Jesse Livermore", overlay=true)

// Input parameters
pivot_distance_percentage = input.float(0.5, title="Pivot Distance Percentage")
major_pivot_multiplier = input.int(6, title="Major Pivot Multiplier")
minor_pivot_multiplier = input.int(3, title="Minor Pivot Multiplier")
use_atr_pivot_distance = input.bool(false, title="Use ATR for Pivot Distance")
atr_period = input.int(14, title="ATR Period")
atr_pivot_multiplier = input.float(1, title="ATR Pivot Multiplier")

// Calculate ATR
atr = ta.atr(atr_period)

// Helper function to calculate pivot distance ratio
pivot_distance_ratio = use_atr_pivot_distance ? (atr * atr_pivot_multiplier) / close : pivot_distance_percentage / 100

// Trend states
NONE = 0
MAIN_UP = 6
MAIN_DOWN = 1
NATURAL_REBOUND = 2
NATURAL_RETRACEMENT = 5
SECONDARY_REBOUND = 4
SECONDARY_RETRACEMENT = 3

// Variables to track trends
var float main_up_max = na
var float main_down_min = na
var float natural_rebound_max = na
var float natural_retracement_min = na
var int trend = NONE
var int prev_trend = NONE
var int prev_prev_trend = NONE


// Initialize variables
if na(main_up_max)
    main_up_max := -1e10
if na(main_down_min)
    main_down_min := 1e10
if na(natural_rebound_max)
    natural_rebound_max := -1e10
if na(natural_retracement_min)
    natural_retracement_min := 1e10

// Trend logic
if trend == NONE
    if close > close[1]
        trend := MAIN_UP
        main_up_max := close
    else
        trend := MAIN_DOWN
        main_down_min := close
else if trend == MAIN_UP
    if close > close[1] or (main_up_max - close < close[1] * pivot_distance_ratio * major_pivot_multiplier)
        trend := MAIN_UP
        main_up_max := math.max(main_up_max, close)
    else
        trend := NATURAL_RETRACEMENT
        natural_retracement_min := close
else if trend == MAIN_DOWN
    if close < close[1] or (close - main_down_min < close[1] * pivot_distance_ratio * major_pivot_multiplier)
        trend := MAIN_DOWN
        main_down_min := math.min(main_down_min, close)
    else
        trend := NATURAL_REBOUND
        natural_rebound_max := close
else if trend == NATURAL_REBOUND
    if close > close[1]
        if close <= main_up_max
            if close - natural_rebound_max <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
                trend := NATURAL_REBOUND
                natural_rebound_max := math.max(natural_rebound_max, close)
            else
                trend := MAIN_UP
                main_up_max := close
        else
            trend := MAIN_UP
            main_up_max := close
    else
        if natural_rebound_max - close <= close[1] * pivot_distance_ratio * major_pivot_multiplier
            trend := NATURAL_REBOUND
        else if close < natural_retracement_min
            trend := NATURAL_RETRACEMENT
            natural_retracement_min := close
        else
            trend := SECONDARY_RETRACEMENT
else if trend == NATURAL_RETRACEMENT
    if close < close[1]
        if close >= main_down_min
            if natural_retracement_min - close <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
                trend := NATURAL_RETRACEMENT
                natural_retracement_min := math.min(natural_retracement_min, close)
            else
                trend := MAIN_DOWN
                main_down_min := close
        else
            trend := MAIN_DOWN
            main_down_min := close
    else
        if close - natural_retracement_min <= close[1] * pivot_distance_ratio * major_pivot_multiplier
            trend := NATURAL_RETRACEMENT
        else if close > natural_rebound_max
            trend := NATURAL_REBOUND
            natural_rebound_max := close
        else
            trend := SECONDARY_REBOUND
else if trend == SECONDARY_REBOUND
    if close <= natural_rebound_max and close >= natural_retracement_min
        trend := SECONDARY_REBOUND
    else if close < natural_retracement_min
        trend := NATURAL_RETRACEMENT
        natural_retracement_min := close
    else
        trend := NATURAL_REBOUND
        natural_rebound_max := close
else if trend == SECONDARY_RETRACEMENT
    if close >= natural_retracement_min and close <= natural_rebound_max
        trend := SECONDARY_RETRACEMENT
    else if close > natural_rebound_max
        trend := NATURAL_REBOUND
        natural_rebound_max := close
    else
        trend := NATURAL_RETRACEMENT
        natural_retracement_min := close


// Execute trades based on trend changes
if prev_trend != prev_prev_trend
    if trend == MAIN_UP and prev_trend == MAIN_UP
        strategy.entry("Long Entry", strategy.long, comment="Long Entry")
    else if trend == MAIN_DOWN and prev_trend == MAIN_DOWN
        strategy.close("Long Entry", comment = "Long Close")

// Update previous trend
prev_prev_trend := prev_trend
prev_trend := trend