جزاك الله خير اخي Robo-coder
انا لست بمبرمج ولست بمبتدئ بهذا المجال لكن من باب المحاولات على حسب المعلومات الي عندي
بصراحة حاولة اكثر من مرة لكن كل محاولاتي بائت بالفشل :0016:
وهذا علم يحتاج الى تركيز وتعلم لفترة من الوقت
:00012:
Printable View
أوكي المهم وجدنا من يحاول
نواصل إن شاء الله
الكود المتبقي هو جوهر الأكسبيرت لأنه يحتوي على شروط فتح الصفقات و إغلاقها :asvc:
من أول نظرة في الكود نلاحظ أنه متكون من الدالة الشرطيةكود:
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();
}
}
if.....else ...
و ترجمتها إذا توفر الشرط المطلوب إفعل الامر الاول و إلا إفعل الامر الثاني
يبدأ الكود ب
كود:
int stoplevel_4 = MarketInfo(Symbol(), MODE_STOPLEVEL)
و هي كما قلنا التعرف على أقل قيمة (بيب)يسمح بها الوسيط بالنسبة للزوج المستعمل في الشارت و يخزن هذه المعلومة في المتغير الحقيقي stoplevel_4
و أنا أعتقد أن هذا تكرار زائد لاننا على ما أذكر قمنا بنفس العملية في اول البرنامج :no3:
ثم يعطي القيمة false للمتغير المنطقي gi_172
حاليا كل شىء واضح و مفهوم على ما أضن :0016::0016::0016:
سوف ندخل في الشروط if... else
و هي في هذه الحالة مركبة في بعضها كالدمى الروسية
شرط يحتوي على شرط و هو بدوره يحتوي على شرط ثالث :0021::0021:
تابعوا معي الامر بسيط و لكن يلزمه بعض الانتباه و هذا بيت القصيد و مربط الفرس
لفهم الاكسبيرت
متابعين معاك ان شاء الله
معذرة على التاخير المشاغل لا تنتهي نكمل ما بقي لاحقا
ولكن في الاثناء نريد محاولات لشرح الكود انا في الانتظار
حزاك الله خير اخي Robo-coder على متابعة الموضوع :hands:
للاسف لاتوجد محاولات غير محاولاتي الفاشلة :doh:
:00012:
البرمجه تحتاج الى موهبه خاصه
اخي Robo-coder
ان شاء الله تعالى تكون بخير وصحة وعافية
اتمنى ان تكمل الشرح
جزاك الله خير خير الجزاء دنيا و اخرة
اولا: الاكسبيرت ليس مزيف وهو يفتح صفقات على حساب حقيقي
ثانيا: الاكسبيرت يحتاج الى سرعة عالية جدا في فتح الصفقات وتعديل الستوب (اقل من ثانية) وهذا الامر غير متوفر عند اغلب الشركات وحتى لو كان متوفر يجب ان يكون الاكسبيرت مرفوع على سيرفر VPS قريب من live servers لشركة التداول
ثالثا: يحتوي الاكسبيرت على بعض اوامر التوقف (Sleep) والتي يجب الغاؤها في حالة التداول الحقيقي لزيادة السرعة
رابعا: سبب اختلاف نتائج البكتيست عن الحقيقي هو ان نتائج الباكتيست لا تاخذ في الاعتبار الزمن اللازم لتنفيذ اوامر البيع والشراء وتعديل الستوب (تعتبرها صفر ثانية) وهي في الحقيقة يمكن ان تاخذ عدة ثواني وتعتمد على سرعة تنفيذ الاوامر لدى شركة التداول، والزمن اللازم لوصول الاوامر Latency والذي يتاثر بسرعة الانترنت والمسافة بينك وبين سيرفر شركة التداول
اخوكم: محمد
يعطيك ألف عافية يالطيب