Analisis prestasi masa Strategi pengoptimuman SuperTrend

ATR supertrend Profit Factor Winrate Performance Analytics Strategy Optimization
Tarikh penciptaan: 2025-07-25 13:30:18 Akhirnya diubah suai: 2025-07-25 13:30:18
Salin: 2 Bilangan klik: 280
2
fokus pada
319
Pengikut

Analisis prestasi masa Strategi pengoptimuman SuperTrend Analisis prestasi masa Strategi pengoptimuman SuperTrend

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan berdasarkan indikator SuperTrend, yang digabungkan dengan kerangka analisis prestasi harian yang komprehensif, yang dapat mengesan dan menganalisis prestasi strategi dalam tempoh masa yang berbeza. Strategi ini menghasilkan isyarat perdagangan melalui ATR (Average True Rate) dan indikator SuperTrend, sambil membina alat analisis prestasi yang kuat, yang dapat melakukan analisis statistik mengenai kesan perdagangan pada hari perdagangan yang berbeza setiap minggu dan pada hari yang berbeza setiap bulan, memberikan sokongan keputusan yang didorong oleh data kepada peniaga, membantu mengenal pasti masa perdagangan terbaik dan mengoptimumkan strategi perdagangan.

Prinsip Strategi

Strategi ini terdiri daripada dua bahagian: mekanisme penjanaan isyarat perdagangan dan sistem analisis prestasi.

  1. Mekanisme penjanaan isyarat perdagangan

    • Menjana isyarat masuk berdasarkan petunjuk SuperTrend
    • SuperTrend adalah penunjuk trend yang menggabungkan ATR dan pengiraan faktor tersuai
    • Isyarat perdagangan yang dicetuskan apabila arah indikator SuperTrend berubah
    • Pergerakan berganda dilakukan apabila arah bertukar dari negatif ke betul
    • Operasi kosong dilakukan apabila arah berubah dari positif ke negatif
  2. Sistem analisis prestasi

    • Membangunkan struktur data khusus (DayStats) untuk mencatatkan statistik setiap hari dagangan
    • Indeks yang dikesan termasuk: jumlah dagangan menang / negatif, keuntungan kasar, kerugian kasar
    • Mengira Indeks Derivatif: Factor Keuntungan, Factor Keuntungan, Kadar Keuntungan
    • Penunjuk prestasi yang dikira secara berturut-turut tujuh hari seminggu (Isnin hingga Ahad)
    • Pada masa yang sama memantau prestasi dagangan pada 1-31 setiap bulan
    • Data prestasi dipaparkan melalui visual jadual, termasuk warna yang berbeza untuk menunjukkan status kerugian

