Bermula
Sediakan PineBag sekali, kemudian sediakan ujian pertama anda dalam beberapa minit.
Anda memerlukan tiga perkara
- Google Chrome 116 atau lebih baharu.
- Akaun TradingView yang dilog masuk dengan akses kepada simbol yang ingin anda uji.
- Fail Pine Script yang mengisytiharkan
strategy(), bukan sahajaindicator().
Pasang dan buka PineBag
-
Pasang sambungan.
Gunakan butang pemasangan PineBag. Sematkan sambungan jika anda mahukan akses pantas. -
Buka carta TradingView.
Log masuk dahulu, kemudian buka mana-mana pasaran dan jangka masa yang disokong. -
Muat semula tab carta.
Lakukan ini selepas memasang atau mengemas kini PineBag supaya carta boleh bersambung. -
Buka PineBag.
Pilih ikon PineBag. Penunjuk sambungan bertukar hijau apabila carta sudah sedia.
Panel sisi, kawalan dengan kawalan
Nombor pada antara muka sebenar sepadan dengan penjelasan. Tiada apa-apa dalam imej ini adalah mock-up.
1
2
3
4
5
6
7
8
9
10
11
- 1Strategi
Strategi yang dimuatkan. Klik kad untuk membukanya dalam editor; ikon tong sampah di tajuk bahagian membuangnya.
- 2Ringkasan jalankan
Jangka masa, modal, saiz tempahan dan komisen yang akan digunakan.
- 3Cari
Membuka carian simbol TradingView supaya anda boleh menambah ticker yang layak untuk bursa.
- 4Beg salin
Menyalin setiap ticker, satu
EXCHANGE:SYMBOLsetiap baris. - 5Tampal beg
Menerima baris, koma, koma bertitik atau ruang dan mengabaikan pendua.
- 6Jelas
Meminta klik kedua, menyalin ticker, kemudian mengosongkan senarai; «Tampal ticker» akan mengembalikannya.
- 7Tag ticker
Menunjukkan beg semasa. Gunakan × untuk mengalih keluar satu simbol; tambah sehingga 500.
- 8Jalankan backtest
Mengesahkan persediaan dan memulakan larian portfolio berjujukan.
- 9Laporan
Simpan 50 laporan terkini secara tempatan dan eksport JSON atau CSV.
- 10Hari lagi
Active days: 05— Hari lagi. - 11Sokongan
Sokongan tersedia untuk permintaan teknikal, pengebilan, pelesenan dan privasi.
Muatkan strategi
- Pilih sumber.
Gugurkan a.pinefail ke dalam Strategi, atau buka Editor dan tampal kod. - Betulkan sebarang mesej pengesahan.
Skrip mesti mengandungistrategy(). PineBag menunjukkan ralat yang jelas jika ia tidak boleh digunakan. - Semak ringkasan.
Sahkan nama skrip, jangka masa, modal dan saiz pesanan yang ditunjukkan di atas Jalankan.
indicator(), tukarkannya kepada strategi sebelum menjalankan PineBag.Templat strategi
Setiap medan dalam tab Properties TradingView sepadan dengan satu argumen strategy(). Simpan nilai sebagai pemalar bernama di bahagian atas skrip: dengan keutamaan skrip, setiap ticker diuji dengan andaian yang sama.
TIMEFRAMEJangka masa
INITIAL_CAPITAL · CURRENCYModal permulaan
ORDER_SIZE · ORDER_SIZE_TYPESaiz pesanan lalai
PYRAMIDINGPiramid
BAR_MAGNIFIERPerincian bar
CALC_EVERY_TICK · CALC_ON_FILLSPelaksanaan skrip
COMMISSION · COMMISSION_TYPEKomisen
MARGIN_LONG · MARGIN_SHORTLeveraj long dan short
SLIPPAGESlippage
LIMIT_FILL_TICKSPelaksanaan pesanan had
FILL_ON_BAR_CLOSEKelewatan pelaksanaan pesanan
runtime.error()Menghentikan skrip pada mana-mana rangka masa 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 selang standard TradingView dalam tanda petik. Selang yang dimuatkan bergantung pada pelan TradingView anda, seperti yang disenaraikan di tradingview.com/pricing.
Hari, minggu dan bulan.
"1D" "1W" "1M" "3M" "6M" "12M"
Minit, jam dan bar julat. Minit tiada huruf; satu jam ialah 60.
"1" "3" "5" "15" "30" "45""60" "120" "180" "240""1R" "10R" "100R" "1000R"
Selang berasaskan saat.
"1S" "5S" "10S" "15S" "30S" "45S"
Selang berasaskan 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
Saiz pesanan: peratus, amaun atau kuantiti
ORDER_SIZE memegang nombor dan ORDER_SIZE_TYPE menyatakan maksudnya. Bersama-sama ia mengisi medan Order size pada tab Properties TradingView.
strategy.percent_of_equity
Peratus daripada ekuiti semasa. 10 bermaksud 10% ekuiti bagi setiap dagangan.
strategy.cash
Amaun dalam mata wang strategi. 1000 bermaksud 1,000 USD bagi setiap dagangan.
strategy.fixed
Bilangan kontrak, saham atau syiling. 0.5 bermaksud 0.5 BTC bagi setiap dagangan.
qty = …
Saiz lalai hanya digunakan untuk pesanan tanpa qty sendiri. Kemasukan dengan qty = … menggunakan nilai itu.
// 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
Pemboleh ubah anda sendiri
Simpan tetapan logik strategi anda sendiri dalam blok INPUT SETTINGS yang berasingan. Setiap panggilan input.int(), input.float() atau input.bool() menjadi medan dalam tab Inputs TradingView, jadi anda boleh melarasnya tanpa mengedit kod.
// ----------------------------------------------------------------------------
// 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)