النتائج 1 إلى 9 من 9
  1. #1
    الصورة الرمزية توفيق
    توفيق غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Dec 2007
    الإقامة
    اجادير جوهرة المغرب
    العمر
    37
    المشاركات
    1,402

    افتراضي طلب دالة او حل برمجي لأكمال برمجة اكسبرت

    السلام عليكم ورحمة الله تعالى وبركاته
    اعمل حاليا على برمجة اكسبرت رغم انني ضعيف في برمجة الميتاتريدر الا اني اتوفر على خبرة جيدة بلغة سي بلس
    وواجهتني صعوبة في برمجة دالة او حل برمجي يقوم بالتالي
    عندما يحدد الاكسبرت شمعة تنطبق عليها الشروط و يضع الاوامر
    ادا اغلقت شمعتين بعد الشمعة التي حددها الاكسبرت للدخول و لم تنفد الاوامر فانه يغوم بالغاءها

  2. #2
    الصورة الرمزية مبدع فوركس
    مبدع فوركس غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    May 2011
    المشاركات
    166

    افتراضي

    ممكن يكون فيه داله لتحديد وقت الغاء الصفقات ضع الاكسبيرت حتى استطيع انا او مستر دولار بالتعديل عليه

  3. #3
    الصورة الرمزية توفيق
    توفيق غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Dec 2007
    الإقامة
    اجادير جوهرة المغرب
    العمر
    37
    المشاركات
    1,402

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة مبدع فوركس مشاهدة المشاركة
    ممكن يكون فيه داله لتحديد وقت الغاء الصفقات ضع الاكسبيرت حتى استطيع انا او مستر دولار بالتعديل عليه
    بارك الله فيك يا غالي
    و الله فكرت في هدا الحل لكن عدم المامي جعلني اعجز على حل هده المشكلة
    بالنسبة للكسبرت ففكرته سهلة لكن لم ابدأ بالبرمجة الفعلية بعد لانها بسيطة و ليس عندي اي مشكلة بالبرمجة الا هده الحالة
    عموما الفكرة كالتالي

    موفينغ افريج سيمبل 13
    و شمعة تكون بالشروط التالية
    يكون جسم الشمعة اصغر او يساوي 33 بالمئة من الجسم بالكامل
    اي الفرق بين الهاي و اللو
    في الشراء
    اغلاق الشمعة اكبر من الموفينغ
    و تحقق الشرط في الاعلى
    يضع امر شراء على اختراق الهاي و الستوب ان يهبط تحت اللو
    و العكس للبيع
    طبعا مع بعض الاضافات كشرط العقود و التوقيت لكي يغلق الصفقات قبل وقت الفوائد حتى لا ادخل في الجاني الشرعي على الاطلاق

    لا اريد برمجة الاكسبرت فقط اريد حل للمشكل لاني اريد برمجته بنفسي

    و اي مشكل ان طرأ سأضعه هنا ان شاء الله


  4. #4
    الصورة الرمزية توفيق
    توفيق غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Dec 2007
    الإقامة
    اجادير جوهرة المغرب
    العمر
    37
    المشاركات
    1,402

    افتراضي

    كود PHP:
    int OrderSendstring symbolint cmd,  double volumedouble price,  int slippagedouble stoploss,  double takeprofitstring  comment=NULLint magic=0datetime expiration=0color  arrow_color=CLR_NONE
    ربما المتغير
    datetime expiration=0
    في الدالة
    ()OrderSend
    يشير الا امكانية الغاء الاوردر بتاريخ معين
    هدا المتغير له تفرعات كبيرة في لغة سي بلس منها الثانية و الدقيقة واليوم الخ...
    ممكن احد الاخوة يدلني على طريقة تغيير هدا المتغير ليناسب شرط الاكسبرت ادا كان استنتاجي صحيح
    بارك الله فيكم


  5. #5
    الصورة الرمزية khalid00708
    khalid00708 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2009
    الإقامة
    مكة
    المشاركات
    179

    افتراضي

    السلام عليكم ورحمة الله وبركاته

    اخي توفيق يبدو لي انك تريد الغاء اوامر معلقة

    جرب الامر التالي : اذا ( توفرت شروط الدخول في الشمعة رقم 3 و وكانت عدد العقود المفتوحة = 0 ) فقم بالغاء جميع الاوامر المعلقة

    ملاحظة : يجب ان تجعل الامر على الفري تك حتى يغلق الاوامر في الشمعة الثالثة من شمعة اتخاذ القرار مباشرة او تجعل رقم الشمعة في الامر اعلاه = 2 اذا كنت ستعمل على الكمبليت بار

  6. #6
    الصورة الرمزية توفيق
    توفيق غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Dec 2007
    الإقامة
    اجادير جوهرة المغرب
    العمر
    37
    المشاركات
    1,402

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة khalid00708 مشاهدة المشاركة
    السلام عليكم ورحمة الله وبركاته

    اخي توفيق يبدو لي انك تريد الغاء اوامر معلقة

    جرب الامر التالي : اذا ( توفرت شروط الدخول في الشمعة رقم 3 و وكانت عدد العقود المفتوحة = 0 ) فقم بالغاء جميع الاوامر المعلقة

    ملاحظة : يجب ان تجعل الامر على الفري تك حتى يغلق الاوامر في الشمعة الثالثة من شمعة اتخاذ القرار مباشرة او تجعل رقم الشمعة في الامر اعلاه = 2 اذا كنت ستعمل على الكمبليت بار
    و الله فكرة ممتازة بارك الله فيك
    سأجربها ان شاء الله و في انتضار المزيد من الاراء من الاخوة و الحمد لله تجاوب رائع
    بالنسبة للملاحضة فالفري تيك هو الافضل على حد علمي

  7. #7
    الصورة الرمزية Robo-coder
    Robo-coder غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2010
    المشاركات
    338

    افتراضي

    أجبتك على سؤالك هذا في منتدى المتاجر الذهبي


    هناك خيار ممكن تستعمله مع العقود المعلقة يسمى
    تضعها في مكان expire و تكون بالدقائق
    OrderSend(Symbol(), OP_BUYSTOP, lotvalue, price, 4, SL, TP, "My Expert", 1, expire, Blue);


    كود:
    #include <stdlib.mqh> #include <WinUser32.mqh> // exported variables extern double BuyLots1 = 0.1; extern int BuyStoploss1 = 20; extern int BuyTakeprofit1 = 30; extern double MaxBuyLots1 = 3; extern int PriceOffset1 = 20; extern double LotsBuyChOnLoss1 = 0; extern double LotsBuyChOnProfit1 = 0; extern double LotsBuyMpOnLoss1 = 1; extern double LotsBuyMpOnProfit1 = 1; extern bool LotsResetOnProfit1 = false; // local variables double PipValue=1; // this variable is here to support 5-digit brokers bool Terminated = false; string LF = "\n"; // use this in custom or utility blocks where you need line int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks int ObjCount = 0; // count of all s created on the chart, allows creation of s with unique names datetime BarTime2 = 0; double CurrentBuyLots1 = 1; bool FirstBuyLotsMgm1 = true; int init() { NDigits = Digits; sDeleteAll(); // clear the chart CurrentBuyLots1 = BuyLots1; Comment(""); // clear the chart } // Expert start int start() { if (Bars < 10) { Comment("Not enough bars"); return (0); } if (Terminated == true) { Comment("EA Terminated."); return (0); } OnEveryNewBar2(); } void OnEveryNewBar2() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 NDigits == 5)) PipValue = 10; if (BarTime2 < Time[0]) { // we have a new bar opened BarTime2 = Time[0]; // keep the new bar open time BuyPendingOrderLotsMgm1(); } } void BuyPendingOrderLotsMgm1() { double profit = 0; datetime lastCloseTime = 0; int cnt = OrdersHistoryTotal(); for (int i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT__POS, MODE_HISTORY)) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == 1 && lastCloseTime < OrderCloseTime()) { lastCloseTime = OrderCloseTime(); profit = OrderProfit(); CurrentBuyLots1 = OrderLots(); } } if (profit > 0) { CurrentBuyLots1 = CurrentBuyLots1 * LotsBuyMpOnProfit1 + LotsBuyChOnProfit1; if (LotsResetOnProfit1) CurrentBuyLots1 = BuyLots1; } else if (profit < 0) { CurrentBuyLots1 = CurrentBuyLots1 * LotsBuyMpOnLoss1 + LotsBuyChOnLoss1; } int expire = TimeCurrent() + 60 * 60; if (CurrentBuyLots1 > MaxBuyLots1) { CurrentBuyLots1 = MaxBuyLots1; } double lotvalue = CurrentBuyLots1; if (lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value { lotvalue = MarketInfo(Symbol(), MODE_MINLOT); } if (lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value { lotvalue = MarketInfo(Symbol(), MODE_MAXLOT); } if (60 == 0) expire = 0; double price = NormalizeDouble(Ask, NDigits) + PriceOffset1*PipValue*Point; double SL = price - BuyStoploss1*PipValue*Point; if (BuyStoploss1 == 0) SL = 0; double TP = price + BuyTakeprofit1*PipValue*Point; if (BuyTakeprofit1 == 0) TP = 0; int ticket = OrderSend(Symbol(), OP_BUYSTOP, lotvalue, price, 4, SL, TP, "My Expert", 1, expire, Blue); if (ticket == -1) { Print("OrderSend() error - ", ErrorDeion(GetLastError())); } } int deinit() { if (true) sDeleteAll(); }
    مثال هذا الأكسبيرت يعلق كل شمعة جديدة و لكن العقود المعلقة تلغي إذا لم تفعل بعد 60 دقيقة

  8. #8
    الصورة الرمزية توفيق
    توفيق غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Dec 2007
    الإقامة
    اجادير جوهرة المغرب
    العمر
    37
    المشاركات
    1,402

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة Robo-coder مشاهدة المشاركة
    أجبتك على سؤالك هذا في منتدى المتاجر الذهبي


    هناك خيار ممكن تستعمله مع العقود المعلقة يسمى
    تضعها في مكان expire و تكون بالدقائق
    OrderSend(Symbol(), OP_BUYSTOP, lotvalue, price, 4, SL, TP, "My Expert", 1, expire, Blue);


    كود:
    #include <stdlib.mqh> #include <WinUser32.mqh> // exported variables extern double BuyLots1 = 0.1; extern int BuyStoploss1 = 20; extern int BuyTakeprofit1 = 30; extern double MaxBuyLots1 = 3; extern int PriceOffset1 = 20; extern double LotsBuyChOnLoss1 = 0; extern double LotsBuyChOnProfit1 = 0; extern double LotsBuyMpOnLoss1 = 1; extern double LotsBuyMpOnProfit1 = 1; extern bool LotsResetOnProfit1 = false; // local variables double PipValue=1; // this variable is here to support 5-digit brokers bool Terminated = false; string LF = "\n"; // use this in custom or utility blocks where you need line int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks int ObjCount = 0; // count of all s created on the chart, allows creation of s with unique names datetime BarTime2 = 0; double CurrentBuyLots1 = 1; bool FirstBuyLotsMgm1 = true; int init() { NDigits = Digits; sDeleteAll(); // clear the chart CurrentBuyLots1 = BuyLots1; Comment(""); // clear the chart } // Expert start int start() { if (Bars < 10) { Comment("Not enough bars"); return (0); } if (Terminated == true) { Comment("EA Terminated."); return (0); } OnEveryNewBar2(); } void OnEveryNewBar2() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 NDigits == 5)) PipValue = 10; if (BarTime2 < Time[0]) { // we have a new bar opened BarTime2 = Time[0]; // keep the new bar open time BuyPendingOrderLotsMgm1(); } } void BuyPendingOrderLotsMgm1() { double profit = 0; datetime lastCloseTime = 0; int cnt = OrdersHistoryTotal(); for (int i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT__POS, MODE_HISTORY)) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == 1 && lastCloseTime < OrderCloseTime()) { lastCloseTime = OrderCloseTime(); profit = OrderProfit(); CurrentBuyLots1 = OrderLots(); } } if (profit > 0) { CurrentBuyLots1 = CurrentBuyLots1 * LotsBuyMpOnProfit1 + LotsBuyChOnProfit1; if (LotsResetOnProfit1) CurrentBuyLots1 = BuyLots1; } else if (profit < 0) { CurrentBuyLots1 = CurrentBuyLots1 * LotsBuyMpOnLoss1 + LotsBuyChOnLoss1; } int expire = TimeCurrent() + 60 * 60; if (CurrentBuyLots1 > MaxBuyLots1) { CurrentBuyLots1 = MaxBuyLots1; } double lotvalue = CurrentBuyLots1; if (lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value { lotvalue = MarketInfo(Symbol(), MODE_MINLOT); } if (lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value { lotvalue = MarketInfo(Symbol(), MODE_MAXLOT); } if (60 == 0) expire = 0; double price = NormalizeDouble(Ask, NDigits) + PriceOffset1*PipValue*Point; double SL = price - BuyStoploss1*PipValue*Point; if (BuyStoploss1 == 0) SL = 0; double TP = price + BuyTakeprofit1*PipValue*Point; if (BuyTakeprofit1 == 0) TP = 0; int ticket = OrderSend(Symbol(), OP_BUYSTOP, lotvalue, price, 4, SL, TP, "My Expert", 1, expire, Blue); if (ticket == -1) { Print("OrderSend() error - ", ErrorDeion(GetLastError())); } } int deinit() { if (true) sDeleteAll(); }
    مثال هذا الأكسبيرت يعلق كل شمعة جديدة و لكن العقود المعلقة تلغي إذا لم تفعل بعد 60 دقيقة
    بارك الله فيك اخي الكريم
    الدي استنتجه من الكود هو انني احتاج للتالي
    كود PHP:
      int expire TimeCurrent() + 10 60
    ووضع
    expire
    في الدالة
    ()OrderSend
    على اعتبار ان اعمل على فريم 5 دقائق
    ادا كان صحيحا ارجوا اخباري لابدأ بالبرمجة الفعلية واطرح الاكسبرت للتصحيح لانه اول اكسبرت لي و بارك الله في جميع الاخوة على مجهودهم

  9. #9
    الصورة الرمزية Robo-coder
    Robo-coder غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2010
    المشاركات
    338

    افتراضي

    توكل على الله


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17