البرمجة النصية: كتابة استراتيجية
سكربت الاستراتيجية يعرّف decide(bars, params, ctx, state) ويعيد قرارًا واحدًا لكل شمعة مغلقة. والقرار يقود حساب التقييم المحاكى ولا شيء غيره.
Senzoukria · التوثيق · آخر تحديث: سبتمبر 2026
أين تجده
- الموضع
- صفحة البرمجة النصية ← New strategy
- نقطة الدخول
- decide(bars, params, ctx, state)، وتعيد قرارًا أو null
- الإيقاع
- مرّة واحدة لكل شمعة مغلقة — والشمعة قيد التكوّن لا تُمرَّر أبدًا
- الحساب
- حساب التقييم المحاكى على هذا الجهاز؛ والمنصّة لا توجّه أي أمر إلى وسيط
- اللغات
- تتشارك JavaScript وPython نقطة الدخول نفسها وشكل القرار نفسه
ما الذي تفعله
تُشغَّل الاستراتيجية عبر البيئة المعزولة نفسها التي يُشغَّل بها المؤشر. ويُلحَق غلاف قصير بعد شفرتك — بعدها، حتى تبقى أرقام أسطرك هي التي تراها في المحرّر — يستدعي decide()، ويُنمِّط ما يعود منها، ويحمل كائن الحالة إلى الشمعة التالية.
وإن لم تكن decide() معرَّفة، أخفق التشغيل برسالة تقول إن على الاستراتيجية أن تعرّف decide(bars, params, ctx, state). وإن أعادت undefined أو null فذلك جواب صحيح معناه «لا صفقة على هذه الشمعة»، ويبلّغ شريط التشغيل بـ «No trade on this sample».
ويحمل السياق المركزَ المحاكى، وعَلَمًا لكون الحساب مسطَّحًا، وحجمَ التيك، فتُعبَّر المسافات بالتيكات ويعمل السكربت نفسه على عقد مختلف بلا تعديل.
كائن القرار
| الحقل | الافتراضي | ما الذي يغيّره |
|---|---|---|
| action: "buy" | — | يفتح مركز شراء بسعر السوق على الحساب المحاكى، رهنًا بحراس الحساب. |
| action: "sell" | — | يفتح مركز بيع بسعر السوق، رهنًا بالحراس نفسها. |
| action: "close" | — | يسطّح المركز المفتوح؛ وهو بلا أثر حين يكون الحساب مسطَّحًا أصلًا. |
| qty | 1 | العقود. تُقرَّب إلى الأسفل وتُقيَّد بـ 1 على الأقلّ. |
| stopTicks | لا شيء | مسافة الخروج من جهة الخسارة بالتيكات من سعر التنفيذ. |
| targetTicks | لا شيء | مسافة الخروج من جهة الربح بالتيكات. |
| null | — | لا صفقة على هذه الشمعة. |
| state | {} | كل ما تخزّنه على كائن الحالة يُسلَّم إليك على الشمعة التالية؛ ويُمسح حين يتغيّر السكربت. |
كيف تستعملها
- ابدأ من قالب استراتيجية الاختراق Breakout: فهو يشتري كسر قمّة N شمعة بوقف خسارة وهدف ثابتَين، ويُظهر كيف تستعمل الحالة المحمولة لعدّ الشموع التي احتُفظ فيها بالمركز.
- شغّل على بيانات العيّنة أولًا — فتشغيل استراتيجية يبلّغ إن كان قرار قد أُعيد أصلًا، وهو أسرع طريقة لاكتشاف شرط لا يتحقّق أبدًا.
- ثم ركّبها في لوحة Auto strategy داخل Replay لتراها تقرّر شمعةً بشمعة على بيانات معادة حقيقية.
- عبّر عن المخاطرة بالتيكات لا بالأسعار: فحجم التيك يصل في السياق، والحساب يترجم المسافة إلى مستوى خروج.
الحدود والمزالق
- تُطبَّق حراس الحساب قبل أي دخول: فتراجع مخروق، أو حدّ خسارة يومي بُلِغ، أو سقف عقود تُجووِز، يرفضه، وتعرض اللوحة السبب.
- والقيمة المعادة التي ليست قرارًا معروفًا يُبلَّغ عنها بذلك، مع تسمية الأشكال المقبولة.
- ولأن القرارات تُتَّخذ على شموع مغلقة، لا تستطيع استراتيجية التصرّف على حركة داخل الشمعة — وهذا ما يُبقي تشغيلًا محاكى حيًّا واختبارًا رجعيًّا للشفرة نفسها قابلَين للمقارنة.
- ولا يستطيع أي سكربت بلوغ وسيط. فالاستراتيجية هنا استراتيجية تداول ورقي، ولا نتيجة تنتجها وعدٌ بخصوص التداول الحيّ.
صفحات ذات صلة
- تشغيل استراتيجية على الحساب المحاكى
- معرض قوالب السكربتات
- سكربتات Python (محرّك Pyodide)
- الاختبار الرجعي
هذه الصفحة بلغات أخرى
أسئلة شائعة
- هل يمكن كتابة استراتيجية بلغة Python؟
- نعم. فالغلاف موجود بكل لغة ويُلحَق بلغة السكربت، فتحصل استراتيجية Python على غلاف Python. واكتب مفاتيح القرار stopTicks وtargetTicks: فلوحة Auto strategy تقرأ هذين. كما تقبل حلقة الاختبار الرجعي في Python كذلك stop_ticks وtarget_ticks.
- كيف أحتفظ بقيمة بين الشموع؟
- اكتبها على كائن state المُمرَّر وسيطًا رابعًا. فهو يُسلَّم إليك في النداء التالي ويُصفَّر حين تبدّل السكربتات.
- لماذا رُفض أمر الشراء عندي؟
- إمّا أن حارس حساب حجبه — والسبب مطبوع — وإمّا أنه لم يتوفّر سعر حيّ للرمز، وفي هذه الحال ينتظر الدخول بدل اختراع تنفيذ.