اختبار الاستراتيجية يتوقف فقط عند تشغيل هذا الرمز وأتساءل لماذا
Results 1 to 8 of 8

Thread: اختبار الاستراتيجية يتوقف فقط عند تشغيل هذا الرمز وأتساءل لماذا

  1. #1
    مرحبا شباب،

    لدي هذا الكود الذي كتبته ، وفي رأيي أنه يعمل بشكل مثالي ، لكن عقلي يبدو خاطئًا ولا يعرف السبب.
    لذلك قمت بتتبع المشكلة إلى جزء محدد ولكني لا أزال لا أعرف ما الذي يجعلها تفشل.
    لا توجد أخطاء من أي أهمية سواء.

    في ما يلي الجزء الذي يبدو فيه الفشل في:
    الرمز المدرج إذا كان (Trades # 91؛ 7، RowNumber2 # 93؛ == 1) {if (Ask lt؛ = Trades # 91؛ 2، RowNumber2 # 93؛ Trades # 91؛ 6، RowNumber # 93؛ == 0) { int Ticket = OrderSend (Symbol ()، OP_SELL، Lots، Ask، Slippage، Trades # 91؛ 4، RowNumber2 # 93 ؛، 0، NULL، Trades # 91؛ 1، RowNumber # 93 ؛، 0، Blue)؛ الحرف # 91؛ 6، RowNumber # 93؛ = 1 ؛/Print (--- MagicNumber =، MagicNumber، ---)؛ ArrayCounter2 = 0 ، RowNumber2 = 0 ، }} آخر {ArrayCounter2 = ArrayCounter2 1؛ RowNumber2 = RowNumber2 1 ، }
    هنا هو الرمز الكامل:
    Inserted Code/ --------------------------------------------- --------------------- /| FTB.mq4 |/| |/| https://www.mql4.com |/ ----------------------------------------------- ------------------- #property copyright #property strict extern int MagicNumber = 10001؛ extern double Lots = 0.1؛ extern double TrailingStop = 0؛ extern int Slippage = 3؛ extern double EntryGap = 0.00500؛ extern int BrokerDigits = 5؛ ex int int AllowableDrawdown = 25؛ extern Int MaxDrawdown = 610؛ extern bool MoneyManagement = false؛ دخول مزدوج؛ مضاعف StopLoss. مزدوجة TakeProfit. ضعف HalfCandleSize. مزدوج الأوسط ضعف OpenCheck. مزدوجة CloseCheck. double Trades # 91؛ 8 # 93؛ # 91؛ 20 # 93 ؛؛/ArrayNumber | MagicNumber | دخول | Stoploss | WaitCounter ExpirationTime | دخلت | Populated Int SignalTime؛ int BarsOnChart = القضبان int IsNewCandle؛ int OrderError = 0؛ int RowNumber = 0؛ int RowNumber2 = 0 ؛ int ArrayCounter = 0؛ int ArrayCounter2 = 0 ،/ ----------------------------------------------- ------------------- /| وظيفة التهيئة الخبير |/ ----------------------------------------------- ------------------- int OnInit () {Trades # 91؛ 0،0 # 93؛ = 1 ؛ الحرف # 91؛ 0،1 # 93؛ = 2 ؛ الحرف # 91؛ 0،2 # 93؛ = 3 الحرف # 91؛ 0،3 # 93؛ = 4 الحرف # 91؛ 0،4 # 93؛ = 5 ؛ الحرف # 91؛ 0،5 # 93؛ = 6 الحرف # 91؛ 0،6 # 93؛ = 7 الحرف # 91؛ 0،7 # 93؛ = 8 الحرف # 91؛ 0،8 # 93؛ = 9 الحرف # 91؛ 0،9 # 93؛ = 10 ؛ الحرف # 91؛ 0،10 # 93؛ 11 = الحرف # 91؛ 0،11 # 93؛ 12 = الحرف # 91؛ 0،12 # 93؛ 13 = الحرف # 91؛ 0،13 # 93؛ 14 = الحرف # 91؛ 0،14 # 93؛ = 15 الحرف # 91؛ 0،15 # 93؛ = 16 الحرف # 91؛ 0،16 # 93؛ 17 = الحرف # 91؛ 0،17 # 93؛ = 18 ؛ الحرف # 91؛ 0،18 # 93؛ = 19 ؛ الحرف # 91؛ 0،19 # 93؛ = 20 ؛ طباعة(-----------)؛ Print (ArrayNumber =، Trades # 91؛ 0، RowNumber # 93؛)؛ Print (MagicNumber =، Trades # 91؛ 1، RowNumber # 93؛)؛ Print (Entry =، Trades # 91؛ 2، RowNumber # 93؛)؛ Print (Stoploss =، Trades # 91؛ 3، RowNumber # 93؛)؛ Print (WaitCounter =، Trades # 91؛ 4، RowNumber # 93؛)؛ Print (ExpirationTime =، Trades # 91؛ 5، RowNumber # 93؛)؛ Print (Entered =، Trades # 91؛ 6، RowNumber # 93؛)؛ Print (Populated =، Trades # 91؛ 7، RowNumber # 93؛)؛ طباعة(-----------)؛ العودة (INIT_SUCCEEDED)؛ }/ ---------------------------------------------- -------------------- /| وظيفة انحياز الخبراء/ ----------------------------------------------- ------------------- void OnDeinit (const int reason)) {}/ ------------------ ------------------------------------------------ /| وظيفة القراد الخبراء/ ----------------------------------------------- ------------------- void OnTick () {if (BarsOnChart! = Bars)/Checking for new closedالشموع {BarsOnChart = القضبان؛ IsNewCandle = 1 ، } آخر {IsNewCandle = 0؛ } إذا كانت (IsNewCandle == 1)/تحقق مما إذا كانت شمعة جديدة قد أغلقت {SignalTime = Hour () - 1؛ إذا ((SignalTime gt؛ 8) (SignalTime lt؛ 14) (High # 91؛ 1 # 93؛ gt؛ High # 91؛ 2 # 93؛))/تحقق لمعرفة ما إذا كانت شمعة الإشارة لديها أعلى أعلى من الشمعة قبل وضمن الإطار الزمني {HalfCandleSize = (High # 91؛ 1 # 93؛ - Low # 91؛ 1 # 93؛)2؛/حساب نصف حجم الشمعة Middle = Low # 91؛ 1 # 93؛ HalfCandleSize/يحسب منتصف الشمعة OpenCheck = Middle - Open # 91 ؛ 1 # 93 ؛؛/يحسب المسافة بين فتح وإغلاق CloseCheck = Middle - Close # 91؛ 1 # 93 ؛؛/يحسب المسافة بين الإغلاق والمتوسط ​​إذا كان (OpenCheck gt؛ 0 CloseCheck gt؛ 0)/يتحقق لمعرفة ما إذا كانت الشمعة تغلق في النصف السفلي {Entry = NormalizeDouble (Low # 91؛ 1 # 93؛ - 0.0001، 5)؛/سبب خطأ OrderSend 130 هو أن Entry Entry قريب جدا من Current Market Entry StopLoss = NormalizeDouble (High # 91؛ 1 # 93؛ 0.0005، 5)؛ بينما (ArrayCounter lt؛ 20) {if (Trades # 91؛ 7، RowNumber # 93؛ == 0) {Traders # 91؛ 1، RowNumber # 93؛ = ماجيك نمبر الحرف # 91؛ 2، RowNumber # 93؛ = دخول الحرف # 91؛ 3، RowNumber # 93؛ = StopLoss الحرف # 91؛ 4، RowNumber # 93؛ = 0 الحرف # 91؛ 5، RowNumber # 93؛ = 0 الحرف # 91؛ 6، RowNumber # 93؛ = 0 الحرف # 91؛ 7، RowNumber # 93؛ = 1 ؛ MagicNumber = MagicNumber 1؛ طباعة(-----------)؛ Print (ArrayNumber =، Trades # 91؛ 0، RowNumber # 93؛)؛ Print (MagicNumber =، Trades # 91؛ 1، RowNumber # 93؛)؛ Print (Entry =، Trades # 91؛ 2، RowNumber # 93؛)؛ Print (Stoploss =، Trades # 91؛ 3، RowNumber # 93؛)؛ Print (WaitCounter =، Trades # 91؛ 4، RowNumber # 93؛)؛ Print (ExpirationTime =، Trades # 91؛ 5، RowNumber # 93؛)؛ Print (Entered =، Trades # 91؛ 6، RowNumber # 93؛)؛ Print (Populated =، Trades # 91؛ 7، RowNumber # 93؛)؛ طباعة(-----------)؛ استراحة؛ } آخر {ArrayCounter = ArrayCounter 1؛ RowNumber = RowNumber 1؛ }} ArrayCounter = 0؛ RowNumber = 0؛ }}} أثناء (ArrayCounter2لتر. 20) {if (Trades # 91؛ 7، RowNumber2 # 93؛ == 1) {if (Ask lt؛ = Trades # 91؛ 2، RowNumber2 # 93؛ Trades # 91؛ 6، RowNumber # 93؛ == 0) {int Ticket = OrderSend (Symbol ()، OP_SELL، Lots، Ask، Slippage، Trades # 91؛ 4، RowNumber2 # 93 ؛، 0، NULL، Trades # 91؛ 1، RowNumber # 93 ؛، 0، Blue)؛ الحرف # 91؛ 6، RowNumber # 93؛ = 1 ؛/Print (--- MagicNumber =، MagicNumber، ---)؛ ArrayCounter2 = 0 ، RowNumber2 = 0 ، }} آخر {ArrayCounter2 = ArrayCounter2 1؛ RowNumber2 = RowNumber2 1 ، }} إذا كانت (ArrayCounter2 == 20) {ArrayCounter2 = 0؛ RowNumber2 = 0 ، }}

    إذا كان بإمكانكم أن تعطيني حكمتكم التي ستكون محل تقدير كبير.
    شكر!

  2. #2

    Quote Originally Posted by ;
    مرحبًا ، لديّ هذا الرمز الذي كتبته ، وفي رأيي أنه يعمل على أكمل وجه ، ولكن يبدو ذهني خطأً ولا يعرف السبب. لذلك قمت بتتبع المشكلة إلى جزء محدد ولكني لا أزال لا أعرف ما الذي يجعلها تفشل. لا توجد أخطاء من أي أهمية سواء. هنا هو الجزء الذي يبدو أنه فشل فيه: إذا كان (Traders [7، RowNumber2] == 1) {if (اسأل lt؛ = Trades [2، RowNumber2] Trades [6، RowNumber] == 0) {int Ticket = OrderSend (Symbol ()، OP_SELL، Lots، Ask، Slippage، Trades [4، RowNumber2]، 0، NULL، Trades [1، RowNumber]، 0، Blue)؛ الصفقات [6، RowNumber] ...
    Backtester غير قادر على تشغيل رمز مثل المحطة. ثم فشل رمزه الطبيعي يعمل في المحطة الطرفية في backtester

  3. #3

    Quote Originally Posted by ;
    {quote} Backtester غير قادر على تشغيل رمز مثل المحطة. ثم فشل رمزه الطبيعي يعمل في المحطة الطرفية في backtester
    ما الذي يجعل هذا يفشل في المختبر على الرغم من؟ لم أختبر هذا على المخططات الحية الفعلية.

  4. #4

    Quote Originally Posted by ;
    {quote} ما الذي قد يجعل هذا الفشل في المختبرين رغم ذلك؟ لم أختبر هذا على المخططات الحية الفعلية.
    إذا لم تختبر الشفرة التي تعرف كيف تعمل بالفعل؟ يمكنك التحقق من ذلك في الرسوم البيانية الحية وعندما ترى أعمال تحاول ذلك في backtester. يجب تشغيل الأكواد البسيطة ولكن إذا كنت تستخدم كودًا معقدًا ، فإن شائعًا لا يعمل في backtester بدون تعديلات كبيرة في الكود. على أي حال هو مضيعة للوقت في محاولة شيء في MT4 backtester. إذا كنت تريد استخدام backtester يجب أن تذهب إلى MT5. هذا المؤيد قادر على تشغيل الكود مثل المحطة بدون أي تعديل وحتى تصحيحه

  5. #5
    درس للتعلم: لا تحذف التوجيه الصارم. أزلها ، أصلح شفرتك ، وأكثر من المحتمل أنك قد أصلحت مشكلتك. بلدي سيئة ، أنا فقط جاء من الترميز حفنة من الثعبان حيث # هو كيف يمكنك التعليق على خط ... لم أكن أعتقد أن صفيف بناء الجملة إهمال [ط ، ي] حتى تجميع باستخدام التوجيه الصارم. TIL.

  6. #6

    Quote Originally Posted by ;
    {quote} إذا لم تختبر الشفرة التي تعرف كيف تعمل بالفعل؟ يمكنك التحقق من ذلك في الرسوم البيانية الحية وعندما ترى أعمال تحاول ذلك في backtester. يجب تشغيل الأكواد البسيطة ولكن إذا كنت تستخدم كودًا معقدًا ، فإن شائعًا لا يعمل في backtester بدون تعديلات كبيرة في الكود. على أي حال هو مضيعة للوقت في محاولة شيء في MT4 backtester. إذا كنت تريد استخدام backtester يجب أن تذهب إلى MT5. هذا المؤيد قادر على تشغيل الكود مثل المحطة بدون أي تعديل وحتى تصحيحه
    هناك خلل كبير مع رمز الاختبار على الرسم البياني المباشر. يستغرق وقتا طويلا ... الكثير من الوقت. لم يكن بإمكاني الحصول على إشارة لهذا لمدة شهر أو أكثر وهو أمر غير قابل للتطبيق على الإطلاق. بالإضافة إلى أنها استراتيجية يتم تداولها فقط خلال أوقات معينة من اليوم. علاوة على ذلك ، إذا كنت أريد أن أجرب اختبار backtest فسيتعين علي استخدام اختبار الاستراتيجية على أي حال. يجب أن تكون هناك مشكلة في الشفرة في مكان ما لن تسمح لها بالاستمرار ولكن لا يمكنني العثور عليها. أحصل على ما تقوله عن MT5 لكن في الوقت الحالي لا يزال كل ما أقوم به على MT4. التبديل ليس سهلا كما هو مجرد تنزيله.
    Quote Originally Posted by ;
    درس للتعلم: لا تحذف التوجيه الصارم. أزلها ، أصلح شفرتك ، وأكثر من المحتمل أنك قد أصلحت مشكلتك. بلدي سيئة ، أنا فقط جاء من الترميز حفنة من الثعبان حيث # هو كيف يمكنك التعليق على خط ... لم أكن أعتقد أن صفيف بناء الجملة إهمال [ط ، ي] حتى تجميع باستخدام التوجيه الصارم. TIL.
    هيه كل شيء جيد لقد حاولت إزالته ومنع الأخطاء فقط من الظهور (مثل تحويل نوع البيانات ينتهي به الأمر في الخسارة المحتملة التي لن تفعل في هذا الرمز). لا يزال نفس المشكلة بالرغم من ذلك.

  7. #7

    Quote Originally Posted by ;
    {quote} يوجد خلل كبير مع كود الاختبار في مخطط بياني مباشر. يستغرق وقتا طويلا ... الكثير من الوقت. لم يكن بإمكاني الحصول على إشارة لهذا لمدة شهر أو أكثر وهو أمر غير قابل للتطبيق على الإطلاق. بالإضافة إلى أنها استراتيجية يتم تداولها فقط خلال أوقات معينة من اليوم. علاوة على ذلك ، إذا كنت أريد أن أجرب اختبار backtest فسيتعين علي استخدام اختبار الاستراتيجية على أي حال. يجب أن تكون هناك مشكلة في الشفرة في مكان ما لن تسمح لها بالاستمرار ولكن لا يمكنني العثور عليها. أحصل على ما تقوله عن MT5 لكن في الوقت الحالي لا يزال كل ما أقوم به على MT4. التبديل ليس سهلا فقط
    لذلك أردت فقط أن أشير إلى بعض الأشياء التي من شأنها أن تساعد في تقدم رمزك إلى الأمام. قد يساعد في النظر إلى بعض أدلة نمط C واستخدام اصطلاحات التنمية المشتركة. من الصعب قراءة التعليمات البرمجية لأنك لا تتبعها. على سبيل المثال ، هناك كتلة تعليمات برمجية كاملة لا يتم وضع مسافة بادئة لها ، فأنت تستخدم CamelCase لأسماء المتغيرات عندما يستخدم هذا النمط عادةً للفئات فقط ، كما تستخدم أيضًا الأعداد الصحيحة بدلاً من أنواع boolean. بالإضافة إلى ذلك ، فأنت تستخدم صفائف متعددة الأبعاد خاطئة. تحتاج فقط لاستخدامها في الجبر الخطي ، كل شيء آخر تحتاج إلى استخدام البنى أو الكائنات. على سبيل المثال لديك Inserted Code Trades # 91؛ 1، RowNumber # 93؛ = MagicNumber من المستحيل إدراك أن الأرقام السحرية هي نوع صحيح وليس مزدوجًا

  8. #8

    Quote Originally Posted by ;
    {quote} لذلك أردت فقط الإشارة إلى بعض الأشياء التي من شأنها مساعدة الشفرة على المضي قدمًا. قد يساعد في النظر إلى بعض أدلة نمط C واستخدام اصطلاحات التنمية المشتركة. من الصعب قراءة التعليمات البرمجية لأنك لا تتبعها. على سبيل المثال ، هناك كتلة تعليمات برمجية كاملة لا يتم وضع مسافة بادئة لها ، فأنت تستخدم CamelCase لأسماء المتغيرات عندما يستخدم هذا النمط عادةً للفئات فقط ، كما تستخدم أيضًا الأعداد الصحيحة بدلاً من أنواع boolean. بالإضافة إلى ذلك ، فأنت تستخدم صفائف متعددة الأبعاد خاطئة. ما عليك سوى استخدامها لأغراض ...
    وأنا أفهم ما تقوله. أنا تدرس النفس عن طريق اللعب مع رمز ولم يكن هناك أي نوع من الطبقة أو البنية المناسبة أثناء تعلمها. قد يكون من الأفضل البحث في المزيد من ممارسات الترميز التقليدية. الآن بغض النظر عن أن كل شيء لا تزال تعمل وأنا في نهاية المطاف العثور على هذه المسألة بفضل تلميح أعطاني أحدهم ووجدت حلقة لا نهائية وحلها. شكرا للمساعدة!

أذونات النشر

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  
  • رمز BB مفعل
  • الابتسامات مفعلة
  • رمز[IMG] مفعل
  • رمز [VIDEO] مفعل
  • رمز HTML غير مفعل
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.