Memulai
Siapkan PineBag satu kali, lalu siapkan tes pertama Anda dalam beberapa menit.
Anda memerlukan tiga hal
- Google Chrome 116 atau lebih baru.
- Akun TradingView yang sudah masuk dengan akses ke simbol yang ingin Anda uji.
- File Pine Script yang mendeklarasikan
strategy(), tidak hanyaindicator().
Instal dan buka PineBag
-
Instal ekstensinya.
Gunakan tombol instal PineBag. Sematkan ekstensi jika Anda ingin akses cepat. -
Buka grafik TradingView.
Masuk terlebih dahulu, lalu buka pasar dan jangka waktu apa pun yang didukung. -
Muat ulang tab grafik.
Lakukan ini setelah menginstal atau memperbarui PineBag agar grafik dapat terhubung. -
Buka PineBag.
Pilih ikon PineBag. Indikator koneksi berubah menjadi hijau ketika grafik sudah siap.
Panel samping, kontrol demi kontrol
Angka pada antarmuka sebenarnya sesuai dengan penjelasan. Tidak ada apa pun dalam gambar ini yang merupakan tiruan.
1
2
3
4
5
6
7
8
9
10
11
- 1Strategi
Strategi yang dimuat. Klik kartu untuk membukanya di editor; ikon tempat sampah di judul bagian menghapusnya.
- 2Jalankan ringkasan
Jangka waktu, modal, ukuran pesanan dan komisi yang akan digunakan.
- 3Cari
Membuka pencarian simbol TradingView sehingga Anda dapat menambahkan ticker yang memenuhi syarat bursa.
- 4Tas fotokopi
Menyalin setiap ticker, satu
EXCHANGE:SYMBOLper baris. - 5Kantong tempel
Menerima baris, koma, titik koma, atau spasi dan mengabaikan duplikat.
- 6Jelas
Meminta klik kedua, menyalin ticker, lalu mengosongkan daftar; «Tempel ticker» akan mengembalikannya.
- 7Tag ticker
Menampilkan tas saat ini. Gunakan × untuk menghapus satu simbol; tambahkan hingga 500.
- 8Jalankan backtest
Memvalidasi pengaturan dan memulai proses portofolio berurutan.
- 9Laporan
Simpan 50 laporan terbaru secara lokal dan ekspor JSON atau CSV.
- 10Hari tersisa
Active days: 05— Hari tersisa. - 11Dukungan
Dukungan tersedia untuk permintaan teknis, penagihan, perizinan, dan privasi.
Muat strategi
- Pilih sumbernya.
Jatuhkan a.pinefile ke dalam Strategi, atau buka Editor dan tempel kodenya. - Perbaiki pesan validasi apa pun.
Script harus berisistrategy(). PineBag menunjukkan kesalahan yang jelas jika tidak dapat digunakan. - Periksa ringkasannya.
Konfirmasikan nama skrip, jangka waktu, modal dan ukuran pesanan yang ditunjukkan di atas Jalankan.
indicator(), ubah menjadi strategi sebelum menjalankan PineBag.Templat strategi
Setiap kolom di tab Properties TradingView sesuai dengan satu argumen strategy(). Simpan nilainya sebagai konstanta bernama di awal skrip: dengan prioritas skrip, setiap ticker diuji dengan asumsi yang sama.
TIMEFRAMETimeframe
INITIAL_CAPITAL · CURRENCYModal awal
ORDER_SIZE · ORDER_SIZE_TYPEUkuran order default
PYRAMIDINGPiramida
BAR_MAGNIFIERDetail bar
CALC_EVERY_TICK · CALC_ON_FILLSEksekusi skrip
COMMISSION · COMMISSION_TYPEKomisi
MARGIN_LONG · MARGIN_SHORTLeverage long dan short
SLIPPAGESlippage
LIMIT_FILL_TICKSEksekusi order limit
FILL_ON_BAR_CLOSEPenundaan eksekusi order
runtime.error()Menghentikan skrip pada kerangka waktu lain.
//@version=6
// ============================================================================
// Trend breakout · ATR risk — PineBag strategy template
// ============================================================================
// ----------------------------------------------------------------------------
// STRATEGY PROPERTIES (TradingView: Settings → Properties)
// ----------------------------------------------------------------------------
// TIMEFRAME takes a standard TradingView interval. Paste one of these, by the
// lowest TradingView plan that has it (tradingview.com/pricing, Charts):
// Basic days "1D" "1W" "1M" "3M" "6M" "12M"
// Essential minutes "1" "3" "5" "15" "30" "45"
// hours "60" "120" "180" "240"
// ranges "1R" "10R" "100R" "1000R"
// Premium seconds "1S" "5S" "10S" "15S" "30S" "45S"
// Ultimate ticks "1T" "10T" "100T" "1000T"
// Other intervals are custom and not used: a week is "1W", not "7D".
const string TIMEFRAME = "1D" // Chart timeframe
const float INITIAL_CAPITAL = 100000 // Initial capital
const string CURRENCY = currency.USD // Initial capital currency
const float ORDER_SIZE = 100 // Default order size
const string ORDER_SIZE_TYPE = strategy.percent_of_equity // Order size: % of equity
const int PYRAMIDING = 1 // Pyramiding
const bool BAR_MAGNIFIER = false // Bar detalization: Default (4 ticks per bar)
const bool CALC_EVERY_TICK = false // Script execution: On bar close
const bool CALC_ON_FILLS = false // Script execution: no recalculation after fills
const float COMMISSION = 0 // Commission
const string COMMISSION_TYPE = strategy.commission.percent // Commission: Percent
const float MARGIN_LONG = 100 // Long leverage 1x (leverage = 100 / margin)
const float MARGIN_SHORT = 100 // Short leverage 1x
const int SLIPPAGE = 0 // Slippage, ticks
const int LIMIT_FILL_TICKS = 0 // Limit order execution: Requested price
const bool FILL_ON_BAR_CLOSE = false // Order execution delay: One tick
strategy("Trend breakout · ATR risk", overlay = true,
initial_capital = INITIAL_CAPITAL,
currency = CURRENCY,
default_qty_type = ORDER_SIZE_TYPE,
default_qty_value = ORDER_SIZE,
pyramiding = PYRAMIDING,
use_bar_magnifier = BAR_MAGNIFIER,
calc_on_every_tick = CALC_EVERY_TICK,
calc_on_order_fills = CALC_ON_FILLS,
commission_type = COMMISSION_TYPE,
commission_value = COMMISSION,
margin_long = MARGIN_LONG,
margin_short = MARGIN_SHORT,
slippage = SLIPPAGE,
backtest_fill_limits_assumption = LIMIT_FILL_TICKS,
process_orders_on_close = FILL_ON_BAR_CLOSE)
// Stops with a clear message on any other timeframe; PineBag reads TIMEFRAME
// and selects it for the run.
if timeframe.period != TIMEFRAME
runtime.error("Switch the chart to the " + TIMEFRAME + " timeframe.")
// ----------------------------------------------------------------------------
// INPUT SETTINGS (TradingView: Settings → Inputs)
// ----------------------------------------------------------------------------
fastLength = input.int(20, "Fast EMA", minval = 1)
slowLength = input.int(50, "Slow EMA", minval = 2)
breakoutLength = input.int(20, "Breakout lookback", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrStop = input.float(2.0, "ATR stop multiplier", minval = 0.1, step = 0.1)
// ----------------------------------------------------------------------------
// CALCULATIONS
// ----------------------------------------------------------------------------
fast = ta.ema(close, fastLength)
slow = ta.ema(close, slowLength)
atr = ta.atr(atrLength)
highestBefore = ta.highest(high, breakoutLength)[1]
// ----------------------------------------------------------------------------
// ENTRIES AND EXITS
// ----------------------------------------------------------------------------
longSignal = fast > slow and close > highestBefore
if longSignal and strategy.position_size == 0
strategy.entry("Long", strategy.long)
stopPrice = strategy.position_avg_price - atr * atrStop
strategy.exit("ATR stop", "Long", stop = stopPrice)
// ----------------------------------------------------------------------------
// PLOTS
// ----------------------------------------------------------------------------
plot(fast, "Fast EMA", color = color.rgb(0, 153, 255))
plot(slow, "Slow EMA", color = color.rgb(123, 97, 255))
Nilai TIMEFRAME
Tulis salah satu interval standar TradingView dalam tanda kutip. Interval yang dapat dimuat bergantung pada paket TradingView Anda, sesuai tradingview.com/pricing.
Hari, minggu, dan bulan.
"1D" "1W" "1M" "3M" "6M" "12M"
Menit, jam, dan bar rentang. Menit tidak memakai huruf; satu jam ditulis 60.
"1" "3" "5" "15" "30" "45""60" "120" "180" "240""1R" "10R" "100R" "1000R"
Interval berbasis detik.
"1S" "5S" "10S" "15S" "30S" "45S"
Interval berbasis tick.
"1T" "10T" "100T" "1000T"
const string TIMEFRAME = "1D" // 1 day
// const string TIMEFRAME = "1W" // 1 week
// const string TIMEFRAME = "240" // 4 hours
// const string TIMEFRAME = "15" // 15 minutes
// const string TIMEFRAME = "30S" // 30 seconds, Premium and higher
Ukuran order: persen, nominal, atau jumlah
ORDER_SIZE berisi angkanya dan ORDER_SIZE_TYPE menentukan artinya. Keduanya mengisi kolom Order size pada tab Properties TradingView.
strategy.percent_of_equity
Persentase dari ekuitas saat ini. 10 berarti 10% ekuitas per trade.
strategy.cash
Nominal dalam mata uang strategi. 1000 berarti 1.000 USD per trade.
strategy.fixed
Jumlah kontrak, saham, atau koin. 0.5 berarti 0,5 BTC per trade.
qty = …
Ukuran default hanya berlaku untuk order tanpa qty sendiri. Entry dengan qty = … memakai nilai tersebut.
// 10% of equity per trade
const float ORDER_SIZE = 10
const string ORDER_SIZE_TYPE = strategy.percent_of_equity
// 1,000 USD per trade (CURRENCY = currency.USD)
// const float ORDER_SIZE = 1000
// const string ORDER_SIZE_TYPE = strategy.cash
// 0.5 contracts, shares or coins per trade
// const float ORDER_SIZE = 0.5
// const string ORDER_SIZE_TYPE = strategy.fixed
Variabel Anda sendiri
Simpan pengaturan logika strategi Anda sendiri di blok INPUT SETTINGS terpisah. Setiap panggilan input.int(), input.float() atau input.bool() menjadi kolom di tab Inputs TradingView, sehingga Anda bisa mengubahnya tanpa mengedit kode.
// ----------------------------------------------------------------------------
// INPUT SETTINGS (TradingView: Settings → Inputs)
// ----------------------------------------------------------------------------
fastLength = input.int(20, "Fast EMA", minval = 1)
slowLength = input.int(50, "Slow EMA", minval = 2)
breakoutLength = input.int(20, "Breakout lookback", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrStop = input.float(2.0, "ATR stop multiplier", minval = 0.1, step = 0.1)