تنصل: ما يلي هو فقط لأغراض الترفيه + التعليم! وليس نصيحة مالية أو نصيحة برمجة (ذكاء اصطناعي، أو غيره). هذا فقط لأغراض العرض!

مطلوب لِسُحب SMA

تصرف كمطور متمرس لـ TradingView Pine Script v5.

أنشئ مؤشرًا تراكبيًا باسم:

“ترميز مؤشرات تقنية 4.0 — إعداد سحابة SMA”

الغرض

ابنِ مؤشرًا متعدد الإطارات الزمنية غير مُعاد رسمه (non-repainting) يوفر سياقًا للاتجاه ويؤهل إشارات محتملة. يجب ألا ينفذ صفقات أو يقدم نصيحة مالية.

الإطار

يستخدم المؤشر ثلاث طبقات تحليلية:

1. بنية 8 ساعات

   - حدّد بنية السوق الأوسع على إطار 8H الزمني.

   - صنّفه على أنه صعودي أو هبوطي أو محايد.

   - اعرض التصنيف الحالي في لوحة صغيرة.

2. سحابة SMA لمدة ساعة واحدة

   - احسب متوسطًا متحركًا بسيطًا سريعًا وبطيئًا على إطار 1H الزمني.

   - اجعل طولَي SMA قابلين للضبط.

   - القيم الافتراضية: [أدخل SMA السريع] و[أدخل SMA البطيء].

   - املأ المنطقة بين المتوسطين:

     • أخضر عندما يكون SMA السريع أعلى من SMA البطيء.

     • أحمر عندما يكون SMA السريع أسفل SMA البطيء.

     • رمادي محايد عندما تكون العلاقة غير واضحة.

   - سحابة الساعة الواحدة هي عامل تصفية الاتجاه الأساسي.

3. إشارة 15 دقيقة وتأكيد IMACD

   - احسب إشارة الدخول على إطار 15M الزمني.

   - أكّد الإشارات الصعودية فقط عندما يكون زخم IMACD إيجابيًا.

   - أكّد الإشارات الهبوطية فقط عندما يكون زخم IMACD سلبيًا.

   - استخدم مواصفات IMACD التالية: [أدخل صيغة IMACD الدقيقة والإعدادات].

   - ارسم مثلثًا أخضر متجهًا للأعلى للإشارات الصعودية المؤكدة.

   - ارسم مثلثًا أحمر متجهًا للأسفل للإشارات الهبوطية المؤكدة.

تسلسل الإشارات

A bullish qualification requires:

- بنية 8H صعودية أو محايدة مقبولة.

- سحابة SMA صعودية لمدة ساعة واحدة.

- إشارة 15 دقيقة صعودية.

- تأكيد IMACD الإيجابي.

يتطلب التأهيل الهبوطي الشروط المعاكسة تمامًا.

المتطلبات التقنية

- استخدم request.security() مع barmerge.lookahead_off.

- قيّم الإشارات فقط على الشموع المغلقة المؤكدة.

- لا تعِد رسم الإشارات التاريخية.

- لا تستخدم بيانات مستقبلية.

- اسمح بتغيير الأطر الزمنية الثلاثة وجميع أطوال الحسابات من خلال المدخلات.

- أضف مفاتيح لإظهار أو إخفاء السحابة، وتسميات البنية، وعلامات الإشارة، ولوحة المعلومات.

- أضف قواعد alertcondition() للتأهلات الصعودية والهبوطية المؤكدة.

- حافظ على نظافة الرسم البياني بصريًا.

- لا تتضمن أوامر آلية أو ادعاءات أداء أو ربح وخسارة أو توصيات استثمارية.

- علّق على الكود بوضوح واشرح كيف يساهم كل إطار زمني في النتيجة.

قبل كتابة الكود، حدّد أي قواعد حسابية أو معاملات مفقودة. لا تخترع إعدادات مملوكة. اطلب مني القيم المفقودة أولًا.

بعد استلام تلك القيم، قدّم:

1. كود Pine Script v5 كامل.

2. شرح موجز للمنطق.

3. قائمة تحقق لاختبار أن المؤشر لا يعيد الرسم.

الكود (نسخ ولصق)

//@version=6

indicator("John Wick v 4.0", overlay=true)

//==================================================

// مدخلات MACD

//==================================================

fastLength   = input.int(12, "MACD Fast Length")

slowLength   = input.int(26, "MACD Slow Length")

signalLength = input.int(9, "MACD Signal Length")

atrLength = input.int(14, "ATR Length")

showExits   = input.bool(true)

showCrosses = input.bool(true)

minProfitATR = input.float(0.30)

//==================================================

// نواة MACD

//==================================================

fastMA   = ta.ema(close, fastLength)

slowMA   = ta.ema(close, slowLength)

macdLine   = fastMA - slowMA

signalLine = ta.ema(macdLine, signalLength)

hist = macdLine - signalLine

//==================================================

// أحداث التقاطع

//==================================================

bullCross = ta.crossover(macdLine, signalLine)

bearCross = ta.crossunder(macdLine, signalLine)

//==================================================

// تباعد العلامات

//==================================================

atrValue = ta.atr(atrLength)

dotOffset = atrValue * 0.28

triOffset = atrValue * 0.70

longExitY  = high + dotOffset

shortExitY = low  - dotOffset

triBullY = low  - triOffset

triBearY = high + triOffset

//==================================================

// محرك حالة التداول

//==================================================

var int   activeDir    = 0

var float entryPrice   = na

var float bestHist     = na

var bool  partialTaken = false

if bullCross

   activeDir    := 1

   entryPrice   := close

   bestHist     := hist

   partialTaken := false

if bearCross

   activeDir    := -1

 entryPrice   := close

   bestHist     := hist

   partialTaken := false

if activeDir == 1

   bestHist := na(bestHist) ? hist : math.max(bestHist, hist)

if activeDir == -1

   bestHist := na(bestHist) ? hist : math.min(bestHist, hist)

//==================================================

// منطق الخروج

//==================================================

longInProfit =

    activeDir == 1

and not na(entryPrice)

and high >= entryPrice + atrValue * minProfitATR

shortInProfit =

    activeDir == -1

and not na(entryPrice)

and low <= entryPrice - atrValue * minProfitATR

longMomentumFade =

    activeDir == 1

and bestHist > 0

and hist < hist[1]

shortMomentumFade =

    activeDir == -1

and bestHist < 0

and hist > hist[1]

yellowLongExit =

    showExits

and activeDir == 1

and not partialTaken

and longInProfit

and longMomentumFade

yellowShortExit =

    showExits

and activeDir == -1

and not partialTaken

and shortInProfit

and shortMomentumFade

if yellowLongExit or yellowShortExit

   partialTaken := true

redLongExit =

    showExits

and activeDir == 1

and partialTaken

and bearCross

redShortExit =

    showExits

and activeDir == -1

and partialTaken

and bullCross

if redLongExit or redShortExit

   activeDir    := 0

   entryPrice   := na

   bestHist     := na

   partialTaken := false

//==================================================

// تكديس EMA (سحابة من 5 طبقات)

//==================================================

ema5  = ta.ema(close, 5)

ema9  = ta.ema(close, 9)

ema12 = ta.ema(close, 12)

ema26 = ta.ema(close, 26)

ema50 = ta.ema(close, 50)

//==================================================

// رسم EMA (رفيع / باهت)

//==================================================

p5  = plot(ema5,  color=color.new(color.aqua, 20),  linewidth=1)

p9  = plot(ema9,  color=color.new(color.blue, 20),  linewidth=1)

p12 = plot(ema12, color=color.new(color.gray, 20),  linewidth=1)

p26 = plot(ema26, color=color.new(color.orange,20), linewidth=1)

p50 = plot(ema50, color=color.new(color.red, 20),   linewidth=1)

//==================================================

// السحب

//==================================================

// رد فعل سريع 5–9

fill(p5, p9, color=color.new(color.aqua, 80))

// زخم 9–12

fill(p9, p12, color=color.new(color.blue, 82))

// البنية 12–26

fill(p12, p26, color=color.new(color.gray, 84))

// الاتجاه 26–50

fill(p26, p50, color=color.new(color.orange, 86))

//==================================================

// نقاط الخروج

//==================================================

