النتائج 1 إلى 3 من 3
الموضوع: ممكن مساعدة في كود برمجي
- 23-01-2024, 11:10 PM #1
ممكن مساعدة في كود برمجي
السلام عليكم
الكود التالي ينفذ كل ثانية ويكتب معلومات من السوق كل ثانية والمفروض يفتح صفقة كل 15 ثانية لكن لا اعرف ما الذي يحصل في الكود بحيث يفتح اكثر من صفقة مرة واحدة يعني المفروض يفتح صفقة في الثانية الاولى والثانية 15 والثانية 30 والثانية 45 من كل دقيقة وهو شغال بصورة جيدة لكن مرات ( وتحصل كثيرا) يفتح في الثنية 1 و2و3 او 15,16,17 وهكذا وهذا يسبب حمل على السيرفر وبالتالي تم غلق حساباتي الديمو في اثنين من الشركات بداعي ارهاق السيرفر هل ممكن المساعدة في هذا الكود مع الشكر الجزيل
كود://+------------------------------------------------------------------+ //| 4.mq4 | //| Copyright 2024, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property strict double a[900]; bool old_b=true; bool _buy=false; double old_v; double new_v; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- if ((Seconds()==0 || Seconds()==15 || Seconds()==30 || Seconds()==45)){_buy=true;} if (_buy==true) { ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-50*Point,Ask+65*Point,"My order",16384,0,clrGreen); _buy=false; } int handle; handle = FileOpen("data.csv", FILE_CSV | FILE_READ | FILE_WRITE, ','); if (handle != INVALID_HANDLE) { // Create a string to hold the entire array separated by semicolons // Move the file pointer to the end of the file FileSeek(handle, 0, SEEK_END); // Write the entire CSV line FileWrite(handle, Ask,TimeCurrent(),ticket,MarketInfo(Symbol(),MODE_SPREAD)); // Close the file FileClose(handle); } else { Print("Failed to open the file."); } } //+------------------------------------------------------------------+
- 24-01-2024, 05:00 AM #2
أنت تستخدم توقيت السيرفر للبروكر وهذا هو سبب المشكلة عندك .
قد لا يتحرك زمن البروكر كل ثانية وذلك حسب عدد الأزواج الموجودة ضمن نافذة مراقبة السوق .
وكذلك فإن زمن البروكر يتوقف أيضا تماما في العطل الرسمية أو إذا حدث عطل في سيرفر البروكر نفسه .
وستبقى قيمة seconds نفسها لا تتغير كل ثانية .
لذلك الأفضل حسب حالتك استبدال Seconds()
بالوظيفة التالية :
TimeSeconds(TimeLocal())
حيث ستوفر لك رقم الثانية المعتمدة على زمن الكمبيوتر لديك وليس وفق زمن البروكر الذي قد يتوقف لأكثر من ثانية ويسبب لك هذه المشكلة .
- 24-01-2024, 05:36 AM #3