تنصل: ما يلي هو فقط لأغراض الترفيه + التعليم! وليس نصيحة مالية أو نصيحة برمجة (ذكاء اصطناعي، أو غيره). هذا فقط لأغراض العرض!
مطلوب لِسُحب 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)