plotshape(

    yellowLongExit ? longExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.new(color.yellow, 20),

    size=size.tiny

)

plotshape(

    yellowShortExit ? shortExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.new(color.yellow, 20),

    size=size.tiny

)

plotshape(

    redLongExit ? longExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.red,

    size=size.tiny

)

plotshape(

    redShortExit ? shortExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.red,

    size=size.tiny

)

//==================================================

// مثلثات الدخول

//==================================================

plotshape(

    showCrosses and bullCross ? triBullY : na,

    style=shape.triangleup,

    location=location.absolute,

    color=color.lime,

    size=size.small

)

plotshape(

    showCrosses and bearCross ? triBearY : na,

    style=shape.triangledown,

    location=location.absolute,

    color=color.red,

    size=size.small

)

موجّه ATR والكود

المطالبة

تصرّف كمطوّر Pine Script v5 خبير على TradingView.

أنشئ مؤشرًا فوق الرسم البياني باسم:

“ترميز المؤشر التقني 5.2 — متوسط المدى الحقيقي”

الغرض

أنشئ مؤشر اتجاه يتكيّف مع التقلبات باستخدام مستوى تتبّع للمتوسط الحقيقي للمدى بطريقة التدرّج التصاعدي. المؤشر مخصص للتحليل التعليمي ولا يجب أن ينفّذ صفقات أو يقدّم ادعاءات أداء.

الإعدادات الأساسية

- فترة ATR: 10

- مضاعف ATR: 1.9

- مصدر الحساب: close

- اجعل فترة ATR والمضاعف والمصدر قابلة للضبط.

الحساب

1. احسب متوسط المدى الحقيقي على مدى 10 فترات.

2. احسب مسافة التتبّع:

   trailingDistance = 1.9 × ATR(10)

3. أنشئ مستوى تتبّع تكراريًا يتدرج مع السعر:

   - طالما بقي السعر فوق مستوى التتبّع السابق، قد يرتفع المستوى لكنه لا ينخفض أبدًا.

   - طالما بقي السعر تحت مستوى التتبّع السابق، قد ينخفض المستوى لكنه لا يرتفع أبدًا.

   - عندما يعبر السعر مستوى التتبّع، غيّر الاتجاه المرمّز.

منطق الاتجاه

- غيّر الاتجاه إلى صعودي عندما يعبر سعر الإغلاق فوق مستوى التتبّع.

- غيّر الاتجاه إلى هبوطي عندما يعبر سعر الإغلاق أسفل مستوى التتبّع.

- ولّد إشارة فقط عندما يتغيّر الاتجاه.

- لا تولّد إشارات متكررة على كل شمعة.

المخرجات المرئية

- ارسم مستوى تتبّع ATR.

- استخدم الأخضر عندما يكون الاتجاه المرمّز صعوديًا.

- استخدم الأحمر عندما يكون الاتجاه المرمّز هبوطيًا.

- ارسم مثلثًا أخضر متجهًا للأعلى عند تغيّر الاتجاه إلى صعودي.

- ارسم مثلثًا أحمر متجهًا للأسفل عند تغيّر الاتجاه إلى هبوطي.

- اختياريًا، لوّن الشموع وفقًا للاتجاه الحالي.

سحابة EMA

- أضف سحابة متوسطات متحركة أسية لمدة 12 فترة و26 فترة.

- املأ السحابة باللون الأخضر عندما يكون EMA 12 أعلى من EMA 26.

- املأها باللون الأحمر عندما يكون EMA 12 أسفل EMA 26.

- تعامل مع سحابة EMA كسياق للزخم؛ ويجب ألا تغيّر حساب تغيّر اتجاه ATR.

- أضف مدخلًا لإخفاء سحابة EMA.

المتطلبات التقنية

- استخدم إغلاقات الشموع المؤكدة.

- لا تعِد الرسم.

- لا تستخدم معلومات مستقبلية أو نظرة مستقبلية.

- حافظ على مستوى التتبّع عبر منطق متغير递.

- أضف قواعد alertcondition() لتغيّرات الاتجاه الصعودية والهبوطية.

- أضف مفاتيح لتفعيل/إخفاء العلامات، وألوان الشموع، ومستوى التتبّع، وسحابة EMA.