Strategi ini menggunakan ciri-ciri berorientasikan objek Pine Script untuk mencipta kelas DayStats untuk menyimpan dan mengemas kini statistik transaksi, mewujudkan pengurusan dan pengiraan data yang cekap. Melalui fungsi update_all_stats ((() maklumat statistik yang berkaitan dikemas kini pada akhir setiap transaksi, memastikan data prestasi mencerminkan hasil transaksi terkini dalam masa nyata.

Kelebihan Strategik

  1. Analisis dimensi masa menyeluruhKelebihan utama strategi ini adalah keupayaan untuk menganalisis prestasi dagangan secara mendalam dari segi masa, membantu peniaga mengenal pasti tarikh atau hari minggu tertentu yang paling berkesan, memberikan asas data yang kukuh untuk strategi penapisan masa.

  2. Sokongan Keputusan Didorong DataDengan mengkaji secara terperinci setiap hari perdagangan, peniaga boleh membuat keputusan perdagangan berdasarkan data objektif dan bukan perasaan subjektif, mengurangkan gangguan faktor emosi.

  3. Pengurusan risiko yang lebih baikDengan mengenal pasti hari-hari dagangan bersejarah yang kurang baik, peniaga boleh memilih untuk mengelakkan dagangan atau menyesuaikan saiz kedudukan pada hari-hari tersebut, yang berkesan mengurangkan risiko sistemik.

  4. Paparan prestasi visual: Fungsi paparan jadual yang dibina dalam strategi secara intuitif menunjukkan prestasi dagangan untuk setiap tempoh masa, menggunakan warna yang berbeza untuk menandakan status keuntungan dan kerugian, membolehkan peniaga memahami prestasi strategi dengan jelas.

  5. Kustomisasi yang tinggiStrategi menyediakan pelbagai parameter input, termasuk kitaran ATR, faktor SuperTrend, kedudukan jadual, dan tetapan warna, yang membolehkan peniaga menyesuaikan diri dengan pilihan peribadi dan ciri-ciri pasaran.

  6. Keupayaan integrasi yang fleksibel: Kod bahagian analisis prestasi direka untuk mudah diintegrasikan ke dalam strategi perdagangan lain, meningkatkan kebolehgunaan dan skalabiliti strategi.

Risiko Strategik

  1. Data Sampel Kurang BerisikoDalam keadaan sampel urus niaga yang lebih kecil, keputusan yang dibuat berdasarkan data yang terhad ini mungkin membawa kepada arah pengoptimuman yang salah. Penyelesaian adalah dengan memastikan terdapat kitaran pengesanan balik yang cukup lama dan mendapatkan lebih banyak sampel urus niaga untuk meningkatkan kebolehpercayaan statistik.

  2. Risiko terlalu serasiBergantung kepada tarikh tertentu boleh menyebabkan strategi terlalu sesuai dengan data sejarah dan tidak berkesan apabila keadaan pasaran berubah pada masa akan datang. Pedagang harus menggunakan analisis masa sebagai faktor rujukan dan bukan satu-satunya asas keputusan, dan secara berkala mengesahkan kestabilan hasil analisis.

  3. Batasan mekanisme penjanaan isyaratIndikator SuperTrend: Indikator SuperTrend boleh menghasilkan isyarat palsu yang kerap dalam pasaran yang bergolak, yang menyebabkan perdagangan berlebihan dan kerugian yang tidak perlu. Ia disyorkan untuk digunakan dalam pasaran yang mempunyai trend yang kuat, atau digabungkan dengan petunjuk pengesahan lain untuk menapis isyarat palsu.

  4. Pengiraan penggunaan sumberDengan peningkatan jumlah transaksi, jumlah data yang perlu disimpan dan diproses oleh sistem analisis prestasi juga meningkat, yang boleh menjejaskan kecekapan operasi strategi. Perlu berhati-hati dengan penggunaan sumber dalam pengukuran jangka panjang atau perdagangan dalam talian.

  5. Kesan faktor bermusimBeberapa pasaran mempunyai peraturan bermusim, dan analisis berdasarkan tarikh mingguan atau bulanan semata-mata mungkin mengabaikan kesan bermusim untuk tempoh yang lebih lama. Anda boleh mempertimbangkan untuk menambah analisis pada peringkat suku atau tahunan untuk menangkap pola yang lebih lama.

Arah pengoptimuman strategi

  1. Analisis pelbagai kerangka masaStrategi semasa hanya menganalisis prestasi dalam satu bingkai masa, tetapi ia boleh diperluaskan untuk menganalisis prestasi dagangan dalam pelbagai bingkai masa, seperti perbezaan prestasi dalam garis hari, 4 jam dan 1 jam pada masa yang sama, untuk mendapatkan wawasan dimensi masa yang lebih menyeluruh.

  2. Menambah klasifikasi syarat pasaranPenambahan klasifikasi keadaan pasaran dalam analisis prestasi, seperti prestasi di bawah pasaran tren dan di bawah pasaran goyah, atau perbezaan di bawah persekitaran yang bergelombang tinggi dan rendah, dapat membantu mencari kelebihan dan kekurangan strategi dalam persekitaran pasaran tertentu.

  3. Sistem penilaian kualiti isyarat: Memperkenalkan mekanisme penilaian kualiti isyarat, berdasarkan faktor-faktor seperti keserasian penunjuk teknikal, struktur harga, pengesahan jumlah transaksi untuk menilai setiap isyarat perdagangan, dan memasukkan dimensi kualiti isyarat dalam analisis prestasi, membantu mengenal pasti ciri-ciri isyarat berkualiti tinggi.

  4. Optimasi parameter penyesuaian: Mengubah secara automatik kitaran ATR dan parameter faktor SuperTrend berdasarkan data prestasi sejarah, membolehkan strategi menyesuaikan diri dengan perubahan keadaan pasaran yang berbeza, meningkatkan daya serap dan ketahanan strategi.

  5. Mengintegrasikan data kalendar ekonomiMengintegrasikan maklumat mengenai peristiwa seperti penerbitan data ekonomi penting, keputusan bank pusat ke dalam analisis prestasi, mengkaji peraturan prestasi perdagangan sebelum dan selepas peristiwa ekonomi tertentu, dan menyediakan sokongan keputusan yang didorong oleh peristiwa kepada peniaga.

  6. Memperluas statistikMenambah lebih banyak petunjuk statistik, seperti jumlah kemenangan / kerugian berturut-turut maksimum, nisbah keuntungan / kerugian purata, nisbah Sharpe, dan sebagainya, untuk memberikan penilaian prestasi yang lebih mendalam dan membantu pedagang memahami ciri-ciri strategi secara lebih menyeluruh.

  7. Pengiktirafan pola pembelajaran mesinPendahuluan: memperkenalkan algoritma pembelajaran mesin yang mudah untuk mengenal pasti secara automatik corak dan peraturan masa yang berpotensi dari data prestasi sejarah, meramalkan kemungkinan prestasi hari perdagangan masa depan, dan memberikan panduan prospektif untuk keputusan perdagangan.

ringkaskan

Strategi pengoptimuman SuperTrend adalah strategi inovatif yang menggabungkan sistem perdagangan yang mengesan trend dengan analisis prestasi dimensi masa yang komprehensif. Strategi ini tidak hanya menyediakan isyarat perdagangan berdasarkan petunjuk SuperTrend, tetapi lebih penting lagi, membina kerangka analisis yang kuat yang dapat menilai secara sistematik perbezaan prestasi strategi dalam tempoh masa yang berbeza.

Dengan menjejaki hasil dagangan pada tarikh yang berbeza setiap minggu dan setiap bulan, peniaga dapat mengenal pasti corak masa yang mempunyai kelebihan statistik dan mengoptimumkan strategi perdagangan dengan tepat. Nilai kerangka analisis ini tidak hanya terhad kepada strategi SuperTrend semasa, tetapi juga dapat diintegrasikan dengan mudah ke dalam sistem perdagangan lain untuk memberikan pemikiran pengoptimuman dimensi masa untuk pelbagai jenis strategi.

Pendekatan yang didorong oleh data ini meningkatkan perdagangan intuitif ke tahap analisis kuantitatif, yang membolehkan peniaga membuat keputusan yang lebih rasional berdasarkan data statistik objektif. Nilai strategi ini akan meningkat lagi dengan peningkatan sampel perdagangan dan pengembangan dimensi analisis, memberikan panduan pengoptimuman masa yang semakin tepat kepada peniaga.

Kod sumber strategi
/*backtest
start: 2024-07-25 00:00:00
end: 2025-07-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Daily Performance Analysis [Mr_Rakun]", overlay=true)

atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[st, direction] = ta.supertrend(factor, atrPeriod)

if ta.change(direction) < 0
    strategy.entry("My Long Entry Id", strategy.long)

if ta.change(direction) > 0
    strategy.entry("My Short Entry Id", strategy.short)

plot(st, title="SuperTrend", color=st < close ? color.green : color.red, linewidth=2)

//-------------------------------------------------------------
// Copy the rest of this line and add it to your own strategy.

// Daily Performance
type DayStats
    int wins = 0
    int losses = 0
    float gross_profit = 0.0
    float gross_loss = 0.0

update(DayStats ds, float profit) =>
    if profit > 0
        ds.wins += 1
        ds.gross_profit += profit
    else
        ds.losses += 1
        ds.gross_loss += math.abs(profit)

net_profit(DayStats ds) => ds.gross_profit - ds.gross_loss
profit_factor(DayStats ds) => ds.gross_loss > 0 ? ds.gross_profit / ds.gross_loss : na
winrate(DayStats ds) =>
    total = ds.wins + ds.losses
    total > 0 ? (ds.wins / total) * 100 : na

// ================== GLOBAL OBJECTS ==================

var DayStats monday    = DayStats.new()
var DayStats tuesday   = DayStats.new()
var DayStats wednesday = DayStats.new()
var DayStats thursday  = DayStats.new()
var DayStats friday    = DayStats.new()
var DayStats saturday  = DayStats.new()
var DayStats sunday    = DayStats.new()
var array<DayStats> monthStats = array.new<DayStats>()

// ================== UPDATE METHOD ==================
update_all_stats() =>
    if barstate.isfirst
        for i = 0 to 30
            array.push(monthStats, DayStats.new())

    if strategy.closedtrades > strategy.closedtrades[1]
        idx = strategy.closedtrades - 1
        profit = strategy.closedtrades.profit(idx)
        poz_time = strategy.closedtrades.entry_time(idx)
        dom = dayofmonth(poz_time)
        day = dayofweek(poz_time)

        DayStats day_stats = switch day
            dayofweek.sunday    => sunday
            dayofweek.monday    => monday
            dayofweek.tuesday   => tuesday
            dayofweek.wednesday => wednesday
            dayofweek.thursday  => thursday
            dayofweek.friday    => friday
            dayofweek.saturday  => saturday

        if na(day_stats) == false
            update(day_stats, profit)

        if dom >= 1 and dom <= 31
            DayStats mstats = array.get(monthStats, dom - 1)
            update(mstats, profit)
        day_stats

update_all_stats()

 
// Table positioning inputs
weekly_position = input.string("Top Center", "Weekly Table Position", 
     options=["Top Left", "Top Center", "Top Right", "Middle Left", "Middle Center", "Middle Right", "Bottom Left", "Bottom Center", "Bottom Right"])
monthly_position = input.string("Top Right", "Monthly Table Position", 
     options=["Top Left", "Top Center", "Top Right", "Middle Left", "Middle Center", "Middle Right", "Bottom Left", "Bottom Center", "Bottom Right"])

// Color inputs
header_bg_color = input.color(color.gray, "Header Background Color")
profit_color = input.color(color.lime, "Profit Color")
loss_color = input.color(color.red, "Loss Color")
neutral_color = input.color(color.gray, "Neutral Color")
row_bg_color = input.color(color.new(color.gray, 60), "Row Background Color")

// Function to get table position
get_table_position(string pos) =>
    switch pos
        "Top Left" => position.top_left
        "Top Center" => position.top_center
        "Top Right" => position.top_right
        "Middle Left" => position.middle_left
        "Middle Center" => position.middle_center
        "Middle Right" => position.middle_right
        "Bottom Left" => position.bottom_left
        "Bottom Center" => position.bottom_center
        "Bottom Right" => position.bottom_right
        => position.top_center

// TABLE PRINTING 
draw_table_headers(table weekly, table monthly) =>
    table.cell(weekly, 0, 0, "DAY",          text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 1, 0, "W/L (Count)",  text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 2, 0, "NET PROFIT",   text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 3, 0, "PROFIT FACTOR",text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 4, 0, "WINRATE",      text_color=color.white, text_size=size.small, bgcolor = header_bg_color)

    table.cell(monthly, 0, 0, "DAY",          text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 1, 0, "W/L (Count)",  text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 2, 0, "NET PROFIT",   text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 3, 0, "PROFIT FACTOR",text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 4, 0, "WINRATE",      text_color=color.white, text_size=size.small, bgcolor = header_bg_color)

fill_weekly_row(table tbl, int row, string day_name, DayStats ds) =>
    net_p = net_profit(ds)
    pf = profit_factor(ds)
    wr = winrate(ds)
    status_color = net_p > 0 ? profit_color: (net_p < 0 ? loss_color : neutral_color)

    table.cell(tbl, 0, row, day_name, text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 1, row, str.tostring(ds.wins) + "/" + str.tostring(ds.losses), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 2, row, str.tostring(net_p, '#,###.##'), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 3, row, str.tostring(pf, '0.00'), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 4, row, str.tostring(wr, format.percent), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)

fill_monthly_row(table tbl, int row, int day, DayStats ds) =>
    net_p = net_profit(ds)
    pf = profit_factor(ds)
    wr = winrate(ds)
    status_color = net_p > 0 ? profit_color : (net_p < 0 ? loss_color : neutral_color)

    table.cell(tbl, 0, row, str.tostring(day), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 1, row, str.tostring(ds.wins) + "/" + str.tostring(ds.losses), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 2, row, str.tostring(net_p, '#,###.##'), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 3, row, str.tostring(pf, '0.00'), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 4, row, str.tostring(wr, format.percent), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)

var table weekly_table = table.new(get_table_position(weekly_position), 5, 8)
var table monthly_table = table.new(get_table_position(monthly_position), 5, 32)

if barstate.isconfirmed
    draw_table_headers(weekly_table, monthly_table)

    fill_weekly_row(weekly_table, 1, "MON", monday)
    fill_weekly_row(weekly_table, 2, "TUE", tuesday)
    fill_weekly_row(weekly_table, 3, "WED", wednesday)
    fill_weekly_row(weekly_table, 4, "THU", thursday)
    fill_weekly_row(weekly_table, 5, "FRI", friday)
    fill_weekly_row(weekly_table, 6, "SAT", saturday)
    fill_weekly_row(weekly_table, 7, "SUN", sunday)

    for i = 0 to 30
        DayStats ms = array.get(monthStats, i)
        if ms.wins + ms.losses > 0
            fill_monthly_row(monthly_table, i + 1, i + 1, ms)