النتائج 76 إلى 90 من 101
الموضوع: Condor Scalper V3 للتجربة
- 14-09-2011, 06:21 PM #76
- 14-09-2011, 06:46 PM #77
سوف نحاول تحليل الكود اعلاه على التواليكود:int stoplevel_4 = MarketInfo(Symbol(), MODE_STOPLEVEL); gi_172 = FALSE; if (g_count_176 < g_count_180) { if (TimeCurrent() - g_datetime_188 <= timeSpeed) { RefreshRates(); for (int li_0 = 1; li_0 <= 2; li_0++) { g_ticket_156 = OrderSend(Symbol(), OP_SELL, f0_1(), Bid, 10, 0, 0, "", Magic, 0, Red); if (g_ticket_156 > 0) { if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, MODE_TRADES)) { while (!IsTradeAllowed()) Sleep(500); RefreshRates(); g_price_128 = 0; if (StopLoss * gi_220 > stoplevel_4) g_price_128 = NormalizeDouble(Ask + StopLoss * Point * gi_220, Digits); Print(" Stop Loss : ", g_price_128); if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), g_price_128, 0, 0, Red))) break; gi_172 = TRUE; } } } else { Print("ERROR ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates(); } } } } else { if (TimeCurrent() - g_datetime_184 <= timeSpeed) { RefreshRates(); for (li_0 = 1; li_0 <= 2; li_0++) { g_ticket_156 = OrderSend(Symbol(), OP_BUY, f0_1(), Ask, 10, 0, 0, "", Magic, 0, Green); if (g_ticket_156 > 0) { if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, MODE_TRADES)) { while (!IsTradeAllowed()) Sleep(500); RefreshRates(); g_price_128 = 0; if (StopLoss * gi_220 > stoplevel_4) g_price_128 = NormalizeDouble(Bid - StopLoss * Point * gi_220, Digits); if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), g_price_128, 0, 0, Green))) break; gi_172 = TRUE; } } } else { Print("Error ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates(); } }
هنا وقع استدعاء معلومة من البروكر تحتوي على اقل قيمة ستوبلوز مسموح بها و وضعها في متغير حقيقي اسمه stoplevel_4 سوف نستعمل هذا المتغير لاحقا للتحقق من ان الستوب المضبوط في الاعدادات من قبل المستعمل لا يقل عن هذه القيمة المسموح بهاكود:int stoplevel_4 = MarketInfo(Symbol(), MODE_STOPLEVEL);
هنا بدأ المبرمج بالتنصيص على متغير منطقي gi_172 و جعله خطا falseكود:gi_172 = FALSE; if (g_count_176 < g_count_180) { if (TimeCurrent() - g_datetime_188 <= timeSpeed) { RefreshRates(); for (int li_0 = 1; li_0 <= 2; li_0++) { g_ticket_156 = OrderSend(Symbol(), OP_SELL, f0_1(), Bid, 10, 0, 0, "", Magic, 0, Red); if (g_ticket_156 > 0) { if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, MODE_TRADES)) { while (!IsTradeAllowed()) Sleep(500); RefreshRates(); g_price_128 = 0;
كما نعرف المتغيرات المنطقية تقبل أحد القيم إما القيمة صح true أوالقيمة خطأ false
يا أسود يا أبيض
هنا يراقب التوقيت و هو في الميتاتريدر توقيت البروكر (بالثواني) ويطرح منه قيمة زمنية g_datetime_188 فإذا وجدها مساوية أو أقل من قيمة TimeSpeed hglكود:if (TimeCurrent() - g_datetime_188 <= timeSpeed) { RefreshRates()
الموجوده في الإعدادات الخارجية للأكسبيرت في هذه الحالة يعمل الأكسبيرت RefreshRates()
و هو أمر بتنزيل المعلومات من جديد من السرفر و تحيينها
و لن يواصل الأكسبيرت إلا إذا (TimeCurrent() - g_datetime_188 ) أكبر من القيمة timeSpeed
التوقيت الحالي معروف و قيمة timeSpeed أخترناها نحن في الأعدادات الخارجية
لم يبقى إلا معرفة القيمة g_datetime_188
لو بحثنا عن هذا المتغير g_datetime_188 خلال البرنامج سنجد أنه إما يأخذ القيمة صفر
أو مساوي ل TimeCurren (عدد الثواني التي مرت من منتصف الليل سنة 1970)
g_datetime_188 = TimeCurrent();
الأن عرفنا كيف نضبط الأعداد TIME SPEED لكي يعمل الأكسبيرت
و الذي سوف يكون أكبر من 0 أي عدد حقيقي أكبرمن صفر مثل 0.1 1 1.1.... 2.... ألخ
نواصل لاحقا لو وجدنا تجاوب
- 14-09-2011, 08:58 PM #78
- 15-09-2011, 01:48 AM #79
شكرا أخي العزيز
- 15-09-2011, 09:47 AM #80
ما شاء الله عليك اخي Robo-coder
فعلا عندنا عباقرة في البرمجة والبعض منهم يتابعون بصمت مثل ما قال اخي AMamazing
اتمنى الاستمرار اخي واعذرني والاخوة لان لا نفقه في البرمجة الا الشي القليل
ومنكم نستفيد جزاك الله خير خير الجزاء بما قدمته من شرح وتفصيل للاكسبيرت

- 15-09-2011, 12:32 PM #81
تمام
- 15-09-2011, 02:28 PM #82
شكرا اخى الكريم على الشرح
بخصوص اختلاف النتائج فى الباك تست والديمو السبب لايوجد باك تست صحيح للاسكالبنج اغلب اكسبرتات الاسكالبنج لا تعطى نتائج مثل الباك تست
طرييقة عمل هذا الاكسبرت مثل ما شرح الاخوان هو اخذ صفقه شراء مثلا لو تحرك السعر دون تراجع الى الاعلى فى عدد الثوانى المحدده وهىtimeSpeed بمعنى ارتفاع السعر مثلا 5 او 4 نقاط مثل ما هو محدد فى عدد الثوانى 3 او 4 مثل ما هو محدد ثوانى دون تراجع يدخل شراء وهذا طبعا صعب تجد الدقه فى الباك تست
الاكسبرت يعتمد على الحركه السريعه لذلك اعتقد وقت صدور الاخبار ممكن يحقق نتائج جيده والله اعلم
- 15-09-2011, 03:10 PM #83
نواصل مع الكود البرمجييبدأ البرنامج بإحداث عدادكود:for (int li_0 = 1; li_0 <= 2; li_0++) { g_ticket_156 = OrderSend(Symbol(), OP_SELL, f0_1(), Bid, 10, 0, 0, "", Magic, 0, Red); if (g_ticket_156 > 0) { if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, MODE_TRADES)) { while (!IsTradeAllowed()) Sleep(500); RefreshRates(); g_price_128 = 0; if (StopLoss * gi_220 > stoplevel_4) g_price_128 = NormalizeDouble(Ask + StopLoss * Point * gi_220, Digits); Print(" Stop Loss : ", g_price_128); if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), g_price_128, 0, 0, Red))) break; gi_172 = TRUE; } } } else { Print("ERROR ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates(); } } } } else { if (TimeCurrent() - g_datetime_184 <= timeSpeed) { RefreshRates(); for (li_0 = 1; li_0 <= 2; li_0++) { g_ticket_156 = OrderSend(Symbol(), OP_BUY, f0_1(), Ask, 10, 0, 0, "", Magic, 0, Green); if (g_ticket_156 > 0) { if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, MODE_TRADES)) { while (!IsTradeAllowed()) Sleep(500); RefreshRates(); g_price_128 = 0; if (StopLoss * gi_220 > stoplevel_4) g_price_128 = NormalizeDouble(Bid - StopLoss * Point * gi_220, Digits); if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), g_price_128, 0, 0, Green))) break; gi_172 = TRUE; } } } else { Print("Error ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates(); } } } }
كود:for (int li_0 = 1; li_0 <= 2; li_0++) {هنا ان المتغير g_ticket_156 سوف يخصص لصفقات البيعكود:g_ticket_156 = OrderSend(Symbol(), OP_SELL, f0_1(), Bid, 10, 0, 0, "", Magic, 0, Red); if (g_ticket_156 > 0) {
هنا سوف نتاكد من وجود صفقة بيع و أن وقف الخسارة أكبر مما يسمح به الوسيطكود:[LEFT] if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, /LEFT]
هنا للتاكد من أن خيارالمتاجرة متاح و ألا sleep 500 أي ينتظر الاكسبار 500 ثانية (نوم الهناء ) ليعيد التاكد هل فعل خيار المتاجرة ام لاكود:while (!IsTradeAllowed()) Sleep(500); RefreshRates();
[SIZE="5"]الكود الموالي سوف يكتب تنبيه على الشاشة يحمل رقم الخطا في صولرة حصول أي خطاكود:Print("ERROR ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates();
مثل الخطا المعروف رقم 131 و الذي يفيد ان المارجن كول اللعين على الابواب no money[/
SIZE]
كود:Print("ERROR ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates();
الجزء الثاني من الكود و الذي ياتي بعد else هو نسخة مطابقة للاصل للنصف الاول
و لكن في هذه المرة سوف نهتم بصفقات الشراء كما اهتم الجزء السابق باخطاء صفقات البيع
نلاحظ أن الكود الذي حللناه اليوم يهتم بمراقبة الاخطاء الممكنة في صفقات البيع و الشراءكود:else { if (TimeCurrent() - g_datetime_184 <= timeSpeed) { RefreshRates(); for (li_0 = 1; li_0 <= 2; li_0++) { g_ticket_156 = OrderSend(Symbol(), OP_BUY, f0_1(), Ask, 10, 0, 0, "", Magic, 0, Green); if (g_ticket_156 > 0) { if (StopLoss * gi_220 > stoplevel_4) { if (OrderSelect(g_ticket_156, SELECT_BY_TICKET, MODE_TRADES)) { while (!IsTradeAllowed()) Sleep(500); RefreshRates(); g_price_128 = 0; if (StopLoss * gi_220 > stoplevel_4) g_price_128 = NormalizeDouble(Bid - StopLoss * Point * gi_220, Digits); if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), g_price_128, 0, 0, Green))) break; gi_172 = TRUE; } } } else { Print("Error ", ErrorDescription(GetLastError())); Sleep(1000); RefreshRates(); } } }



