كل يوم في مجموعات التداول الآلي (Algo-Trading)، يطلع لنا «حبة كنز» أو إستراتيجية خارقة جديدة. السيناريو نفسه دائماً: شخص يطلب من ChatGPT يكتب له مؤشر أو بوت جاهز، الذكاء الاصطناعي يطلع له كم مية سطر برمجي، وتريدين فيو (TradingView) يعطيك أرباح خيالية بنسبة 800% سنوياً مع أقل نسبة هبوط (Drawdown)، وأول ما تحاول تشغل هذي التحفة على حساب حقيقي، المحفظة تتبخر خلال ثلاث جلسات تداول. أو أبسط من كذا بكثير: الكود يرفض يسوي كومبايل (Compile) من الأساس لأن التيرمنال زعلان على متغيرات أصل مو موجودة في الوجود.
لو قد جربت تحاول تسوي أتمتة لإستراتيجيتك عن طريق النماذج اللغوية، فأنت أكيد طحت في هذي المشكلة. خلينا نبعد عن النظريات المملة ونفهم ليش النماذج اللغوية دايم تخترع سِنتكس (Syntax) مو موجود، وكيف تقفط هذي الهلوسات، وكيف تجبر الذكاء الاصطناعي يعطيك كود شغّال صح مو مجرد أشكال وهمية.
ضربة معمارية: ليش الذكاء الاصطناعي يخترع لغة Pine Script؟
ChatGPT ما يسوي كومبايل للكود. ما يفهم رياضيات، ولا يدري كيف يشتغل محرك TradingView، وما عنده أي إدراك لسياق التنفيذ (Execution Context). نموذج اللغة مجرد يتنبأ بالرمز التالي الأرجح بناءً على الداتا اللي تدرب عليها.
وهنا تكمن المشكلة الكبرى. داتا التدريب حقت الشبكة العصبية فيها خليط غريب:
- سكريبتات قديمة بـ Pine Script النسخة 2 و 3 و 4، وهي قديمة جداً وتجيب أخطاء في التيرمنال الحديث.
- آلاف المكتبات المخصصة من جيت هب (GitHub)، اللي فيها المطورين عدلوا على الدوال الأساسية على كيفهم.
- أكواد متفرقة بلغات Python و C++ و MQL5.
لما تطلب من الذكاء الاصطناعي «اكتب لي RSI متكيف مع مناطق تشبع بيع وشراء ديناميكية»، النموذج ياخذ اسم الدالة اللي متعود عليها في بايثون، يدمجها مع سِنتكس Pine Script القديم، يحط لك بادئة ta. شكلها حلو، ويطلع لك شي زي ta.optimized_rsi().
بالنسبة للذكاء الاصطناعي، الشكل مرتب ومنطقي. أما بالنسبة لمترجم TradingView، هذا زبالة برمجية بحتة.
أبرز 4 متغيرات وهمية وهلوسات مدمرة لـ ChatGPT
1. الدوال الوهمية في مساحة الأسماء ta.
في النسخة الخامسة من Pine Script، كل المؤشرات الفنية صارت جوّات موديول ta.. الشبكة العصبية فهمت القاعدة هذي، بس صارت تلصق هذي البادئة في كل مكان وبدون أي عقل.
- وش يخترع الذكاء الاصطناعي: ta.supertrend_indicator(), ta.smart_macd(), ta.volume_accumulator().
- الصح والمفروض: دالة Supertrend الأصلية ترجع مصفوفة أو Tuple فيها قيمتين [value, direction] = ta.supertrend(factor, period)، مو مؤشر جاهز ومرتب في سطر واحد.
2. السفر في الزمن عبر request.security (الانحياز المستقبلي - Look-ahead Bias)
هذي أكبر خطيئة تسويها الشبكات العصبية. المؤشر يعطيك أرباح فلكية في الباك تست (Backtest) فقط لأن ChatGPT كتب طلب الداتا من الإطار الزمني الأكبر بشكل غلط.
- وش يخترع الذكاء الاصطناعي: request.security(syminfo.tickerid, "D", close)
- وين المشكلة: بدون ما تحدد بوضوح معاملات دمج البارات barmerge.lookahead_off، الإستراتيجية على فريم 5 دقائق الساعة 10:00 صباحاً تكون "عارفة" أصلاً وش بيكون سعر إغلاق الشمعة اليومية الساعة 23:59. على التاريخ القديم هذا يعطيك نسبة نجاح 99%. بس في السوق الحقيقي - مرجن كول (Margin Call) فوري، لأن المستقبل ما أحد يعلمه بلحظته.
3. اختراع خصائص أوامر وهمية داخل strategy.entry
لما تحاول تضبط حجم الصفقات الديناميكي، ChatGPT دايم يألف بارامترات مو موجودة أصلًا في الـ API.
- وش يخترع الذكاء الاصطناعي: strategy.entry("Long", strategy.long, risk_percent=2.0, max_slippage=3)
- الصح والمفروض: إدارة المخاطر تُكتب إما في خصائص strategy() نفسها، أو تُحسب بطريقة رياضية عبر بارامتر qty. ما فيه شيء اسمه risk_percent جوّات أمر التنفيذ نفسه.
4. أطر زمنية وأنواع بيانات غير موجودة
الذكاء الاصطناعي يحب يكتب "15m" أو "1h" لما يمرر الإطار الزمني للدالة. بس لغة Pine Script صارمة جداً وتطلب منك تستخدم نصوص (Strings) زي "15" للدقائق و "60" أو "240" للساعات. شغلة بسيطة؟ صح، بس بسببها السكريبت راح يضرب معك من مرحلة الكومبايل.
باختصار وبساطة: كود وهمي ضد كود شغّال
عشان نقفل الموضوع هذا نهائياً، شوف المثالين هذول. الأول هو «فرنكنشتاين» النموذجي اللي يطلعه ChatGPT كخيار افتراضي. والثاني هو كود نظيف وقابل للكومبايل بلغة Pine Script v5 وبمنطق شغّال صح.
خربشة ChatGPT (ما يسوي كومبايل ويهلوس):
//@version=5
strategy("AI Hallucination Strategy", overlay=true)
// خطأ 1: دالة ta.custom_adaptive_rsi مو موجودة أساساً في باين سكريبت
rsi_val = ta.custom_adaptive_rsi(close, 14, 80, 20)
// خطأ 2: توقيع الدالة غلط (ta.supertrend تأخذ factor و atrPeriod بدون source)
// ونتيجة التابل (Tuple) انحطت في متغير واحد
st_val = ta.supertrend(close, 3.0, 10)
// خطأ 3: استخدام lookahead_on بدون إزاحة [1] - تاريخياً الـ EMA تسحب داتا من المستقبل
daily_ema = request.security(syminfo.tickerid, "D", ta.ema(close, 200), barmerge.gaps_off, barmerge.lookahead_on)
if (ta.crossover(rsi_val, 50) and close > daily_ema)
// خطأ 4: دالة strategy.entry ما فيها بارامتر اسمه risk_level
strategy.entry("Buy", strategy.long, risk_level=1.5)الكود الاحترافي الشغّال بـ Pine Script v5:
//@version=5
strategy("Clean Quantitative Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// المدخلات المعرفة بأنواعها بدقة
rsi_len = input.int(14, title="RSI Length", minval=1)
st_factor = input.float(3.0, title="Supertrend Factor", step=0.1)
st_period = input.int(10, title="Supertrend Period", minval=1)
// 1. مؤشر RSI القياسي
rsi_val = ta.rsi(close, rsi_len)
// 2. مؤشر Supertrend يرجع الخط الاتجاهي والاتجاه (-1 صاعد، 1 هابط)
[st_line, st_dir] = ta.supertrend(st_factor, st_period)
plot(st_line, "Supertrend", color = st_dir < 0 ? color.green : color.red)
// 3. متوسط EMA اليومي بدون انحياز للمستقبل وبدون إعادة رسم (Repainting):
// قيمة اليوم السابقة المغلقة ([1]) + lookahead_on - النمط الآمن المعتمد
daily_ema = request.security(syminfo.tickerid, "D", ta.ema(close, 200)[1], barmerge.gaps_off, barmerge.lookahead_on)
// الإشارات تنفذ فقط على الشمعة المؤكدة (المغلقة)
long_condition = barstate.isconfirmed and ta.crossover(rsi_val, 50) and close > daily_ema and st_dir < 0
short_condition = barstate.isconfirmed and ta.crossunder(rsi_val, 50) and close < daily_ema and st_dir > 0
// الدخول في الاتجاه المعاكس يعكس المركز تلقائياً
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)قائمة التدقيق: كيف تصفي أكواد الذكاء الاصطناعي المضروبة
لو ناوي تستخدم الذكاء الاصطناعي كمساعد مطور مبتدئ عشان يكتب معك أكواد، خذ هذي القواعد اللي بتوفر عليك ساعات طويلة وقرف أعصاب:
- اجبر الذكاء الاصطناعي يكتب بـ Pine Script v5 حصرياً. اكتب له بوضوح في الأمر (Prompt): "استخدم Pine Script v5 حصرياً. ممنوع استخدام أي دوال بدون بادئة ta. و request. وممنوع نهائياً اختراع دوال أو طرق مخصصة."
- دور على الدوال الوهمية في الدليل المرجعي (Reference Manual). لو شفت دالة غريبة في الكود مثل ta.something()، لا تكسل وتشيك عليها في دليل TradingView الرسمي. في 90% من الحالات مالها أي أثر هناك.
- دقق على request.security. دايم ناظر في المتغيرات حقته. لو ما فيه barmerge.lookahead_off، الباك تست حقك عبارة عن قصة خيالية مالها أي صلة بالواقع.
- اجبر الذكاء الاصطناعي يشرح كل سطر بتعليق (Comment). يوم تخليه يشرح لك منطق كل سطر برمجي، بتقل نسبة هلوسته واختراعه لأسماء دوال وهمية بشكل كبير.
إدارة المخاطر: وين يطيح الوهم بصخرة الواقع
حتى لو كود ChatGPT اشتغل معك وطلع سليم بدون ولا خطأ سِنتكس، تذكر دايم قواعد السوق الحقيقية:
- السليباج (Slippage) والعمولات. النماذج العصبية يوم تختبر الإستراتيجيات مستحيل تحسب السبريد (Spread) وعمولات المنصة. على فريم الدقيقة الواحدة، السكريبت اللي يسوي 1000 صفقة باليوم بيعطيك أرقام مرعبة على الورق، بس بالحقيقة بتدفع المحفظة كلها للمنصة على شكل عمولات Maker/Taker. حط في إعدادات الإستراتيجية يدوياً دائماً نسبة العمولة (على الأقل 0.05% لكل صفقة) مع سليباج من 2 إلى 3 تيكات (Ticks).
- وقف الخسارة الديناميكي. انسى أهداف الربح الثابتة (Take Profit) بـ 1% أو 2%. السوق تتغير تقلباته يومياً. اربط دايماً أوامر الحماية بالتقلب الحالي للسوق عبر مؤشر ATR: Stop Loss Price = Entry Price ± (ta.atr(14) × 1.5)
تقدر تستخدم ChatGPT في التداول بل وتستفيد منه، بس استخدمه كمساعد سريع للصياغة البرمجية في المهام الروتينية. أول ما تسلم الذكاء الاصطناعي مهمة تصميم البنية المعمارية ومنطق المؤشرات بنفسك - اعرف تماماً إنك راح تأخذ تشكيلة محترمة من الهلوسات، ورسوم بيانية وهمية قادمة من المستقبل، ودوال خيالية بيجبرك السوق تدفع ثمنها لاحقاً من جيبك الخاص.