- لا تنشئ أوامر استراتيجية أو جدول نتائج أو حسابات ربح وخسارة أو توصيات مالية.

- نظّم الكود وعلّق عليه بوضوح.

قدّم:

1. كود Pine Script v5 كامل.

2. شرح بلغة بسيطة لـ ATR وآلية التدرّج التصاعدي.

3. وصف للشروط التي تنشئ كل علامة.

4. قائمة تحقق مختصرة للتحقق من عدم إعادة الرسم.


الكود

//@version=6

indicator("JW V5.2", overlay=true)

// ── المدخلات ──────────────────────────────────────────

atrPeriod     = input.int(10, "ATR Period")

keyValue      = input.float(1.9, "Key Value / ATR Multiplier", step=0.1)

warnZoneATR   = input.float(0.25, "Warning Zone (x ATR)", step=0.05)

cloudSmooth   = input.int(3, "Cloud Smoothness", minval=1, tooltip="Smooths the plotted band only — does not affect signal timing")

src           = close

// ── نواة وقف التتبّع ATR — خام، تقود كل شيء فعليًا ──

xATR  = ta.atr(atrPeriod)

nLoss = keyValue * xATR

var float trailStop = 0.0

trailStop := src > nz(trailStop[1], 0) and src[1] > nz(trailStop[1], 0) ? math.max(nz(trailStop[1]), src - nLoss) :

            src < nz(trailStop[1], 0) and src[1] < nz(trailStop[1], 0) ? math.min(nz(trailStop[1]), src + nLoss) :

            src > nz(trailStop[1], 0) ? src - nLoss : src + nLoss

var int pos = 0

pos := src[1] < nz(trailStop[1], 0) and src > nz(trailStop[1], 0) ? 1 :

      src[1] > nz(trailStop[1], 0) and src < nz(trailStop[1], 0) ? -1 : nz(pos[1], 0)

trendColor = pos == 1 ? color.new(color.green, 0) : pos == -1 ? color.new(color.red, 0) : color.gray

// ── السحابة — ملساء بصريًا للانسيابية، تجميلية فقط ──

plotSrc  = ta.ema(src, cloudSmooth)

plotStop = ta.ema(trailStop, cloudSmooth)

pricePlot = plot(plotSrc,  title="Price (smoothed)",      color=trendColor, linewidth=1)

stopPlot  = plot(plotStop, title="Trail Stop (smoothed)", color=trendColor, linewidth=1)

fill(pricePlot, stopPlot, color=color.new(trendColor, 75), title="Trend Cloud")

// ── الإشارات — مدفوعة بالقيم الخام، غير متأثرة بالتنعيم ──

buySignal  = pos == 1  and pos[1] == -1

sellSignal = pos == -1 and pos[1] == 1

plotshape(buySignal,  title="Buy",  text="buy",  style=shape.triangleup,   location=location.belowbar, color=color.green, textcolor=color.white, size=size.small)

plotshape(sellSignal, title="Sell", text="sell", style=shape.triangledown, location=location.abovebar, color=color.red,   textcolor=color.white, size=size.small)

alertcondition(buySignal,  "Buy Signal",  "ATR Trail flipped bullish")

alertcondition(sellSignal, "Sell Signal", "ATR Trail flipped bearish")

// ── قرب الانعكاس — فجوة خام، مثل منطق الإشارة تمامًا ──

gapATR    = pos == 1 ? (src - trailStop) / xATR : (trailStop - src) / xATR

pctToFlip = math.max(0, math.min(100, 100 * (1 - gapATR / keyValue)))

dirText   = pos == 1 ? "LONG" : pos == -1 ? "SHORT" : "FLAT"

nearFlip  = gapATR <= warnZoneATR

labelColor = nearFlip ? color.new(color.orange, 0) : trendColor

labelText  = dirText + "  —  " + str.tostring(gapATR, "#.##") + " ATR to flip  (" + str.tostring(pctToFlip, "#") + "%)"

var label proximityLabel = na

if barstate.islast

   label.delete(proximityLabel)

   proximityLabel := label.new(bar_index + 2, src, labelText, style=label.style_label_left, color=labelColor, textcolor=color.white, size=size.normal)