صفحة 5 من 9 الأولىالأولى 123456789 الأخيرةالأخيرة
النتائج 61 إلى 75 من 122
  1. #61
    الصورة الرمزية basemsh
    basemsh غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Aug 2015
    الإقامة
    مصر
    المشاركات
    346

    افتراضي

    استاذ ريمون
    هل الذي وضعته هو ناسخ للصفقات بين منصات ميتاتريدر
    ممكن مثال كيف نضع المعطيات في الماستر و السليف؟ لنسخ الصفقات

  2. #62
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة basemsh مشاهدة المشاركة
    استاذ ريمون
    هل الذي وضعته هو ناسخ للصفقات بين منصات ميتاتريدر
    ممكن مثال كيف نضع المعطيات في الماستر و السليف؟ لنسخ الصفقات

    الإكسبيرت ده مجرد ناقل بيانات نصيه
    جاري اعداد إكسبيرت ناسخ الصفقات

  3. #63
    الصورة الرمزية basemsh
    basemsh غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Aug 2015
    الإقامة
    مصر
    المشاركات
    346

    افتراضي

    طيب في الانتظار و شكرا لكم

  4. #64
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    Cool

    هديتي للأستاذ وضاح عطار (صاحب الفكرة الاصلية لنقل البيانات عن طريق استخدام نافذة سطح)
    وهديتي للمبرمجين والمتاجرين


    إكسبيرت ناسخ الصفقات بين المنصات (على نفس الجهاز)
    مع ملف mqh يتيح إمكانية ادارج خاصية نقل البيانات النصية في أي إكسبيرت والاستفادة منها بسهولة

    ** تحت التجربة
    ** ارجو التجربة وادراج الأخطاء لتصحيحها


    هو إكسبيرت واحد فقط
    نختار اذا كان مرسل ام مستقبل من الاعدادات

    اضغط على الصورة لعرض أكبر

الاســـم:	مستقبل.png
المشاهدات:	34
الحجـــم:	19.4 كيلوبايت
الرقم:	453015

    اضغط على الصورة لعرض أكبر

الاســـم:	مرسل.png
المشاهدات:	36
الحجـــم:	25.5 كيلوبايت
الرقم:	453016

    شرح الاعدادات
    1- زمن فحص الصفقات
    وهو من 20 الى 1000
    كل 1000 تمثل ثانية واحدة
    وكلما قل الزمن كان النسخ اسرع ولكن قد تحدث أخطاء نادره او يستهلك سرعة الجهاز

    2- كود الاتصال بين المرسل والمستقبل ويجب ان يكون متشابه في النسختين لتتعرف كل منهما على الأخرى

    3- مرسل او مستقبل (اجعله مرسل في الحساب الذي تريد ان تنسخ منه الصفقات)

    4- ماجيك
    اذا كان مرسل سيكون ماجيك الصفقات التي نريد نسخها
    اذا كان مستقبل سيكون ماجيك الصفقات التي نفتحها على هذا الحساب

    5- احداث أصوات فتح الصفقات (قد لا يعمل الصوت - سوف ادرج ملف الصوت داخل الإكسبيرت لاحقا)

    6- رقم يضرب في لوت الصفقة قبل فتحها ويستخدم اذا كان الحسابين ليس لهم نفس الرصيد للتوفيق بين هذا الاختلاف
    اجعله 2 اذا كان الحساب الذي تنسخ اليه الصفقات به ضعف رصيد الحساب الاخر

    7- عكس الصفقات
    فتح بيع بدل الشراء وشراء بدل البيع في الحساب الذي سوف ننسخ اليه الصفقات



    --يمكن تشغيل عدة نسخ من هذا الإكسبيرت مع تغيير كود الاتصال في الخيار رقم 2
    ويجب ان يكون الكود نفسه في المرسل والمستقبل
    وتغيير رقم الماجيك حسب الحاجة بحيث لا يحصل تعارضات بين الصفقات

    -- يمكن فتح الإكسبيرت المرسل والمستقبل على نفس المنصة او على منصتين مختلفتين


    ---------------------------

    الملفات المرفقة الملفات المرفقة

  5. #65
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

    جعلت الإكسبيرت يتعرف تلقائيا على لاحقة أسماء العملات عن طريق هذه الحيله

    كود PHP:
    string GetRealSymbolName(string symbol){
      
    int i;
      
    string sym;
      
      for(
    i=0;i<SymbolsTotal(true);i++){
        
    sym=SymbolName(i,true);
        if(
    MarketInfo(sym,MODE_TRADEALLOWED)){
          if(
    StringFind(symbol,sym)==|| StringFind(sym,symbol)==0){return sym;}//==0 is start from it.
        
    }
      }
      
    Alert(symbol," Not Found!!");
      return
    "";


  6. #66
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

    فكرة عمل إكسبيرت ناسخ الصفقات هي:-
    المرسل يقوم بمراجعة وقراءة جميع الصفقات الشغالة بعد تصفيتها عن طريق رقم الماجيك
    ثم دمج اسم الصفقات واللوت ورقم التكت لجميع الصفقات في صورة نص واحد مفصول بفصلات معينة لتسهيل الفصل لاحقا
    ثم يرسل النص الى ذاكرة سطح المكتب وينتظر المرسل الى ان يتم اختفاء النص من ذاكرة سطح المكتب وهذا معناه انه تم التوصيل

    يقوم وقتها المستقبل بقراءة ذاكرة سطح المكتب وعندما يجد الكود المتفق عليه يقوم بقراءة النص ثم حذفه من الذاكرة
    مع ملحوظة حذف النص الخاص به فقط وليس كامل النص لانه يمكن ان يكون هناك بيانات أخرى تخص إكسبيرت اخر

    ثم يفصل النص ويحولة الى أسماء الصفقات وبياناتها مرة أخرى
    ثم يقارن النص والصفقات التي به بالصفقات المفتوحة
    ويفتح الصفقات التي ليست مفتوحة ويغلق الصفقات التي ليست موجودة في لستة الصفقات القادم من المرسل

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

    لا نرسل نص الى ذاكرة سطح المكتب إلا اذا اختبرناها وتبين ان اخر نص ارسلناه غير موجود أي تم استقباله حتى لا تمتلئ ذاكرة سطح المكتب بدون فائدة

    يقوم المرسل والمستقبل بتفريغ محتويات ذاكرة سطح المكتب من أي بيانات خاصة بالاكسبيرت عند بداية التشغيل حتى لا ينفذ بيانات واوامر سابقة وأيضا يفرغ الذاكرة قبل اغلاق الإكسبيرت.

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

    نكتب رقم التكت للصفقة الاصلية في كومنت الصفقة المنسوخة لنراجع ذلك الرقم لاحقا وذلك لعدم فتح صفقات مكررة ولمعرفه اذا كانت تلك الصفقة موجودة ام لا لانه يمكن ان تكون عدة صفقات بنفس اللوت واختلاف الربح ونحن نريد قفل صفقة معينة لا نعرف ايهما فعندها نقفل الصفقة التي قفلت نفسها عن طريق تمييزها برقم التكت من الكومنت.



    آخر تعديل بواسطة remon78eg ، 25-02-2016 الساعة 06:54 PM

  7. #67
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

    كيف يمكن الاستفادة من ناسخ الصفقات لتحقيق ربح من إكسبيرت لا يحقق ربح!!

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

    ثاني طريقة هي استخدام اختيار النسخ المعكوس (شراء يصبح بيع والعكس)
    وتشغيل إكسبيرت مضاعفات على الحساب الديمو من النوع الذي يحقق خسارة كبيرة أولا قبل تحقيق ربح قليل
    ثم ضبط الإكسبيرت الديمو ان يغلق عند استوب معين بخسارة معينة فعندما يغلق بخسارة يكون الإكسبيرت على الحساب الاخر الحقيقي قد حقق ربح.

  8. #68
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

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

    ميزه عدم نسخ الهيدج لا يمكن دمجها في اكسبيرت ناسخ الصفقات لانه لا يعلم هل الصفقة التي فتحت الان سوف يفتح لها هيدج ام ستظل صفقة مفرده، وعندها سوف يقوم ناسخ الصفقات بنسخ الصفقة المفردة ثم يفاجئ بفتح هيدج لها ،، واذا انتظر حتى يعرف اذا كانت الصفقة سوف تفتح هيدج ام لا فعندها سيفتح على سعر اخر بفارق خمس ثواني مثلا او اكثر.

    لذلك سوف اجعل الإكسبيرت الاصلي على الديمو هو الذي ينسخ الصفقات ويرسلها للحساب الحقيقي المستقبل (لانه يعلم اذا كان سيفتح هيدج ام لا) وذلك عن طريق دمج إكسبيرت ناسخ الصفقات مع الإكسبيرت الاخر.
    آخر تعديل بواسطة remon78eg ، 25-02-2016 الساعة 07:27 PM

  9. #69
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

    ملحوظة هامة
    ناسخ الصفقات هذا لا يعمل مع الأوامر التي تغلق ب
    (كلوز باي)
    لانه سوف يغلق اغلاق عادي

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

    وأيضا لا يعمل جيداً بطريقة الاغلاق ب (كلوز باي) التي ابتكرها الأستاذ وضاح عن طريق فتح هيدج
    لانه سوف يفتح الهيدج ويغلق بدون كلوز باي وستكون وقتها الخسارة في الإسبريد كبيرة جداً.

  10. #70
    الصورة الرمزية zamalek
    zamalek متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Aug 2010
    الإقامة
    مصر
    المشاركات
    1,352

    افتراضي

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

    ميزه عدم نسخ الهيدج لا يمكن دمجها في اكسبيرت ناسخ الصفقات لانه لا يعلم هل الصفقة التي فتحت الان سوف يفتح لها هيدج ام ستظل صفقة مفرده، وعندها سوف يقوم ناسخ الصفقات بنسخ الصفقة المفردة ثم يفاجئ بفتح هيدج لها ،، واذا انتظر حتى يعرف اذا كانت الصفقة سوف تفتح هيدج ام لا فعندها سيفتح على سعر اخر بفارق خمس ثواني مثلا او اكثر.

    لذلك سوف اجعل الإكسبيرت الاصلي على الديمو هو الذي ينسخ الصفقات ويرسلها للحساب الحقيقي المستقبل (لانه يعلم اذا كان سيفتح هيدج ام لا) وذلك عن طريق دمج إكسبيرت ناسخ الصفقات مع الإكسبيرت الاخر.
    اخي ريمون ممكن شرح بمثال لاني مش فاهم ازاي هتكسب افرض الصفقة المنفردة كانت منعكسة؟
    توقيع العضو
    لا تبحث عن الحل السحري لأنه ببساطه محدش عارف حاجه ..

  11. #71
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    Cool

    اقتباس المشاركة الأصلية كتبت بواسطة zamalek مشاهدة المشاركة
    اخي ريمون ممكن شرح بمثال لاني مش فاهم ازاي هتكسب افرض الصفقة المنفردة كانت منعكسة؟

    نفترض ان لديك إكسبيرت بيفتح هيدج (على نفس العملة)
    أي انه بيفتح بيع وبيفتح شراء على نفس العملة وفي نفس اللحظة
    وبينتهي بقفل البيع والشراء بحيث ان المحصلة تساوي مكسب او حتى تعادل كما سنفعل

    نفترض ان الإكسبيرت فتح بيع وشراء لليورو دولار
    نفترض ان الإسبريد كان 10 دولار
    بعد فترة ارتفع السعر وحقق الشراء مكسب 100 دولار
    قفلنا الشراء بمكسب 100 دولار
    البيع الان خسران -100 دولار -10-10 سبريد
    المحصلة 100 مكسب البيع -100 -20 دولار تساوي خسارة -20 دولار

    على الإكسبيرت الان من تلك اللحظة ان يكسب 20 دولار لكي يخرج فقط على تعادل
    فلو دخنا مع الإكسبيرت ونسخنا صفقاته من تلك اللحظة سنخرج معه على صفر تعادل
    والتي هي بالنسبة لنا تعتبر +10 دولار لأننا لم ندفع اسبريد الشراء
    فنقطة الصفر التي بدأنا منها هي -10 دولار (سبريد)
    بينما الإكسبيرت عندما بدأ من نقطة الصفر كان -20 دولار


    آخر تعديل بواسطة remon78eg ، 26-02-2016 الساعة 09:47 AM

  12. #72
    الصورة الرمزية zamalek
    zamalek متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Aug 2010
    الإقامة
    مصر
    المشاركات
    1,352

    افتراضي

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


    فلو دخنا مع الإكسبيرت ونسخنا صفقاته من تلك اللحظة سنخرج معه على صفر تعادل
    والتي هي بالنسبة لنا تعتبر +10 دولار لأننا لم ندفع اسبريد الشراء
    فنقطة الصفر التي بدأنا منها هي -10 دولار (سبريد)
    بينما الإكسبيرت عندما بدأ من نقطة الصفر كان -20 دولار


    بعد اغلاق الشراء بخسارة 20- هل سيدخل الاكسبرت الأصلي علي الديمو بيع فقط ؟؟ برجاء توضيح هذه النقطة ؟
    توقيع العضو
    لا تبحث عن الحل السحري لأنه ببساطه محدش عارف حاجه ..

  13. #73
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة zamalek مشاهدة المشاركة
    بعد اغلاق الشراء بخسارة 20- هل سيدخل الاكسبرت الأصلي علي الديمو بيع فقط ؟؟ برجاء توضيح هذه النقطة ؟

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

    عادة يتم قفل الشراء عند نقطة مقاومة فيكون عندها احتمال الهبوط كبير

    بالإضافة الى ان الإكسبيرت يتعامل بعدة ازواج كل زوج على حدى في مضاعفاته ولكن ربحهم مشترك،
    وأيضا الصفقات التي تغلق يتم تخذين ربحها حتى اذا كان مجمل ربح جميع الصفقات الشغاله والمغلقة
    من زمن بداية الجلسة مساوي رقم معين فسيتم اغلاق الجميع معا وبهذا تحمل الصفقات الرابحة المغلقة والشغالة بعض من خسارة المضاعفات وتسرع عملية الاغلاق والخروج على ربح مبكرا عما اذا استخدمنا عملة واحدة.


  14. #74
    الصورة الرمزية remon78eg
    remon78eg غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    May 2010
    العمر
    46
    المشاركات
    1,484

    Cool

    هذا هو الإصدار الجديد من برنامج ناسخ الصفقات
    به بعض التحديثات منها
    إمكانية عدم نسخ الهيدج إلا بعد فكه (فقط لتوفير الإسبريد ،، وهو يكون اكبر من الربح نفسه عند الإسكالبنج).
    التعرف على أسماء العملات تلقائيا حتى وان كانت هناك لاحقة مختلفة لكل نوع حساب (micro - pro).

    ReadWrite.mqh
    كود PHP:
    //#property copyright "Copyright 2016, Eng. Waddah Attar , remon78eg"
     
    //=====================================================================================
    //By Remon78eg , 24/02/2016
    //طريقة العمل هي كالتالي
    //يبدأ البرنامج ريت بكتابة الرسالة الى الذاكرة المشتركة عن طريق اضافتها
    //قبل اضافتها يختبر اذا كانت موجودة ام لا
    //هنا تظهر اهمية اضافة التك كونت لانه ان كان هناك امر سابق لم يتم استقباله وحذفه له نفس المدخلات فلن يضاف مرة اخرى
    //مثل امر فتح صفقة بنفس اللوت السابق ونفس العملة والبيانات
    //ينتظر البرنامج ريت الى ان تصل رسالته الى الذاكرة المشتركة عن طريق اعادة قرائتها
    //هنا ينتهي عمل البرنامج ريت او انه يظل منتظر الاستلام حسب الاعدادات
    //يبدا عمل برنامج ريد بقراءة الذاكرة المشتركة
    //حتى يرى كود مشترك متفق عليه شير ايدي يقرأه ويحذفة من الذاكرة المشتركة لكي لا يقرأه مرة اخرى
    //ويتأكد من انه تم حذفة بإعادة قراءة الذاكرة مرة اخرى
    //=====================================================================================
    //input string SHARED_ID="ABC123456789";
    #import "user32.dll"
       
    int   GetDesktopWindow        ();
       
    int   GetWindow               (intint);
       
    int   SendMessageW(int hWnd,int Msg,int wParam,string lParam);
       
    int   GetWindowTextA(int hWnd,char &lpString[],int nMaxCount);
       
    int   GetWindowTextLengthA(int hWnd);
    #import
    string PendingData="";
    int MyID=WindowHandle(Symbol(),PERIOD_CURRENT);
    int hWnd_Desktop=0;//  = GetWindow(GetDesktopWindow(),5);
    /*
    input int    msSleep=100;
     
    void OnInit(){
      EventSetMillisecondTimer(msSleep);
    }
    void OnDeinit(const int reason){
       string name,val;
       EventKillTimer();
       while(ReadData(name,val,true)){}//Empty Memory if not need it anymore
    }
    void OnTimer(){
      string name,val;
      
      static bool imin=false;
      if(imin)return;
      imin=true;
      
      while(ReadData(name,val)){Alert(name," = ",val);if(IsStopped())return;}
      
      imin=false;
    }
    void OnTick(){
      static int i=0;
      //WriteData("Bid",string(Bid));
      i++;
      
      WriteData("i",(string)i,SHARED_ID);
      WritePendingData(hWnd_Desktop,10000);
    }
    */
    //--------------------------------------------------------------------------------------
    bool WritePendingData(int sendto,int TimeOutS=60,bool WaitTillArrived=false){
      
    string arr[];
      
    string tmp,s;
      
    datetime t=TimeCurrent();
      
      if(!
    ReadyToReceive())return false;
      if(
    PendingData=="" || PendingData==NULL){return false;}
      if(
    sendto<=0)return false;
      
    Split(PendingData,"<<end>>",arr);
      if(
    arr[0]=="" || arr[0]==NULL)return false;
      
    s=arr[0]+"<<end>>";//اضافة الخاتمة لانها حذفت من سبلت
      
      
    while(true){
        
    tmp=GetWindowText(sendto);//قراءة محتويات الذاكرة
        
    if(StringFind(tmp,s)>=0){break;}//اذا كان النص موجود لا نعيد ارساله
        
    SendMessageW(sendto0xc0tmp+s);//اضافة النص الجديد الى الذاكرة وارساله
        //if(TimeCurrent()-t>=TimeOutS)return false;
        
    break;
      }
      
    StringReplace(PendingData,s,"");//حذف الرسالة التي ارسلت من قائمة الانتظار لكي لا نرسلها مرة اخرى
      
    while(WaitTillArrived){
        
    tmp=GetWindowText(sendto);//قراءة محتويات الذاكرة
        //if(StringFind(tmp,s)==-1 && StringFind(tmp,"Default IME")>=0){break;}//اذا كان النص غير موجود فتم الاستقبال جيدا
        
    if(StringFind(tmp,s)==-1){break;}//اذا كان النص غير موجود فتم الاستقبال جيدا
        
    if(TimeCurrent()-t>=TimeOutS)return false;
        
    Sleep(20);
      }
      return 
    true;
    }
    //---------------------------------------------------
    void WriteData(string name,string val,string SharedID,int TimeOutS=60){//(data format is)    |RW| MAGIC_ID * MyID <<:::>> name <<===>> val <<tic>> GetTickCount() <<end>>   (without spaces)
      
    PendingData+="|RW|"+SharedID+"*"+string(MyID)+"<<:::>>"+name+"<<===>>"+val+"<<tic>>"+string(GetTickCount())+"<<end>>";
      if(
    hWnd_Desktop<=0){hWnd_DesktopGetWindow(GetDesktopWindow(),5);}
      
    WritePendingData(hWnd_Desktop,TimeOutS);//ارسال الى الذاكرة الخارجية المشتركة
    }
    //---------------------------------------------------------------------------------------
    int Split(string str,string s,string arr[]){//0,10,20,30 => arr[0,10,20,30]
       
    int x=0,i=0,len;
       
    string t;
       
       
    len=0;
       
    ArrayResize(arr,0);
       
       while(
    true){
          
    i=StringFind(str+s,s,x);//str+s
          
    if(i==-1)return len;
          
    t=StringSubstr(str,x,i-x);
          if(
    i==x)t="";
          
    len++;
          
    ArrayResize(arr,len);
          
    arr[len-1]=t;
          
    x=i+StringLen(s);
       }
       return 
    len;
    }
    //---------------------------------------------------------------------------------------
    string GetWindowText(int hWnd){
      
    char data[];
      
    string str;
      
    int i;
      
      if(
    hWnd<=0){return "";}
      
    i=GetWindowTextLengthA(hWnd);
      if(
    i<=0){return "";}
      
      
    ArrayResize(data,i+1);
      
    GetWindowTextA(hWnd,data,i+1);
      
    str=CharArrayToString(data);
      return 
    str;
    }
    //-----------------------------------------------------------------
    bool ReadData(string &name,string &val,bool IncludeMine=false){//(data format is)    |RW| MAGIC_ID * MyID <<:::>> name <<===>> val <<tic>> GetTickCount() <<end>>   (without spaces)
      
    string arr1[],arr2[],arr3[],arr4[],arr5[],tmp,str,s;
      
    datetime t=TimeCurrent();
      
    int n,i;
      
      
    name="";val="";
      if(
    hWnd_Desktop<=0){hWnd_DesktopGetWindow(GetDesktopWindow(),5);}
      
    str=GetWindowText(hWnd_Desktop);
      
    //if(StringFind(str,"Default IME")<0){Alert("memory=",str);return false;}
      
      
    n=Split(str    ,"|RW|"+SHARED_ID+"*",arr1);//{return false;}//arr1[1]= MyID   <<:::>>  name <<===>> val <<tic>> GetTickCount() <<end>> ...
      
    for(i=1;i<n;i++){
      while(
    true){
        if(
    Split(arr1[i],"<<:::>>"           ,arr2)<2){break;}//arr2[0]= MyID , arr2[1]= name <<===>> val <<tic>> GetTickCount() <<end>> ...
        
    if(arr2[0]==string(MyID) && !IncludeMine){break;}//قراءة المحتويات التي ارسلتها - يستخدم لتصحيح الاخطاء فقط
      
        
    if(Split(arr2[1],"<<tic>>",arr3)<2){break;}//arr3[0]= name    <<===>>   val     , arr3[1]= GetTickCount() <<end>> ...
        
    if(Split(arr3[0],"<<===>>",arr4)<2){break;}//arr4[0]= name , arr4[1]  = val
      
        
    name=arr4[0];
        
    val =arr4[1];
      
        if(
    Split(arr1[1],"<<end>>",arr5)<1){break;}//arr5[0]= MyID   <<:::>>  name <<===>> val <<tic>> GetTickCount()
        
    s="|RW|"+SHARED_ID+"*"+arr5[0]+"<<end>>";
      
        while(
    true){
          
    tmp=GetWindowText(hWnd_Desktop);//قراءة محتويات الذاكرة
          
    if(StringFind(tmp,s)>=0){break;}//لابد ان يكون النص موجود اولا قبل حذفه
          
    if(TimeCurrent()-t>=20)return false;
        }
      
        while(
    true){
          
    StringReplace(tmp,s,"");//del from memory
          
    SendMessageW(hWnd_Desktop0xc0tmp);//اضافة النص الجديد الى الذاكرة وارساله
          
    tmp=GetWindowText(hWnd_Desktop);//قراءة محتويات الذاكرة
          //if(StringFind(tmp,s)==-1 && StringFind(tmp,"Default IME")>=0){break;}//اذا كان النص غير موجود فنخرج
          
    if(StringFind(tmp,s)==-1){break;}//اذا كان النص غير موجود فنخرج
          
    if(TimeCurrent()-t>=20)return false;
        }
        return 
    true;
      }}
      return 
    false;
    }
    //=====================================================================================
    bool ReadyToReceive(){//no pending data still in public memory
      
    string arr1[],arr2[],arr3[],arr4[],arr5[],tmp,str,s;
      
    int n,i;
      
      if(
    hWnd_Desktop<=0){hWnd_DesktopGetWindow(GetDesktopWindow(),5);}
      
    str=GetWindowText(hWnd_Desktop);
      
    //if(StringFind(str,"Default IME")<0){Alert("memory=",str);return false;}
      
    n=Split(str,"|RW|"+SHARED_ID+"*",arr1);// arr1[1]= MyID   <<:::>>  name <<===>> val <<tic>> GetTickCount() <<end>> ...
      
    for(i=1;i<n;i++){
        if(
    Split(arr1[i],"<<:::>>",arr2)<2){}else{if(arr2[0]==string(MyID)){return false;}}
      }
      return 
    true;
    }
    //=====================================================================================
    bool ClearJunkData(uint MaxTimeSec=120,bool BothExperts=false){
      
    string arr1[],arr2[],arr3[],arr4[],arr5[],tmp,str,s;
      
    int n,i;
      
    uint t=GetTickCount();
      
      if(
    hWnd_Desktop<=0){hWnd_DesktopGetWindow(GetDesktopWindow(),5);}
      
    str=GetWindowText(hWnd_Desktop);
      
      
    n=Split(str    ,"|RW|"+SHARED_ID+"*",arr1);//{return false;}//arr1[1]= MyID   <<:::>>  name <<===>> val <<tic>> GetTickCount() <<end>> ...
      
    for(i=1;i<n;i++){
      while(
    true){
        if(
    Split(arr1[i],"<<:::>>"           ,arr2)<2){break;}//arr2[0]= MyID , arr2[1]= name <<===>> val <<tic>> GetTickCount() <<end>> ...
        
    if(arr2[0]!=string(MyID) && BothExperts==false){break;}
      
        if(
    Split(arr2[1],"<<tic>>",arr3)<2){break;}//arr3[0]= name    <<===>>   val     , arr3[1]= GetTickCount() <<end>> ...
        
    if(Split(arr3[1],"<<end>>",arr4)<1){break;}//arr4[0]= GetTickCount()
      
        
    if(t-uint(arr4[0])>=MaxTimeSec*1000){}else{break;}
        
        if(
    Split(arr1[1],"<<end>>",arr5)<1){break;}//arr5[0]= MyID   <<:::>>  name <<===>> val <<tic>> GetTickCount()
        
    s="|RW|"+SHARED_ID+"*"+arr5[0]+"<<end>>";
      
        while(
    true){
          
    tmp=GetWindowText(hWnd_Desktop);//قراءة محتويات الذاكرة
          
    if(StringFind(tmp,s)>=0){break;}//لابد ان يكون النص موجود اولا قبل حذفه
          
    if(TimeCurrent()-t>=20)return false;
        }
      
        while(
    true){
          
    StringReplace(tmp,s,"");//del from memory
          
    SendMessageW(hWnd_Desktop0xc0tmp);//اضافة النص الجديد الى الذاكرة وارساله
          
    tmp=GetWindowText(hWnd_Desktop);//قراءة محتويات الذاكرة
          
    if(StringFind(tmp,s)==-1){break;}//اذا كان النص غير موجود فنخرج
          
    if(TimeCurrent()-t>=20)return false;
        }
        return 
    true;
      }}
      return 
    false;



    Trades.mqh
    كود PHP:
    struct STR_DEALS_COPY{
       
    string deal       ;//EURUSD
       
    string direction  ;//B or S
       //string comment    ;//ABC123
       //string magic      ;//0123456789
       
    string ticket     ;//0123456789
       
    string lot        ;//0.01
    };
     
    //=====================================================================================
    int OrdersTotals(int Magic){
      
    int x=0,i;
      
    bool error;
      
      while(
    true){
        
    x=0;
        
    error=false;
        for(
    i=0;i<OrdersTotal();i++){
          if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){RefreshRates();error=true;break;}
          if((
    OrderMagicNumber()==Magic || Magic==-1) && (OrderType()==OP_BUY || OrderType()==OP_SELL)){x++;}
        }
        if(!
    error){break;}
      }
      return(
    x);
    }
    //==============================================
    //==========================================================
    int CopyAllTrades(int Magic,STR_DEALS_COPY &Trades[],bool I_HEDGE_NOT_COPY,int I_HEDGE_NOT_COPY_DELAY_SEC){
      
    int x=0,i,n=1;
      
    bool error;
      
      while(
    true){
        
    x=0;
        
    error=false;
        
    ArrayResize(Trades,OrdersTotal());
        for(
    i=0;i<OrdersTotal();i++){
          if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){RefreshRates();error=true;break;}
          if((
    OrderMagicNumber()==Magic || Magic==-1) && (OrderType()==OP_BUY || OrderType()==OP_SELL)){
            if(
    I_HEDGE_NOT_COPY){
              
    n=CanSend(Magic,OrderSymbol(),iif(OrderType()==OP_BUY,"B","S"));//-1=err,0=no ,1=yes , 2= wait timeout
              
    if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){RefreshRates();error=true;break;}//select again ,coz CanSend deselect it
            
    }
            if(
    n==-1){RefreshRates();error=true;break;}
            if(
    n== || (n==&& TimeCurrent()-OrderOpenTime()>I_HEDGE_NOT_COPY_DELAY_SEC) || !I_HEDGE_NOT_COPY){//1=copy now , 2=copy but wait
              
    Trades[x].deal     =OrderSymbol     ();
              
    Trades[x].direction=iif(OrderType()==OP_BUY,"B","S");
              
    Trades[x].ticket   =(string)OrderTicket     ();
              
    Trades[x].lot      =(string)OrderLots       ();
              
    x++;
            }
          }
        }
        if(!
    error){break;}
      }
      
    ArrayResize(Trades,x);
      return(
    x);
    }
    //========================================
    string TradesToString(STR_DEALS_COPY &Trades[]){
      
    int i;
      
    string s,ss="";
      for(
    i=0;i<ArraySize(Trades);i++){
        
    //s=Trades[i].deal+";"+Trades[i].comment+";"+Trades[i].direction+";"+Trades[i].magic+";"+Trades[i].ticket+";"+Trades[i].lot;
        
    s=Trades[i].deal+";"+Trades[i].direction+";"+Trades[i].ticket+";"+Trades[i].lot;
        
    ss+=iif(ss=="","","|");
        
    ss+=s;
      }
      return 
    ss;
    }
    //========================================
    int StringToTrades(string T,STR_DEALS_COPY &Trades[]){
      
    int i,n,m,w;
      
    string s[],ss[],sss[];
      
      
    n=StringSplit(T,'~',sss);
      
    w=int(sss[0]);
      if(
    != StringLen(sss[1])){return -1;}//error in data length, missing data
      
      
    n=StringSplit(sss[1],'|',ss);
      
    //n=Split(T,"|",ss);
      
    ArrayResize(Trades,n);
      
      for(
    i=0;i<n;i++){
        
    m=StringSplit(ss[i],';',s);
        
    //m=Split(ss[i],";",s);
        
    Trades[i].deal     =GetRealSymbolName(s[0]);
        
    //Trades[i].comment  =s[1];
        
    Trades[i].direction=s[1];
        
    //Trades[i].magic    =s[3];
        
    Trades[i].ticket   =s[2];
        
    Trades[i].lot      =s[3];
      }
      return 
    n;
    }
    //========================================
    int isDealOpen(int Magic,string Ticket){//-1=err 0=not found,1=found
      
    int i;
      for(
    i=0;i<OrdersTotal();i++){
        if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){RefreshRates();return -1;}
        if((
    Magic==OrderMagicNumber() || Magic==-1) && Ticket==OrderComment()){return 1;}
      }
      return 
    0;
    }
    //==========================================
    bool OpenDeal(int Magic,string eDEAL,string eD,double eLot,string eC){
        
    int i=0;
        
    int m;
        if(
    eC=="0"){eC="1";}
        
    eLot=NormalizeLot(eLot);
        if(
    eLot==0){ObjectSetText("L1","Lot=0 "+eDEAL+" : "+eD,10,"Times New Roman",Red);Sleep(500);return false;}
        if(
    eDEAL=="" || eDEAL==NULL){ObjectSetText("L1","DEAL=''",10,"Times New Roman",Red);Sleep(500);return false;}
        if(
    eD==""    || eD==NULL   ){ObjectSetText("L1","D=''",10,"Times New Roman",Red);Sleep(500);return false;}
        
        
    //if(DEALS_SOUND)PlaySound("+12.wav");
        
    m=OrdersTotals(Magic);
        while(
    true){
          if(
    IsStopped()){return false;}
          if(
    IsExpertEnabled()==false || IsTradeAllowed()==false){PlaySound("alert2");Comment("Canot Open,Please Allow Auto");Print("Canot Open,Please Allow Auto!!");Sleep(1000);Sleep(1000);Sleep(1000);}
          
    ObjectSetText("L1","Open "+eDEAL+" : "+eD,14,"Times New Roman",Green);
          if(
    OrdersTotals(Magic)>m){break;}
          if(
    eDEAL != "" && eD=="S"){ i=OrderSend(eDEAL,OP_SELL,eLot,SymbolInfoDouble(eDEALSYMBOL_BID),3000,0,0,eC,Magic,0,Red ); }
          if(
    eDEAL != "" && eD=="B"){ i=OrderSend(eDEAL,OP_BUY ,eLot,SymbolInfoDouble(eDEALSYMBOL_ASK),3000,0,0,eC,Magic,0,Blue); }
          if(
    OrdersTotals(Magic)>m){break;}
          
    Alert("Error Open "+eDEAL+" Err="+(string)ErrorDescription(GetLastError()));Sleep(1000);Sleep(1000);Sleep(1000);
        }
        if(
    DEALS_SOUND)PlaySound("chime.wav");
        return(
    true);
    }
    //*******************************************************************************************
    //---------------------------------------------------------------------------------------
    double NormalizeLot(double eLot){
      
    double LotNrm,MinLot,LotStp;
      
      
    MinLot=MarketInfo(Symbol(),MODE_MINLOT);
      
    LotStp=MarketInfo(Symbol(),MODE_LOTSTEP);
      
    LotNrm=MathRound((double)NUM(MathFloor(eLot/LotStp),2))*LotStp;
      if(
    LotNrm<MinLot)return 0;
      return(
    LotNrm);
    }
    //---------------------------------------------------------------------------------------
    //----------------------------------------------
    bool isDealClosed(STR_DEALS_COPY &Trades[],string Ticket){
      
    int i,n=0;
      for(
    i=0;i<ArraySize(Trades);i++){
        if(
    Trades[i].ticket==Ticket)return false;
      }
      return 
    true;
    }
    //=======================================
    void SendAllTrades(int Magic,bool I_HEDGE_NOT_COPY,int I_HEDGE_NOT_COPY_DELAY_SEC){
      
    int n;
      
    STR_DEALS_COPY Trades[];
      
    string TRADES;
      
      
    n=CopyAllTrades(Magic,Trades,I_HEDGE_NOT_COPYI_HEDGE_NOT_COPY_DELAY_SEC);
      
    //if(n==0)return;
      
    TRADES=TradesToString(Trades);
      if(
    ReadyToReceive()){WriteData("TRADES",string(StringLen(TRADES))+"~"+TRADES,SHARED_ID,60);}
    }
    //========================================
    int ReadAllTrades(STR_DEALS_COPY &Trades[]){
      
    bool it;
      
    string name,val;
      
    int n=0;
      
    it=ReadData(name,val);
      if(
    name=="TRADES"){n=StringToTrades(val,Trades);}else{n=-1;}
      return 
    n;
    }
    //*******************************************************************************************
    int OpenTheTrades(int Magic,STR_DEALS_COPY &Trades[],double lot_ratio,bool invert){
      
    int i,n=0;
      
    string d;
      for(
    i=0;i<ArraySize(Trades);i++){
        if(
    isDealOpen(Magic,Trades[i].ticket)==0){
          
    d=Trades[i].direction;
          if(
    invert){d=iif(d=="B","S","B");}
          
    OpenDeal(Magic,GetRealSymbolName(Trades[i].deal),d,double(Trades[i].lot)*lot_ratio,Trades[i].ticket);
          
    n++;
        }
      }
      return 
    n;
    }
    //-----------------------------------------
    bool CloseTheTrades(int Magic,STR_DEALS_COPY &Trades[]){
      
    int i,n=0;
      
    bool v;
      
    RefreshRates();
      for(
    i=0;i<OrdersTotal();i++){
        if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){RefreshRates();return true;}
        if(
    Magic==OrderMagicNumber() || Magic==-1){
          if(
    isDealClosed(Trades,OrderComment())){
            if(
    OrderType()==OP_BUY ){v=OrderClose(OrderTicket(),OrderLots(),SymbolInfoDouble(OrderSymbol(), SYMBOL_BID),3000,clrLightGreen);}
            if(
    OrderType()==OP_SELL){v=OrderClose(OrderTicket(),OrderLots(),SymbolInfoDouble(OrderSymbol(), SYMBOL_ASK),3000,clrLightPink );}
            
    n++;
          }
        }
      }
      return 
    n;
    }
    //==========================================
    string GetRealSymbolName(string symbol){
      
    int i;
      
    string sym,s=symbol;
      
      while(
    StringLen(symbol)>=1){
        for(
    i=0;i<SymbolsTotal(false);i++){
          
    sym=SymbolName(i,false);
          if(
    MarketInfo(sym,MODE_TRADEALLOWED)){
            if(
    StringFind(symbol,sym)==|| StringFind(sym,symbol)==0){return sym;}//==0 is start from it.
          
    }
        }
        
    symbol=StringSubstr(symbol,0,StringLen(symbol)-1);//may be EURUSDmicro && EURUSD. so del the last char (.) or (micro) and search again
      
    }
      
    Alert(s," Not Found!!");
      return
    "";
    }
    //==========================================
    color iif(bool con,color tr,color fl){
      if(
    con){return(tr);}else{return(fl);}
    }
    int iif(bool con,int tr,int fl){
      if(
    con){return(tr);}else{return(fl);}
    }
    double iif(bool con,double tr,double fl){
      if(
    con){return(tr);}else{return(fl);}
    }
    string iif(bool con,string tr,string fl){
      if(
    con){return(tr);}else{return(fl);}
    }
    //*******************************************************************************************
    string NUM(double number,int n){
      return(
    DoubleToStr(number,n));
    }
    //--------------------------------------------------------------------
    int IsHedge(int Magic,string sym){//-1 error,1 yes,0 no//هل توجد صفقات باي وسل مفتوحة
      
    int i;
      
    bool buy=false,sell=false;
      
      for(
    i=0;i<OrdersTotal();i++){
        if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false){RefreshRates();return(-1);}
        if((
    OrderType()==OP_BUY || OrderType()==OP_SELL) && ((OrderMagicNumber()==Magic || Magic==-1) && OrderSymbol()==sym)){
          if(
    OrderType()==OP_BUY ){buy =true;}
          if(
    OrderType()==OP_SELL){sell=true;}
        }
        if(
    buy && sell)return 1;
      }
      return(
    0);
    }
    //--------------------------------------------------------------------
    int IsMarOpen(int Magic,string sym,string dir){//-1=err,0=not open,1=open
      
    int i,n=0;
      
      if(
    sym=="" || sym==NULL)return -1;
      if(
    dir=="" || dir==NULL)return -1;
      if(
    dir!="B" && dir!="S")return -1;
      
      for(
    i=0;i<OrdersTotal();i++){
        if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false){RefreshRates();return(-1);}
        if((
    OrderMagicNumber()==Magic || Magic==-1) && OrderSymbol()==sym){
          if(
    dir=="B" && OrderType()==OP_BUY ){n++;}
          if(
    dir=="S" && OrderType()==OP_SELL){n++;}
        }
        if(
    n>=2)return 1;
      }
      
      return(
    0);
    }
    //--------------------------------------------------------------------
    int CanSend(int Magic,string sym,string dir){//-1=err,0=no ,1=yes , 2= wait timeout
      
    int n;
      
    n=IsHedge(Magic,sym);
      if(
    n==-1){return -1;}//error
      
    if(n== 1){return  0;}// not copy
      
      
    n=IsMarOpen(Magic,sym,dir);
      if(
    n==-1){return -1;}//error
      
    if(n== 1){return  1;}//copy now
      
      
    return 2;//copy but wait for time out
    }
    //-------------------------------------------------------------------- 
    TradesCopier v3.mq4
    كود PHP:
    #property copyright "Copyright 24/02/2016, remon78eg"
    #property version   "3.00"
    #property strict
    #include "ReadWrite.mqh"
    #include "Trades.mqh"
    #include <stderror.mqh> 
    #include <stdlib.mqh> 
    enum e_TRADE_TYPE{
     
    TYPE_COPY_NON=-1,// اختار اتجاه النسخ
     
    TYPE_COPY_SRC=0// نسخ الصفقات من هنا (مرسل)
     
    TYPE_COPY_TRG=1,//  لصق الصفقات هنا (ماجيك جديد)(مستقبل)
    };
     
    input int    msSleep=100;//اقل زمن لفحص الصفقات بالميلي ثانيه
    input string SHARED_ID="COPIER-V3-MAGIC=111";
    input e_TRADE_TYPE EXPERT_TYPE=TYPE_COPY_NON;//اتجاه النسخ
    input int MAGIC=0;//Magic  , (-1 = All Trades)
    input bool DEALS_SOUND=true;
    input double LOT_RATIO=1;//LOT RATIO - رقم يضرب في اللوت قبل فتح الصفقة
    input bool INVERT=false;//INVERT Buy<->Sell- عكس الصفقات
    input bool HEDGE_NOT_COPY=false;//لا تنسخ الهيدج
    input int  HEDGE_NOT_COPY_DELAY_SEC=5;//زمن تأخير نسخ الهيدج بالثواني
    int OnInit(){
      if(!
    IsDllsAllowed()){MessageBox("Dll Not Allowed!!","Will Exit!!");return 1;}
      if(
    EXPERT_TYPE==TYPE_COPY_NON){MessageBox("اختار اتجاه النسخ!!","Will Exit!!");return 1;}
      if(
    EXPERT_TYPE==TYPE_COPY_TRG && MAGIC==0){MessageBox("قم بتغيير رقم الماجيك نمبر لرقم فريد!!","Will Exit!!");return 1;}
      
      
    EventSetMillisecondTimer(msSleep);
      while(
    ClearJunkData(0,true)){}//Empty Memory if not need it anymore
      
    return INIT_SUCCEEDED;
    }
    void OnDeinit(const int reason){
       
    EventKillTimer();
       while(
    ClearJunkData(0,true)){}//Empty Memory if not need it anymore
    }
    void OnTimer(){
      
    int n;
      
    string name,val,str;
      
    STR_DEALS_COPY Trades[];
      
      static 
    bool imin=false;
      if(
    imin)return;
      
    imin=true;
      
      if(
    EXPERT_TYPE==TYPE_COPY_SRC){SendAllTrades(MAGIC,HEDGE_NOT_COPY,HEDGE_NOT_COPY_DELAY_SEC);}
      if(
    EXPERT_TYPE==TYPE_COPY_TRG){
        
    n=ReadAllTrades(Trades);
        if(
    n>=0){
          
    OpenTheTrades(MAGIC,Trades,LOT_RATIO,INVERT);
          
    CloseTheTrades(MAGIC,Trades);
        }
      }
      
      
    imin=false;
    }
    void OnTick(){
      
    OnTimer();

    الملفات المرفقة الملفات المرفقة

  15. #75
    الصورة الرمزية أبو نـاصر
    أبو نـاصر غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jun 2013
    الإقامة
    السعودية
    المشاركات
    3,190

    افتراضي

    الله ينور عليك استاذ ريمون

    شغل مرتب

صفحة 5 من 9 الأولىالأولى 123456789 الأخيرةالأخيرة

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