תחילת העבודה
הגדר את 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 מציג שגיאה ברורה אם לא ניתן להשתמש בו. - בדוק את הסיכום.
אשר את שם הסקריפט, מסגרת הזמן, ההון וגודל ההזמנה המוצגים למעלה.
indicator(), המר אותו לאסטרטגיה לפני הפעלת PineBag.תבנית אסטרטגיה
כל שדה בלשונית Properties של TradingView תואם ארגומנט של 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 שלכם, כמפורט ב-tradingview.com/pricing.
ימים, שבועות וחודשים.
"1D" "1W" "1M" "3M" "6M" "12M"
דקות, שעות ונרות טווח. לדקות אין אות; שעה אחת היא 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 קובע מה הוא מייצג. יחד הם ממלאים את השדה Order size בלשונית Properties של TradingView.
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() הופכת לשדה בלשונית Inputs של TradingView, כך שאפשר לכוונן אותה בלי לערוך את הקוד.
// ----------------------------------------------------------------------------
// 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)