
Strategi ini adalah sistem perdagangan yang didasarkan pada indikator SuperTrend, yang digabungkan dengan kerangka analisis kinerja harian yang komprehensif, yang dapat melacak dan menganalisis kinerja strategi dalam periode waktu yang berbeda. Strategi ini menghasilkan sinyal perdagangan melalui ATR (Average True Rate) dan indikator SuperTrend, serta built-in alat analisis kinerja yang kuat, yang dapat melakukan analisis statistik terhadap efektivitas perdagangan pada hari perdagangan yang berbeda per minggu dan tanggal yang berbeda per bulan, memberikan dukungan keputusan yang didorong oleh data kepada pedagang, membantu mengidentifikasi waktu perdagangan terbaik dan mengoptimalkan strategi perdagangan.
Inti dari strategi ini terdiri dari dua bagian: mekanisme generasi sinyal perdagangan dan sistem analisis kinerja.
Mekanisme Generasi Sinyal Trading:
Sistem Analisis Kinerja:
Strategi ini memanfaatkan fitur berorientasi objek dari Pine Script, membuat kelas DayStats untuk menyimpan dan memperbarui statistik transaksi, dan memungkinkan manajemen dan perhitungan data yang efisien. Melalui fungsi update_all_stats (((), informasi statistik yang relevan diperbarui pada akhir setiap transaksi, memastikan bahwa data kinerja mencerminkan hasil transaksi terbaru secara real-time.
Analisis dimensi waktu yang menyeluruhKeuntungan yang paling menonjol dari strategi ini adalah kemampuan untuk menganalisis kinerja perdagangan secara mendalam dari dimensi waktu, membantu pedagang mengidentifikasi tanggal atau hari minggu tertentu yang terbaik untuk perdagangan, dan memberikan dasar data yang kuat untuk strategi penyaringan waktu.
Dukungan Keputusan yang Didorong DataDengan memperhitungkan secara detail setiap hari perdagangan, indikator penting seperti rasio kemenangan, kerugian, dan keuntungan bersih, pedagang dapat membuat keputusan perdagangan berdasarkan data obyektif dan bukan perasaan subjektif, mengurangi gangguan dari faktor emosional.
Peningkatan manajemen risikoDengan mengidentifikasi hari-hari perdagangan bersejarah yang berkinerja buruk, pedagang dapat memilih untuk menghindari perdagangan atau menyesuaikan ukuran posisi pada hari-hari tersebut, yang secara efektif mengurangi risiko sistemik.
Performance visualisasiTabel tampilan built-in strategi menampilkan secara intuitif kinerja perdagangan untuk setiap periode waktu, menggunakan warna yang berbeda untuk mengidentifikasi status keuntungan dan kerugian, sehingga pedagang dapat memahami kinerja strategi secara langsung.
Kustomisasi TinggiStrategi menyediakan beberapa parameter input, termasuk siklus ATR, faktor SuperTrend, posisi tabel, dan pengaturan warna, yang memungkinkan pedagang untuk menyesuaikan sesuai dengan preferensi pribadi dan karakteristik pasar.
Kemampuan integrasi yang fleksibelPerformance Analysis: Performance Analysis adalah bagian dari kode yang dirancang untuk dapat dengan mudah diintegrasikan ke dalam strategi perdagangan lainnya, meningkatkan kepraktisan dan skalabilitas strategi.
Data Sampel Kurang BerisikoDalam kasus sampel transaksi yang lebih sedikit, hasil statistik untuk tanggal tertentu mungkin tidak signifikan secara statistik, dan keputusan yang dibuat berdasarkan data terbatas ini dapat menyebabkan arah optimasi yang salah. Solusinya adalah memastikan ada siklus pengembalian yang cukup panjang dan mendapatkan lebih banyak sampel transaksi untuk meningkatkan keandalan statistik.
Risiko overadaptasiPerforma historis yang terlalu bergantung pada tanggal tertentu dapat menyebabkan strategi yang terlalu cocok dengan data historis, yang tidak efektif dalam perubahan lingkungan pasar di masa depan. Pedagang harus menggunakan analisis waktu sebagai faktor referensi dan bukan satu-satunya dasar keputusan, dan secara teratur memverifikasi stabilitas hasil analisis.
Keterbatasan mekanisme pembuatan sinyalIndikator SuperTrend: Indikator SuperTrend dapat menghasilkan sinyal palsu yang sering terjadi di pasar yang bergoyang, yang menyebabkan overtrading dan kerugian yang tidak perlu. Disarankan untuk digunakan di pasar yang sedang tren kuat, atau dikombinasikan dengan indikator konfirmasi lainnya untuk memfilter sinyal palsu.
Menghitung konsumsi sumber dayaDengan meningkatnya jumlah transaksi, jumlah data yang perlu disimpan dan diproses oleh sistem analisis kinerja juga meningkat, yang dapat mempengaruhi efisiensi operasi strategi. Perlu diperhatikan penggunaan sumber daya dalam pengukuran jangka panjang atau perdagangan langsung.
Faktor musimanBeberapa pasar memiliki aturan musiman yang mungkin mengabaikan dampak musiman dari siklus yang lebih panjang hanya berdasarkan analisis tanggal mingguan atau bulanan. Anda dapat mempertimbangkan untuk menambahkan analisis pada tingkat kuartal atau tahunan untuk menangkap pola siklus yang lebih panjang.
Analisis multi-frame waktuStrategi saat ini hanya menganalisis kinerja dalam satu frame waktu, tetapi dapat diperluas untuk menganalisis kinerja perdagangan dalam beberapa frame waktu, seperti perbedaan kinerja pada garis waktu, garis 4 jam, dan garis 1 jam secara bersamaan, untuk mendapatkan wawasan dimensi waktu yang lebih komprehensif.
Meningkatkan klasifikasi kondisi pasarKlasifikasi kondisi pasar yang dimasukkan dalam analisis kinerja, seperti kinerja di bawah pasar tren dan pasar bergolak, atau perbedaan di bawah lingkungan yang berfluktuasi tinggi dan rendah, dapat membantu menemukan keunggulan dan kelemahan strategi dalam lingkungan pasar tertentu.
Sistem penilaian kualitas sinyal: Memperkenalkan mekanisme penilaian kualitas sinyal, berdasarkan faktor-faktor seperti konsistensi indikator teknis, struktur harga, konfirmasi volume transaksi untuk setiap sinyal perdagangan, dan memasukkan dimensi kualitas sinyal dalam analisis kinerja, yang membantu mengidentifikasi karakteristik sinyal berkualitas tinggi.
Optimasi parameter adaptasi: Mengatur secara otomatis siklus ATR dan parameter faktor SuperTrend berdasarkan data kinerja historis, sehingga strategi dapat beradaptasi dengan perubahan kondisi pasar yang berbeda, meningkatkan fleksibilitas dan stabilitas strategi.
Mengintegrasikan data kalender ekonomiUntuk mengintegrasikan informasi peristiwa seperti rilis data ekonomi penting, keputusan bank sentral ke dalam analisis kinerja, mempelajari aturan kinerja perdagangan sebelum dan sesudah peristiwa ekonomi tertentu, dan memberikan dukungan keputusan yang didorong oleh peristiwa bagi pedagang.
Meningkatkan Indikator StatistikMenambahkan lebih banyak indikator statistik, seperti keuntungan / kerugian maksimum berturut-turut, rasio untung / rugi rata-rata, rasio Sharpe, dan lain-lain, memberikan penilaian kinerja yang lebih mendalam dan membantu pedagang memahami karakteristik strategi secara lebih komprehensif.
Pembelajaran mesin untuk mengenali polaPendahuluan: Memperkenalkan algoritma pembelajaran mesin sederhana yang secara otomatis mengidentifikasi pola dan aturan waktu potensial dari data kinerja historis, memprediksi kemungkinan kinerja hari perdagangan di masa depan, dan memberikan panduan prospektif untuk keputusan perdagangan.
Strategi Optimasi SuperTrend adalah strategi inovatif yang menggabungkan sistem perdagangan pelacakan tren dengan analisis kinerja dimensi waktu yang komprehensif. Strategi ini tidak hanya menyediakan sinyal perdagangan berdasarkan indikator SuperTrend, tetapi lebih penting lagi membangun kerangka analisis yang kuat yang dapat secara sistematis mengevaluasi perbedaan kinerja strategi dalam periode waktu yang berbeda.
Dengan melacak secara rinci hasil perdagangan pada tanggal yang berbeda setiap minggu dan setiap bulan, pedagang dapat mengidentifikasi pola waktu yang memiliki keunggulan statistik dan mengoptimalkan strategi perdagangan secara tepat. Nilai dari kerangka analisis ini tidak hanya terbatas pada strategi SuperTrend saat ini, tetapi juga dapat dengan mudah diintegrasikan ke dalam sistem perdagangan lainnya, memberikan pemikiran optimasi dimensi waktu untuk berbagai jenis strategi.
Metode yang didorong oleh data ini meningkatkan perdagangan intuitif ke tingkat analisis kuantitatif, memungkinkan pedagang untuk membuat keputusan yang lebih rasional berdasarkan data statistik obyektif. Nilai strategi ini akan meningkat lebih lanjut seiring dengan akumulasi sampel perdagangan dan perluasan dimensi analisis, memberikan panduan pengoptimalan waktu yang semakin akurat bagi pedagang.
/*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)