시작하기
PineBag를 한 번 설정하고 몇 분 안에 첫 번째 테스트를 준비하세요.
세 가지가 필요합니다
- Google Chrome 116 이상.
- 테스트하려는 심볼에 액세스할 수 있는 로그인된 TradingView 계정.
- 다음을 선언하는 Pine Script 파일
strategy()뿐만 아니라indicator().
PineBag 설치 및 열기
-
확장 프로그램을 설치하세요.
PineBag 설치 버튼을 이용하세요. 빠른 액세스를 원하면 확장 프로그램을 고정하세요. -
TradingView 차트를 엽니다.
먼저 로그인한 다음 지원되는 시장과 기간을 엽니다. -
차트 탭을 새로고침하세요.
PineBag를 설치하거나 업데이트한 후 차트를 연결할 수 있도록 하세요. -
PineBag을 엽니다.
PineBag 아이콘을 선택하세요. 차트가 준비되면 연결 표시기가 녹색으로 변합니다.
측면 패널, 컨트롤별 컨트롤
실제 인터페이스의 숫자가 설명과 일치합니다. 이 이미지의 어떤 것도 모형이 아닙니다.
1
2
3
4
5
6
7
8
9
10
11
- 1전략
불러온 전략입니다. 카드를 클릭하면 편집기에서 열리고, 섹션 제목의 휴지통으로 삭제합니다.
- 2실행 요약
사용될 기간, 자본금, 주문 규모 및 커미션입니다.
- 3검색
TradingView 기호 검색을 열어 거래소 자격 티커를 추가할 수 있습니다.
- 4복사가방
모든 티커를 하나씩 복사합니다.
EXCHANGE:SYMBOL한 줄당. - 5페이스트백
줄, 쉼표, 세미콜론 또는 공백을 허용하고 중복을 무시합니다.
- 6클리어
한 번 더 클릭해야 하며, 티커를 복사한 뒤 목록을 비웁니다. ‘티커 붙여넣기’로 되돌릴 수 있습니다.
- 7티커 태그
현재 가방을 보여줍니다. 하나의 기호를 제거하려면 ×를 사용하십시오. 500까지 추가하세요.
- 8백테스트 실행
설정을 검증하고 순차 포트폴리오 실행을 시작합니다.
- 9보고서
최신 50개 보고서를 로컬에 저장하고 JSON 또는 CSV로 내보냅니다.
- 10남은 일수
Active days: 05— 남은 일수. - 11지원
기술, 청구, 라이센스 및 개인 정보 보호 요청에 대한 지원이 제공됩니다.
전략 불러오기
- 소스를 선택하세요.
드롭.pine파일을 Strategy에 추가하거나 Editor를 열고 코드를 붙여넣으세요. - 확인 메시지를 수정하세요.
스크립트에는 다음이 포함되어야 합니다.strategy(). PineBag를 사용할 수 없으면 명확한 오류를 표시합니다. - 요약을 확인하세요.
Run 위에 표시된 스크립트명, 기간, 자본금, 주문규모를 확인하세요.
indicator(), PineBag를 실행하기 전에 전략으로 변환하세요.전략 템플릿
TradingView Properties 탭의 모든 항목은 strategy() 인수에 대응합니다. 값을 스크립트 상단의 이름 있는 상수로 두세요. 스크립트 우선순위를 사용하면 모든 종목이 같은 가정으로 테스트됩니다.
TIMEFRAME타임프레임
INITIAL_CAPITAL · CURRENCY초기 자본
ORDER_SIZE · ORDER_SIZE_TYPE기본 주문 크기
PYRAMIDING피라미딩
BAR_MAGNIFIER봉 세부 수준
CALC_EVERY_TICK · CALC_ON_FILLS스크립트 실행
COMMISSION · COMMISSION_TYPE수수료
MARGIN_LONG · MARGIN_SHORT롱 및 숏 레버리지
SLIPPAGE슬리피지
LIMIT_FILL_TICKS지정가 주문 체결
FILL_ON_BAR_CLOSE주문 체결 지연
runtime.error()다른 타임프레임에서는 스크립트를 중지합니다.
//@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))
TIMEFRAME 값
TradingView 표준 인터벌 중 하나를 따옴표 안에 적으세요. 어떤 인터벌을 불러올 수 있는지는 tradingview.com/pricing에 나온 대로 TradingView 요금제에 따라 다릅니다.
일, 주, 월.
"1D" "1W" "1M" "3M" "6M" "12M"
분, 시간, 레인지 바. 분에는 문자가 붙지 않으며 1시간은 60입니다.
"1" "3" "5" "15" "30" "45""60" "120" "180" "240""1R" "10R" "100R" "1000R"
초 단위 인터벌.
"1S" "5S" "10S" "15S" "30S" "45S"
틱 인터벌.
"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
주문 크기: 비율, 금액 또는 수량
ORDER_SIZE는 숫자를, ORDER_SIZE_TYPE은 그 숫자의 의미를 정합니다. 둘이 함께 TradingView Properties 탭의 Order size 필드를 채웁니다.
strategy.percent_of_equity
현재 자본 대비 비율. 10은 거래당 자본의 10%를 뜻합니다.
strategy.cash
전략 통화 기준 금액. 1000은 거래당 1,000 USD를 뜻합니다.
strategy.fixed
계약, 주식 또는 코인 수량. 0.5는 거래당 0.5 BTC를 뜻합니다.
qty = …
기본 크기는 자체 qty가 없는 주문에만 적용됩니다. qty = …가 있는 진입은 그 값을 사용합니다.
// 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
사용자 변수
직접 만든 전략 로직의 설정은 별도의 INPUT SETTINGS 블록에 두세요. input.int(), input.float(), input.bool() 호출은 각각 TradingView Inputs 탭의 항목이 되므로 코드를 수정하지 않고 조정할 수 있습니다.
// ----------------------------------------------------------------------------
// 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)