النتائج 1 إلى 9 من 9
- 08-10-2011, 06:25 PM #1
طلب دالة او حل برمجي لأكمال برمجة اكسبرت
السلام عليكم ورحمة الله تعالى وبركاته
اعمل حاليا على برمجة اكسبرت رغم انني ضعيف في برمجة الميتاتريدر الا اني اتوفر على خبرة جيدة بلغة سي بلس
وواجهتني صعوبة في برمجة دالة او حل برمجي يقوم بالتالي
عندما يحدد الاكسبرت شمعة تنطبق عليها الشروط و يضع الاوامر
ادا اغلقت شمعتين بعد الشمعة التي حددها الاكسبرت للدخول و لم تنفد الاوامر فانه يغوم بالغاءها
- 08-10-2011, 10:18 PM #2
ممكن يكون فيه داله لتحديد وقت الغاء الصفقات ضع الاكسبيرت حتى استطيع انا او مستر دولار بالتعديل عليه
- 08-10-2011, 10:58 PM #3بارك الله فيك يا غالي
و الله فكرت في هدا الحل لكن عدم المامي جعلني اعجز على حل هده المشكلة
بالنسبة للكسبرت ففكرته سهلة لكن لم ابدأ بالبرمجة الفعلية بعد لانها بسيطة و ليس عندي اي مشكلة بالبرمجة الا هده الحالة
عموما الفكرة كالتالي
موفينغ افريج سيمبل 13
و شمعة تكون بالشروط التالية
يكون جسم الشمعة اصغر او يساوي 33 بالمئة من الجسم بالكامل
اي الفرق بين الهاي و اللو
في الشراء
اغلاق الشمعة اكبر من الموفينغ
و تحقق الشرط في الاعلى
يضع امر شراء على اختراق الهاي و الستوب ان يهبط تحت اللو
و العكس للبيع
طبعا مع بعض الاضافات كشرط العقود و التوقيت لكي يغلق الصفقات قبل وقت الفوائد حتى لا ادخل في الجاني الشرعي على الاطلاق
لا اريد برمجة الاكسبرت فقط اريد حل للمشكل لاني اريد برمجته بنفسي
و اي مشكل ان طرأ سأضعه هنا ان شاء الله
- 09-10-2011, 12:47 AM #4كود PHP:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
datetime expiration=0
في الدالة
()OrderSend
يشير الا امكانية الغاء الاوردر بتاريخ معين
هدا المتغير له تفرعات كبيرة في لغة سي بلس منها الثانية و الدقيقة واليوم الخ...
ممكن احد الاخوة يدلني على طريقة تغيير هدا المتغير ليناسب شرط الاكسبرت ادا كان استنتاجي صحيح
بارك الله فيكم
- 09-10-2011, 01:03 AM #5السلام عليكم ورحمة الله وبركاته
اخي توفيق يبدو لي انك تريد الغاء اوامر معلقة
جرب الامر التالي : اذا ( توفرت شروط الدخول في الشمعة رقم 3 و وكانت عدد العقود المفتوحة = 0 ) فقم بالغاء جميع الاوامر المعلقة
ملاحظة : يجب ان تجعل الامر على الفري تك حتى يغلق الاوامر في الشمعة الثالثة من شمعة اتخاذ القرار مباشرة او تجعل رقم الشمعة في الامر اعلاه = 2 اذا كنت ستعمل على الكمبليت بار
- 09-10-2011, 01:31 AM #6
- 09-10-2011, 01:54 AM #7
أجبتك على سؤالك هذا في منتدى المتاجر الذهبي
هناك خيار ممكن تستعمله مع العقود المعلقة يسمى
تضعها في مكان 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(); }
- 09-10-2011, 02:26 AM #8بارك الله فيك اخي الكريم
الدي استنتجه من الكود هو انني احتاج للتالي
كود PHP:int expire = TimeCurrent() + 10 * 60;
expire
في الدالة
()OrderSend
على اعتبار ان اعمل على فريم 5 دقائق
ادا كان صحيحا ارجوا اخباري لابدأ بالبرمجة الفعلية واطرح الاكسبرت للتصحيح لانه اول اكسبرت لي و بارك الله في جميع الاخوة على مجهودهم
- 09-10-2011, 03:09 AM #9
توكل على الله