اشكال برمجي و كيفية ازالته
النتائج 1 إلى 4 من 4
  1. #1
    تاريخ التسجيل
    Oct 2009
    العمر
    49
    المشاركات
    1,476

    افتراضي اشكال برمجي و كيفية ازالته

    السلام عليكم
    الله يبارك فيك يا استاذ اسامه
    عندي كد الحالي و واجهت بعض المشاكل عند تفعيل الصفقات بحيث يظهر عندي خطاء التالي في الجورنال: 4051

    2011.04.26 05:25:44 EA EURCAD,H1: Error in putting on order!! -- 4051
    2011.04.26 05:25:44 EURCAD,H1: invalid lots amount for OrderSend function

    بحثت في النت و لقيت طريقة ازالته وحسب الشرح الموجود على الرابط كانه راجع الى وجود اشكال في دالة الفانكشن
    http://f o r u m.mql4.com/27120
    طبعا حاولت في تغيير حجم الصفقات و لكن لم ينفع و الاحجام المستخدمه هي 1 2 4 8 16 32 على حساب 100 الف دولار و هي ليست مايكرو حتى الاشكال يرجع اليها
    ثم حسب شرح المبرمج على الرابط المشار اليه يجب استبدال بعض الاكواد باكواد اخرى:
    raplace

    Print("Lots: ", lot);
    to

    Print("Lots: ", lot," minlot - ",MarketInfo(Symbol(),MODE_MINLOT));

    and
    replace:
    if(lot_min<0 lot_max<=0.0 lot_step<=0.0)
    to
    if(lot_min<=0 lot_max<=0.0 lot_step<=0.0)
    add after:
    LotsRisk=NormalizeDouble(LotsRisk/lot_step,0)*lot_step;
    if(LotsRisk<lot_min) LotsRisk=lot_min;
    if(LotsRisk>lot_max) LotsRisk=lot_max;
    this string:
    Print("LotsRisk - ",LotsRisk);

    و لكن المشكله لا ادري في اي دالة يجب استبدال و اضافة الكد المطلوب في كد التالي:
    ياريت اخي محمود اذا لديك حل لمشكلة خطاء 4051 فارجوا المساعده فيه او اتباع خطوات الاعلى حسب شرح المبرج
    كود PHP:
    int safeShortOrder(int ai_0int ai_4double a_lots_8int a_magic_16string a_comment_20) {
    int l_error_32 = -1;
    int l_count_36 0;
    double l_price_40 Bid ai_0 Point;
    double l_price_48 Bid ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    int l_ticket_28 OrderSend(Symbol(), OP_SELLa_lots_8NormalizeDouble(BidDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 1) {
    for (
    l_count_36 0l_count_36 10l_count_36++) {
    l_error_32 GetLastError();
    Print(
    "Error in putting on order!! -- "l_error_32);
    if (
    handleError(l_error_32) == 3) {
    Alert("Fatal Error -- Can Not Put On Order! Haulting Trading...");
    return (-
    2);
    }
    Print(
    "Saveable error..trying again..(#" l_count_36 " of 10");
    Sleep(2000);
    Rates();
    l_price_40 Bid ai_0 Point;
    l_price_48 Bid ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    l_ticket_28 OrderSend(Symbol(), OP_SELLa_lots_8NormalizeDouble(BidDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 0) break;
    }
    if (
    l_ticket_28 1) {
    Alert("Could not put on order! Haulting Trading...");
    return (-
    2);
    }
    }
    OrderModify(l_ticket_28OrderOpenPrice(), l_price_40l_price_480CLR_NONE);
    return (
    l_ticket_28);
    }

    int safeLongOrder(int ai_0int ai_4double a_lots_8int a_magic_16string a_comment_20) {
    int l_error_32 = -1;
    int l_count_36 0;
    double l_price_40 Ask ai_0 Point;
    double l_price_48 Ask ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    Print(
    "Stop Loss -- "l_price_40);
    Print(
    "Take Profit --"l_price_48);
    int l_ticket_28 OrderSend(Symbol(), OP_BUYa_lots_8NormalizeDouble(AskDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 1) {
    for (
    l_count_36 0l_count_36 10l_count_36++) {
    l_error_32 GetLastError();
    Print(
    "Error in putting on order!! -- "l_error_32);
    if (
    handleError(l_error_32) == 3) {
    Alert("Fatal Error -- Can Not Put On Order! Haulting Trading...");
    return (-
    2);
    }
    Print(
    "Saveable error..trying again..(#" l_count_36 " of 10");
    Sleep(2000);
    Rates();
    l_price_40 Ask ai_0 Point;
    l_price_48 Ask ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    l_ticket_28 OrderSend(Symbol(), OP_BUYa_lots_8NormalizeDouble(AskDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 0) break;
    }
    if (
    l_ticket_28 1) {
    Alert("Could not put on order! Haulting Trading...");
    return (-
    2);
    }
    }
    OrderModify(l_ticket_28OrderOpenPrice(), l_price_40l_price_480CLR_NONE);
    return (
    l_ticket_28);
    }

    int totalOrders(string a_symbol_0int a_magic_8) {
    int l_count_12 0;
    for (
    int l_pos_16 0l_pos_16 OrdersTotal(); l_pos_16++) {
    OrderSelect(l_pos_16SELECT__POSMODE_TRADES);
    if (
    OrderSymbol() == a_symbol_0 && OrderMagicNumber() == a_magic_8l_count_12++;
    }
    return (
    l_count_12);

    آخر تعديل بواسطة amazing ، 27-04-2011 الساعة 11:38 AM

  2. #2
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,977

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة amazing مشاهدة المشاركة
    السلام عليكم
    الله يبارك فيك يا استاذ اسامه
    عندي كد الحالي و واجهت بعض المشاكل عند تفعيل الصفقات بحيث يظهر عندي خطاء التالي في الجورنال: 4051

    2011.04.26 05:25:44 EA EURCAD,H1: Error in putting on order!! -- 4051
    2011.04.26 05:25:44 EURCAD,H1: invalid lots amount for OrderSend function

    بحثت في النت و لقيت طريقة ازالته وحسب الشرح الموجود على الرابط كانه راجع الى وجود اشكال في دالة الفانكشن
    http://f o r u m.mql4.com/27120
    طبعا حاولت في تغيير حجم الصفقات و لكن لم ينفع و الاحجام المستخدمه هي 1 2 4 8 16 32 على حساب 100 الف دولار و هي ليست مايكرو حتى الاشكال يرجع اليها
    ثم حسب شرح المبرمج على الرابط المشار اليه يجب استبدال بعض الاكواد باكواد اخرى:
    raplace

    Print("Lots: ", lot);
    to

    Print("Lots: ", lot," minlot - ",MarketInfo(Symbol(),MODE_MINLOT));

    and
    replace:
    if(lot_min<0 lot_max<=0.0 lot_step<=0.0)
    to
    if(lot_min<=0 lot_max<=0.0 lot_step<=0.0)
    add after:
    LotsRisk=NormalizeDouble(LotsRisk/lot_step,0)*lot_step;
    if(LotsRisk<lot_min) LotsRisk=lot_min;
    if(LotsRisk>lot_max) LotsRisk=lot_max;
    this string:
    Print("LotsRisk - ",LotsRisk);

    و لكن المشكله لا ادري في اي دالة يجب استبدال و اضافة الكد المطلوب في كد التالي:
    ياريت اخي محمود اذا لديك حل لمشكلة خطاء 4051 فارجوا المساعده فيه او اتباع خطوات الاعلى حسب شرح المبرج
    كود PHP:
    int safeShortOrder(int ai_0int ai_4double a_lots_8int a_magic_16string a_comment_20) {
    int l_error_32 = -1;
    int l_count_36 0;
    double l_price_40 Bid ai_0 Point;
    double l_price_48 Bid ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    int l_ticket_28 OrderSend(Symbol(), OP_SELLa_lots_8NormalizeDouble(BidDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 1) {
    for (
    l_count_36 0l_count_36 10l_count_36++) {
    l_error_32 GetLastError();
    Print(
    "Error in putting on order!! -- "l_error_32);
    if (
    handleError(l_error_32) == 3) {
    Alert("Fatal Error -- Can Not Put On Order! Haulting Trading...");
    return (-
    2);
    }
    Print(
    "Saveable error..trying again..(#" l_count_36 " of 10");
    Sleep(2000);
    Rates();
    l_price_40 Bid ai_0 Point;
    l_price_48 Bid ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    l_ticket_28 OrderSend(Symbol(), OP_SELLa_lots_8NormalizeDouble(BidDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 0) break;
    }
    if (
    l_ticket_28 1) {
    Alert("Could not put on order! Haulting Trading...");
    return (-
    2);
    }
    }
    OrderModify(l_ticket_28OrderOpenPrice(), l_price_40l_price_480CLR_NONE);
    return (
    l_ticket_28);
    }

    int safeLongOrder(int ai_0int ai_4double a_lots_8int a_magic_16string a_comment_20) {
    int l_error_32 = -1;
    int l_count_36 0;
    double l_price_40 Ask ai_0 Point;
    double l_price_48 Ask ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    Print(
    "Stop Loss -- "l_price_40);
    Print(
    "Take Profit --"l_price_48);
    int l_ticket_28 OrderSend(Symbol(), OP_BUYa_lots_8NormalizeDouble(AskDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 1) {
    for (
    l_count_36 0l_count_36 10l_count_36++) {
    l_error_32 GetLastError();
    Print(
    "Error in putting on order!! -- "l_error_32);
    if (
    handleError(l_error_32) == 3) {
    Alert("Fatal Error -- Can Not Put On Order! Haulting Trading...");
    return (-
    2);
    }
    Print(
    "Saveable error..trying again..(#" l_count_36 " of 10");
    Sleep(2000);
    Rates();
    l_price_40 Ask ai_0 Point;
    l_price_48 Ask ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    l_ticket_28 OrderSend(Symbol(), OP_BUYa_lots_8NormalizeDouble(AskDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 0) break;
    }
    if (
    l_ticket_28 1) {
    Alert("Could not put on order! Haulting Trading...");
    return (-
    2);
    }
    }
    OrderModify(l_ticket_28OrderOpenPrice(), l_price_40l_price_480CLR_NONE);
    return (
    l_ticket_28);
    }

    int totalOrders(string a_symbol_0int a_magic_8) {
    int l_count_12 0;
    for (
    int l_pos_16 0l_pos_16 OrdersTotal(); l_pos_16++) {
    OrderSelect(l_pos_16SELECT__POSMODE_TRADES);
    if (
    OrderSymbol() == a_symbol_0 && OrderMagicNumber() == a_magic_8l_count_12++;
    }
    return (
    l_count_12);


    وعليكم السلام ورحمة الله وبركاته
    المشكله حسب ما قلت في حجم اللوت
    ما هي أسباب ظهور حجم لوت خاطئ
    1_ أن حجم اللوت أصغر من أن يسمح به البروكر
    2_ أن حجم اللوت أكبر من أن يسمح به البروكر
    3_ أن البروكر لا يسمح بحجم لوت مايكرو كمثال 0.12 في هذه الحاله يجب جعله 0.1 ونلغي الرقم العشري الثاني

    طبعا لا يجب أن تقوم فقط بنسخ الأكواد ونقلها لكن يجب أن تعرف ما فائدتها
    الجزء الأول
    عندما طلب منك إضافة
    كود PHP:
    Print("Lots: "lot," minlot - ",MarketInfo(Symbol(),MODE_MINLOT)); 
    فهذا الكود حتى تستطيع معرفة أقل لوت مسموح به في البروكر وحجم اللوت الذي كان يجب أن يفتحه الإكسبرت
    لتعلم أين سبب الخطأ

    الجزء الثاني
    كود PHP:
    LotsRisk=NormalizeDouble(LotsRisk/lot_step,0)*lot_step;
    if(
    LotsRisk<lot_minLotsRisk=lot_min;
    if(
    LotsRisk>lot_maxLotsRisk=lot_max
    ففي حال كان حجم اللوت أقل من اللوت المسموح به في البروكر فيجعل حجم اللوت هو أقل لوت مسموح به
    وإذا كان حجم اللوت أكبر من اللوت المسموح به فيجعل حجم اللوت هو أكبر لوت مسموح به

    تفضل هذا الكود بشكل بسيط بعد التعديل
    كود PHP:
    int l_ticket_28 OrderSend(Symbol(), OP_SELLa_lots_8NormalizeDouble(BidDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 1) {
    for (
    l_count_36 0l_count_36 10l_count_36++) {
    l_error_32 GetLastError();
    Print(
    "Error in putting on order!! -- "l_error_32);
    if (
    handleError(l_error_32) == 3) {
    Alert("Fatal Error -- Can Not Put On Order! Haulting Trading...");
    return (-
    2);
    }
    Print(
    "Saveable error..trying again..(#" l_count_36 " of 10");
    Sleep(2000);
    Rates();
    l_price_40 Bid ai_0 Point;
    l_price_48 Bid ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    l_ticket_28 OrderSend(Symbol(), OP_SELLa_lots_8NormalizeDouble(BidDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 0) break;
    }
    if (
    l_ticket_28 1) {
    Alert("Could not put on order! Haulting Trading...");
    return (-
    2);
    }
    }
    OrderModify(l_ticket_28OrderOpenPrice(), l_price_40l_price_480CLR_NONE);
    return (
    l_ticket_28);
    }

    int safeLongOrder(int ai_0int ai_4double a_lots_8int a_magic_16string a_comment_20) {
    if(
    a_lots_8<MarketInfo(Symbol(),MODE_MINLOT)a_lots_8=MarketInfo(Symbol(),MODE_MINLOT);
    if(
    a_lots_8>MarketInfo(Symbol(),MODE_MAXLOT)a_lots_8=MarketInfo(Symbol(),MODE_MAXLOT);
    a_lots_8=NormalizeDouble(a_lots_8,LotStep);
    int l_error_32 = -1;
    int l_count_36 0;
    double l_price_40 Ask ai_0 Point;
    double l_price_48 Ask ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    Print(
    "Stop Loss -- "l_price_40);
    Print(
    "Take Profit --"l_price_48);
    int l_ticket_28 OrderSend(Symbol(), OP_BUYa_lots_8NormalizeDouble(AskDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 1) {
    for (
    l_count_36 0l_count_36 10l_count_36++) {
    l_error_32 GetLastError();
    Print(
    "Error in putting on order!! -- "l_error_32);
    if (
    handleError(l_error_32) == 3) {
    Alert("Fatal Error -- Can Not Put On Order! Haulting Trading...");
    return (-
    2);
    }
    Print(
    "Saveable error..trying again..(#" l_count_36 " of 10");
    Sleep(2000);
    Rates();
    l_price_40 Ask ai_0 Point;
    l_price_48 Ask ai_4 Point;
    if (
    ai_0 <= 0l_price_40 0;
    if (
    ai_4 <= 0l_price_48 0;
    l_ticket_28 OrderSend(Symbol(), OP_BUYa_lots_8NormalizeDouble(AskDigits), 300a_comment_20a_magic_160Blue);
    if (
    l_ticket_28 0) break;
    }
    if (
    l_ticket_28 1) {
    Alert("Could not put on order! Haulting Trading...");
    return (-
    2);
    }
    }
    OrderModify(l_ticket_28OrderOpenPrice(), l_price_40l_price_480CLR_NONE);
    return (
    l_ticket_28);
    }

    int totalOrders(string a_symbol_0int a_magic_8) {
    int l_count_12 0;
    for (
    int l_pos_16 0l_pos_16 OrdersTotal(); l_pos_16++) {
    OrderSelect(l_pos_16SELECT__POSMODE_TRADES);
    if (
    OrderSymbol() == a_symbol_0 && OrderMagicNumber() == a_magic_8l_count_12++;
    }
    return (
    l_count_12);

    سوف تجد أنني أضفت هذه الأسطر
    كود PHP:
    if(a_lots_8<MarketInfo(Symbol(),MODE_MINLOT)a_lots_8=MarketInfo(Symbol(),MODE_MINLOT);
    if(
    a_lots_8>MarketInfo(Symbol(),MODE_MAXLOT)a_lots_8=MarketInfo(Symbol(),MODE_MAXLOT);
    a_lots_8=NormalizeDouble(a_lots_8,LotStep); 
    سوف تقوم بتعريف متغير خارجي بإسم LotStep
    كود PHP:
    extern int LotStep=2
    بحيث إذا كان البروكر يسمح بفتح عقود مايكرو 0.01 سوف تجعل LotStep=2
    إذا كان لا يسمح بفتح عقود مايكرو ستجعل LotStep=1
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  3. #3
    تاريخ التسجيل
    Oct 2009
    العمر
    49
    المشاركات
    1,476

    افتراضي

    بارك الله فيك اخي اسامه على التوضيح و اضفت الكد كما وضحت و لكن عند عمل كامبايل تظهر بعض الاخطاء عندي ياريت تضيف الكد المطلوب في ملف الاكسبيرت المرفق و ايضا كما يبدوا انك اضفت الكد تحت دالة الشراء int safeLongOrder فقط و لم تضفه تحت int safeShortOrder
    ايضا هناك مشكله في الاكسبيرت لاحظتها و طبيعة الاكسبيرت يفتح صفقه و ثم بعمل موديفاي يضيف الهدف و الاستوب و لكن احيانا بسبب بطء و زخم السريفر للبروكر لم يستطيع وضع الهدف و الاستوب و ياريت تزيد عدد المحاولت فيه لوضعهما يعني اضافة عدد المحاولات او طريقه اخرى
    و شكرا
    الملفات المرفقة الملفات المرفقة
    • نوع الملف: mq4 PP.mq4‏ (27.4 كيلوبايت, المشاهدات 25)

  4. #4
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,977

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة amazing مشاهدة المشاركة
    بارك الله فيك اخي اسامه على التوضيح و اضفت الكد كما وضحت و لكن عند عمل كامبايل تظهر بعض الاخطاء عندي ياريت تضيف الكد المطلوب في ملف الاكسبيرت المرفق و ايضا كما يبدوا انك اضفت الكد تحت دالة الشراء int safeLongOrder فقط و لم تضفه تحت int safeShortOrder
    ايضا هناك مشكله في الاكسبيرت لاحظتها و طبيعة الاكسبيرت يفتح صفقه و ثم بعمل موديفاي يضيف الهدف و الاستوب و لكن احيانا بسبب بطء و زخم السريفر للبروكر لم يستطيع وضع الهدف و الاستوب و ياريت تزيد عدد المحاولت فيه لوضعهما يعني اضافة عدد المحاولات او طريقه اخرى
    و شكرا
    تفضل أضفت لك الكود
    وسوف تجد المتغير LotStep قم بضبطه كما شرحته سابقا
    الملفات المرفقة الملفات المرفقة
    • نوع الملف: mq4 PP 2.mq4‏ (27.8 كيلوبايت, المشاهدات 26)
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات