google
twitter
facebook
twitter
google
forex

النتائج 1 إلى 4 من 4

الموضوع: كيفية تعامل Mql4 مع الملفات برمجيا

  1. #1
    تاريخ التسجيل
    Nov 2011
    المشاركات
    65

    افتراضي كيفية تعامل Mql4 مع الملفات برمجيا

    بسم الله الرحمن الرحيم

    السلام عليكم ورحمة الله وبركاته

    نظرا لأهمية الموضوع برمجيا فقد فضلت أن أكتبه في موضوع مستقل تماما عن دورة المؤشرات ودورة الاكسبيرتات .

    في هذا الموضوع سوف نتعلم كيفية إنشاء الملفات النصية بأنواعها أو الملفات الثنائية لتخزين وقراءة المعلومات .

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

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


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

    بشكل عام يطلق على الملفات غير النصية على أنها ملفات ثنائية والتي لا يمكن قرائتها من برنامج المفكرة وتظهر لك حروف غريبة غير مفهومة .

    تقنية التعامل مع الملفات من خلال MQL4 :

    - يجب أولا فتح الملف أو إنشائه إذا لم يكن موجودا على القرص .

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

    - نستطيع قراءة محتويات الملف وتعديلها أو إضافة معلومات جديدة .

    - نستطيع القراءة من الملف تسلسليا أي من أول الملف إلى آخره .

    - أيضا نستطيع القراءة من الملفات من الموقع الذي نريده وذلك بتغيير مؤشر الملف البوينتر .

    - نستطيع حذف الملف من القرص بعد الانتهاء إذا أردنا ذلك .

    - يمكن لهذه الملفات أن نتعامل معها من برامج أخرى مثل الإكسيل أو المفكرة .

    - جميع الملفات يجب أن تكون مخزنة في مجلد برنامج الميتاتريدر نفسه في المجلد experts\files

    - لا يمكن لبرنامج الميتاتريدر التعامل مع ملفات لا تكون مخزنة في هذا المجلد .

    ما هي الأشياء والأفكار التي يمكن الاستفادة من هذا التقنية :

    الأفكار والفوائد كثيرة جدا جدا فمثلا :

    - يمكنك إنشاء ملف نصي عبارة عن تقرير عن حالة العملة الحالية وكتابة الأسعار الحالية وجميع المعلومات التي تريدها في تقرير واحد ويتم تحديثه آليا .

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

    - يمكنك جعل الميتاتريدر يصدر معلومات الأسعار بشكل لحظي والاستفادة منها في برامج أخرى .

    - يمكنك إنشاء تقارير HTML ونشرها على موقعك بشكل لحظي وتحتوي هذه التقارير مثلا على الدعوم والمقاومات الحالية ولمختلف الفريمات .

    بصراحة الأفكار لا تنتهي أبدا والإبداع مطلوب في هذه التقنية للحصول على أمور لا تصدق .

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


    حاليا سوف نشرح الوظائف البرمجية التي لها علاقة بالملفات ومنها تستطيع عمل كل ما يحلو لك برمجيا ويفتح لك آفاقا جديدة في البرمجة والتحليل الفني .

    الوظائف الخاصة بالملفات مرتبة أبجديا :

    FileClose

    تقوم هذه الوظيفة بإقفال الملف المفتوح وذلك بأن نعطيها رقم الملف والذي حصلنا عليه عندما فتحنا الملف .

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

    من هذا المقبض نقوم بجميع الفعاليات على الملف من قراءة وكتابة وتعديل وحذف وخلافه .


    FileDelete

    تقوم هذه الوظيفة بحذف ملف من خلال اسمه المعطى لهذه الوظيفة .

    ويجب الانتباه إلى أن الملفات التي ينشئها الميتاتريدر تكون حصرا ضمن المجلد files الموجود ضمن المجلد experts وذلك لدواعي أمنية .


    FileFlush

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

    لأن نظام التشغيل بشكل عام يتعامل مع الملفات في ذاكرة الرام لأنها أسرع من القرص الصلب .

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

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


    FileIsEnding

    تقوم هذه الوظيفة بإرجاع قيمتين true & false وهي تفحص هل وصل الملف إلى نهايته أم لا .

    لأننا عندما نقرأ من ملف نصي أو ثنائي فإن هناك ما يسمى البوينتر ( المؤشر ) وهو عبارة عن رقم يمثل عدد البايتات التي قمنا بقرائتها فعليا من الملف .

    ويزداد هذا الرقم أو المؤشر كلما قرأنا من الملف .

    وعند وصول المؤشر إلى آخر بايت تصبح قيمة الوظيفة FileIsEnding صح .

    بينما تكون قيمتها خطأ عندما يكون المؤشر في أي موضع آخر غير نهاية الملف .

    نستفيد من هذه الوظيفة للتأكد أننا قد قرأنا كامل الملف وأننا وصلنا لنهايته .



    FileIsLineEnding

    نفس عمل الوظيفة السابقة ولكنها للملفات النصية فقط والتي تقرأ سطرا سطرا وليس كبايتات ثنائية .


    FileOpen

    تقوم هذه الوظيفة بفتح الملف باسم محدد وتحديد نوعه هل هو ملف نصي أم ثنائي .

    وهل الملف للقراءة أو للكتابة أو للاثنين معا .

    في حال لم يكن الملف موجودا فإن هذه الوظيفة تنشئ ملفا جديدا بنفس الاسم .

  2. #2
    تاريخ التسجيل
    Nov 2011
    المشاركات
    65

    افتراضي


    FileWriteArray


    تقوم الوظيفة الأولى بكتابة محتويات مصفوفة ما إلى الملف المفتوح والذي يجب أن يكون الملف المفتوح من النوع
    الثنائي وليس ملفا نصيا .

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

    أما الوظيفة الثانية فهي لاسترجاع محتويات هذه المصفوفة مرة أخرى من الملف الثنائي عند إعادة تشغيل البرنامج مرة أخرى .


    FileWriteDouble
    FileReadDouble


    تقوم الوظيفة الأولى بكتابة قيمة رقمية من النوع double إلى الملف الثنائي .

    أما الوظيفة الثانية فهي تقوم بقراءة القيمة الرقمية من الملف الثنائي .

    FileWriteInteger
    FileReadInteger


    تقوم الوظيفة الأولى بكتابة قيمة رقمية من النوع integer إلى الملف الثنائي .

    أما الوظيفة الثانية فهي تقوم بقراءة القيمة الرقمية من الملف الثنائي .


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


    FileReadNumber

    تقوم هذه الوظيفة بقراءة رقم ما مكتوب في ملف نصي وليس رقما بالصيغة الثنائية .

    FileWriteString
    FileReadString


    تقوم الوظيفة الأولى بكتابة قيمة نصية من النوع string إلى الملف الثنائي .

    أما الوظيفة الثانية فهي تقوم بقراءة القيمة النصية من الملف الثنائي .

    FileSeek
    تقوم هذه الوظيفة بتغيير موقع البوينتر للملف المفتوح .
    يجب فهم طريقة عمل البوينتر بشكل جيد .

    فعند فتح الملف يكون البوينتر عند البايت رقم 1 للملف المفتوح .
    عند قراءة أي قيمة نصية أو رقمية من الملف فإن البوينتر يتحرك بشكل آلي إلى آخر بايت تمت قرائته .

    يمكن في أي وقت تغيير موقع البوينتر إلى المكان الذي نريده ويجب التعامل مع هذه الميزة بحذر لأنها قد تؤدي إلى قراءة أو كتابة المعلومات بشكل خاطيء على الملف .


    FileSize

    تقوم هذه الوظيفة بإعادة حجم الملف الحالي بالبايت .


    FileTell

    تقوم هذه الوظيفة بإخبارنا عن موقع البوينتر للملف الحالي وهي تعمل عكس الوظيفة FileSeek .


    FileWrite

    تقوم هذه الوظيفة بكتابة معلومات نصية إلى الملف النصي فقط .


    سوف نتابع مع الأمثلة التوضيحية إن شاء الله .

  3. #3
    تاريخ التسجيل
    Nov 2011
    المشاركات
    65

    افتراضي

    نكمل هذا الدرس الهام مع بعض الأمثلة البسيطة لتطبيق المفاهيم السابقة التي تعلمناها سابقا .

    مثال عن فتح ملف نصي للقراءة فقط :

    في هذه الحالة يجب أن يكون الملف موجودا على القرص .

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

    كود PHP:
    كود PHP:
    int handle;
      
    handle=FileOpen("data.csv",FILE_CSV|FILE_READ,';');
      if(
    handle<1)
        {
         Print(
    "File not found, the last error is "GetLastError());
         return(
    false
    ;
    }
    .....




    لاحظوا الوظيفة FileOpen تحتاج ثلاثة متحولات وهي:

    - المتحول الأول اسم الملف الذي نريد فتحه ونحن أحرار في اختيار الاسم والامتداد الذي نريده ولسنا مقيدين بشروط خاصة .

    - المتحول الثاني هو عبارة عن خصائص الملف المفتوح هل هو للقراءة فقط أو للقراءة والكتابة أو للكتابة فقط .

    ونحدد ذلك بواسطة المتحولات FILE_READ - FILE_WRIT . والدمج بينهما عن طريق الحرف |

    من نفس هذا المتحول نستطيع تحديد نوع الملف المفتوح هل هو نصي أم ثنائي .

    الملف النصي نعرفه على أنه FILE_CSV والثنائي FILE_BIN ولا يمكن الدمج بين الحالتين أي أننا يجب أن نختار حالة واحدة فقط .

    في مثالنا السابق حددنا نوع الملف على أنه نصي وأنه للقراءة فقط .

    - المتحول الثالث هو الفاصل الإفتراضي بين المعلومات المكتوبة على الملف وهو هنا الحرف ؛ الفاصلة المنقوطة .

    يمكن تحديد أي حرف آخر ولكن يفضل تركه كما هو لأنه قياسي بالنسبة للبرامج الأخرى مثل الاكسيل مثلا .


    مثال عن طريقة كتابة معلومات نصية إلى الملف النصي :

    في هذا المثال سوف نتعرف على طريقة كتابة بعض المعلومات التي نريدها إلى ملف نصي وذلك بواسطة الوظيفة FileWrite

    كود PHP:
    كود PHP:
    int handle;
    handle=FileOpen("data.csv",FILE_CSV|FILE_WRITE,';');
    FileWrite(handle,Time[0],Close[0],Open[0],High[0],Low[0]);
    FileClose(handle); 





    في المثال السابق فتحنا الملف النصي data.csv للكتابة فقط . وفي هذه الحالة في عدم وجود الملف مسبقا فإن هذه الوظيفة سوف تنشأه دائما .

    أي أنها سوف تحذف الملف القديم وتنشيء ملفا جديدا كل مرة تنفذ فيها هذه الوظيفة .

    بعد ذلك استخدمنا الوظيفة FileWrite لكتابة سطر كامل من المعلومات وهي هنا معلومات الشمعة الأخيرة .

    إذا نفذنا الكود السابق وفتحنا الملف data.csv فإننا سنجد فيه سطرا واحدا فقط يحتوي على معلومات الشمعة الأخيرة يفصل بين
    كل معلومة وأخرى الحرف ؛ .

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

    كود PHP:
    كود PHP:
     int handle;
    handle=FileOpen("data.csv",FILE_CSV|FILE_WRITE,';');
    for(
    int i =0;i<=Bars;i++)
    {
      
    FileWrite(handle,Time[i],Close[i],Open[i],High[i],Low[i]);
    }
    FileClose(handle); 
    يجب الانتباه إلى أن التعامل مع الملفات الكبيرة ككتابة يجب أن تكون من خلال اسكريبت وليس من خلال مؤشر .

    لأنه من غير المعقول كتابة معلومات شموع الشارت كله إلى ملف نصي في كل مرة يتحرك بها السعر

  4. #4
    تاريخ التسجيل
    Mar 2016
    المشاركات
    213

    افتراضي

    مرحبا اعضاء المنتدى الأعزاء انا اتداول مع شركة رائعة اسمها شركة افكس بروتريد fxprotrade
    شركة رائعة وهذا رابط موقعهم الرسمي www.fxprotrade.com


    وهذا رابط لاحد المحللين يشرح عن الشركة
    https://www.youtube.com/watch?v=mQm2eG524B4

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •