البدء
قم بإعداد PineBag مرة واحدة، ثم قم بإعداد اختبارك الأول في بضع دقائق.
أنت بحاجة إلى ثلاثة أشياء
- جوجل كروم 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(). يُظهر 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)