آخر تعديل بواسطة Robo-coder ، 15-09-2011 الساعة 03:17 PM
- 15-09-2011, 03:14 PM #84
وووووووووووو متابعين بشده لنرى تكلملة القصه
الحلقه الرابعه هههههههه
- 15-09-2011, 03:24 PM #85
الأخوة الاعزاء
عذرا عن الاطالة خاصة لمن لا يفهم في البرمجة لكن أنا اردت ان يستفيد المبرمجون الجدد من جيل الشباب و ليكون الموضوع مرجع مفيد إن شاء الله و بالتفكيك شيئا فشيئا سوف نعرف خفايا الاستراتيجية و سبب اختلاف النتائج
لن أعطيكم سمكا قط و لكن سيكون السمك من نصيب من يتعلم صيده
- 16-09-2011, 07:39 PM #86
- 17-09-2011, 06:47 PM #87
نواصل رحلتنا الشيقة مع الكودكود:} g_str2dbl_204 = 0; g_str2dbl_212 = 0; g_count_176 = 0; g_count_180 = 0; gi_192 = FALSE; gi_196 = FALSE; g_datetime_184 = 0; g_datetime_188 = 0;
في ما سبق عينا في الذاكرة 8 متغيرات
المتغيرات g_str2dbl سوف نضع فيها صفيفة حروف بعد تحويلها لرقم حقيقي
هو يقصد بها string to double
كما سبق و بينت لكم برنامج كسر الاكسبرتات يعطي متغيرات مبهمة و لكن بالخبرة ممكن نعرف نوعها
المتغيرات التي تحتوي على كلمو count عادة نستعملها كعداد لعد الصفقات المفتوحة مثلا
المتغيرات التي تكون قيمتها true أو false
أما المتغيرات التي تحتوي على كلمة datetime
فستخصص للقيم الزمنية و التوقيت .
هنا عندنا متغير عدد حقيقي gi_220 سوف ياخذ القيمة 10 في حال أن البروكر يستعمل 3 او 5 أرقم أما في صورة أن البروكر يستعمل 4 أرقام فستكون قيمة المتغير له_gi_220 تساوي 1كود:int init() { if (Digits == 3 || Digits == 5) gi_220 = 10; else gi_220 = 1; return (0);
و سو نستعمل هذا لاحقا لكي نرسل الستوب و البوفيت و قيمة العقد بالشكل الدي يقبله البروكر
- 17-09-2011, 06:53 PM #88
إختبار كتابي

مطلوب تحليل الكود الباقي يلا نريد نشاط
لا باس نحاول لنتعلم
كود:int deinit() { return (0); } int start() { double str2dbl_8; double str2dbl_16; g_order_total_164 = OrdersTotal(); int pos_4 = -1; for (int pos_0 = 0; pos_0 < g_order_total_164; pos_0++) { OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { pos_4 = pos_0; break; } } if (pos_4 < 0) { if (gd_224 > 0.0 || gd_232 > 0.0) { gd_224 = 0; gd_232 = 0; f0_5(); } gi_96 = 4; if (Digits < 4) gi_96 = 2; str2dbl_8 = StrToDouble(DoubleToStr(Ask, gi_96)); str2dbl_16 = StrToDouble(DoubleToStr(Bid, gi_96)); if (g_str2dbl_204 < str2dbl_8) { g_count_176++; g_str2dbl_204 = str2dbl_8; if (gi_192 == FALSE) { g_datetime_184 = TimeCurrent(); gi_192 = TRUE; } } else { g_str2dbl_204 = 0; g_count_176 = 0; gi_192 = FALSE; g_datetime_184 = 0; } if (g_str2dbl_212 > str2dbl_8) { g_count_180++; g_str2dbl_212 = str2dbl_8; if (gi_196 == FALSE) { g_datetime_188 = TimeCurrent(); gi_196 = TRUE; } } else { g_str2dbl_212 = 0; g_count_180 = 0; gi_196 = FALSE; g_datetime_188 = 0; } if (g_count_176 == Speed || g_count_180 == Speed) f0_0(); if (g_str2dbl_204 == 0.0) g_str2dbl_204 = str2dbl_8; if (g_str2dbl_212 == 0.0) g_str2dbl_212 = str2dbl_8; } else f0_2(); return (0); } double f0_1() { int digits_0 = MarketInfo(OrderSymbol(), MODE_DIGITS); double minlot_4 = MarketInfo(Symbol(), MODE_MINLOT); double maxlot_12 = MarketInfo(Symbol(), MODE_MAXLOT); double leverage_20 = AccountLeverage(); double lotsize_28 = MarketInfo(Symbol(), MODE_LOTSIZE); double ld_ret_36 = MathMin(maxlot_12, MathMax(minlot_4, Lots)); if (LotsOptimized && Risk > 0.0 && AccountFreeMargin() > Ask * ld_ret_36 * lotsize_28 / leverage_20) ld_ret_36 = NormalizeDouble(AccountFreeMargin() * Risk / lotsize_28, digits_0); else ld_ret_36 = minlot_4; ld_ret_36 = MathMax(minlot_4, MathMin(maxlot_12, NormalizeDouble(ld_ret_36 / minlot_4, 0) * minlot_4)); if (ld_ret_36 > MaxLot) ld_ret_36 = MaxLot; return (ld_ret_36); } void f0_2() { double bid_0; double ask_8; double order_open_price_16; double ld_24; double ld_32; int magic_40; double point_44 = MarketInfo(Symbol(), MODE_POINT); int li_52 = 1; int stoplevel_56 = MarketInfo(Symbol(), MODE_STOPLEVEL); if (TrSt * gi_220 <= stoplevel_56) li_52 = -1; for (int pos_60 = OrdersTotal() - 1; pos_60 >= 0; pos_60--) { if (OrderSelect(pos_60, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if (OrderSymbol() == Symbol()) { magic_40 = OrderMagicNumber(); if (magic_40 == Magic) { if (OrderType() == OP_BUY) { if (StopLoss * gi_220 <= stoplevel_56 || gi_172 == TRUE) { if (OrderStopLoss() == 0.0) { if (gd_224 == 0.0) { gd_224 = OrderOpenPrice() - StopLoss * gi_220 * point_44; Print("Ðèñóåì ëèíèþ stop_buy1 íà óðîâíå ", gd_224); f0_3(gd_224, Green); } } if (OrderOpenPrice() - Ask >= StopLoss * gi_220 * point_44) OrderClose(OrderTicket(), OrderLots(), Bid, 5 * gi_220, Blue); } if (li_52 == -1) { order_open_price_16 = OrderOpenPrice(); while (!IsTradeAllowed()) Sleep(500); RefreshRates(); bid_0 = Bid; if (gd_224 == 0.0) { if (bid_0 - TrSt * gi_220 * point_44 > order_open_price_16) gd_224 = bid_0 - TrSt * gi_220 * point_44; Print("Virtual Stop Buy is ", gd_224); f0_3(gd_224, Green); } if (gd_224 > 0.0) { if (bid_0 < gd_224) { if (OrderClose(OrderTicket(), OrderLots(), Bid, 5 * gi_220, Blue)) { f0_5(); return; } } if (bid_0 - TrSt * gi_220 * point_44 > order_open_price_16 && bid_0 - TrSt * gi_220 * point_44 > gd_224) { gd_224 = bid_0 - TrSt * gi_220 * point_44; f0_3(gd_224, Green); } } } if (li_52 == 1) { order_open_price_16 = OrderOpenPrice(); ld_24 = OrderStopLoss(); ld_32 = ld_24; while (!IsTradeAllowed()) Sleep(500); RefreshRates(); bid_0 = Bid; if (bid_0 - TrSt * gi_220 * point_44 > order_open_price_16) ld_32 = bid_0 - TrSt * gi_220 * point_44; if (ld_32 > ld_24 && ld_32 > order_open_price_16 && bid_0 - ld_32 > stoplevel_56 * point_44) { if (!OrderModify(OrderTicket(), order_open_price_16, NormalizeDouble(ld_32, Digits), OrderTakeProfit(), 0)) Print("ERROR : ", GetLastError()); else { gd_224 = 0; gd_232 = 0; f0_5(); } } } } if (OrderType() == OP_SELL) { if (StopLoss * gi_220 <= stoplevel_56 || gi_172 == TRUE) { if (OrderStopLoss() == 0.0) { if (gd_232 == 0.0) { gd_232 = OrderOpenPrice() + StopLoss * gi_220 * point_44; Print("Virtual Stop Sell ", gd_232); f0_4(gd_232, Red); } } if (Bid - OrderOpenPrice() >= StopLoss * gi_220 * point_44) OrderClose(OrderTicket(), OrderLots(), Ask, 5 * gi_220, Red); } if (li_52 == -1) { order_open_price_16 = OrderOpenPrice(); while (!IsTradeAllowed()) Sleep(500); RefreshRates(); ask_8 = Ask; if (gd_232 == 0.0) { if (order_open_price_16 - ask_8 > TrSt * gi_220 * point_44) gd_232 = order_open_price_16 + TrSt * gi_220 * point_44; Print("Virtual Stop Sell is ", gd_232); f0_4(gd_232, Red); } if (gd_232 > 0.0) { if (ask_8 > gd_232) { if (OrderClose(OrderTicket(), OrderLots(), Ask, 5 * gi_220, Blue)) { f0_5(); return; } } if (order_open_price_16 - ask_8 > TrSt * gi_220 * point_44 && ask_8 + TrSt * gi_220 * point_44 < gd_232) { gd_232 = ask_8 + TrSt * gi_220 * point_44; f0_4(gd_232, Red); } } } if (li_52 == 1) { order_open_price_16 = OrderOpenPrice(); ld_24 = OrderStopLoss(); ld_32 = ld_24; while (!IsTradeAllowed()) Sleep(500); RefreshRates(); ask_8 = Ask; if (order_open_price_16 - ask_8 > TrSt * gi_220 * point_44 && ld_24 > ask_8 + TrSt * gi_220 * point_44 || ld_24 == 0.0) ld_32 = ask_8 + TrSt * gi_220 * point_44; if (ld_32 < ld_24 || ld_24 == 0.0 && ld_32 < order_open_price_16 && ld_32 - ask_8 > stoplevel_56 * point_44) { if (!OrderModify(OrderTicket(), order_open_price_16, NormalizeDouble(ld_32, Digits), OrderTakeProfit(), 0)) { Print("Another Error : ", GetLastError()); continue; } gd_224 = 0; gd_232 = 0; f0_5(); } } } } } } } void f0_3(double a_price_0, color a_color_8) { if (ObjectFind(g_name_248) != -1) ObjectDelete(g_name_248); g_bool_240 = ObjectCreate(g_name_248, OBJ_HLINE, 0, 0, a_price_0); ObjectSet(g_name_248, OBJPROP_COLOR, a_color_8); } void f0_4(double a_price_0, color a_color_8) { if (ObjectFind(g_name_256) != -1) ObjectDelete(g_name_256); g_bool_244 = ObjectCreate(g_name_256, OBJ_HLINE, 0, 0, a_price_0); ObjectSet(g_name_256, OBJPROP_COLOR, a_color_8); } void f0_5() { if (ObjectFind(g_name_248) != -1) ObjectDelete(g_name_248); if (ObjectFind(g_name_256) != -1) ObjectDelete(g_name_256); }
- 17-09-2011, 07:29 PM #89
بتوفيق اخي ربو كودر ياريت تنظر الى الموضوع التالي :
طلب اخر على الخاص ايضا تم الرد عليه
https://forum.arabictrader.com/t119413-2.html
- 18-09-2011, 01:58 AM #90
وين المحاولات و المبرمجين ؟
الأكثر زيارة

رد مع اقتباس