صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 18
  1. #1
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي شرح التعامل مع الملفات بإستخدام لغة MQL4

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

    بداية عند إستخدام الدوال في لغة MQL4 للتعامل مع الملفات فلا يمكن هذه الدوال أن تتعامل إلا مع الملفات التي بداخل فولدر Data Folder الخاص بالميتاتريدر داخل ملف Files
    أو في المسار الذي قمت بتنصيب الميتاتريدر فيه أيضا داخل ملف Files

    في البداية قبل القراءة أو الكتابة في الملفات يجب أن نقوم بفتح الملف ونستخدم الداله FileOpen وتعود برقم معين يستخدم لاحقا للتعامل مع البيانات داخل هذا الملف

    كود PHP:
       int  FileOpen
       
    string  file_name,           // File name 
       
    int     open_flags,          // Combination of flags 
       
    short   delimiter=';',       // Delimiter 
       
    uint    codepage=CP_ACP      // Code page 
       
    ); 
    file_name هو إسم الملف الذي تريد فتحه في حال كان الملف غير موجود فسوف تقوم الداله بعمل ملف جديد بهذا الإسم
    open_flags نوع العملية للملف الذي ستقوم بفتحه ( مثلا الملف للقراءة أو الكتابه أو هل الملف نصي أو أكسل .. إلخ )
    delimiter الحرف الذي سيستخدم للفصل بين القيم سواء في الملف النصي أو ملف الأكسل ( مثلا لو تريد وضع كل قيمة في عمود جديد في ملف الأكسل فيجب أن تحدد ما هو الفاصل الذي ستستخدمه )
    codepage كود الترميز عند تحويل النص إلى حروف ( لن نستخدم هذا الخيار فسوف نجعله الخيار الإفتراضي

    مثال عملي
    سوف أقوم بفتح ملف من نوع تكست ( ملف نصي ) وسوف أجعله للقراءة والحرف الفاصل بين الأسطر ستكون ( , )
    كود PHP:
    int file_handle=FileOpen("My File"+".txt",FILE_TXT|FILE_READ,','); 
    بعد فتح الملف الذي نريده

    1- قراءة الملفات

    في البداية سوف نضع شرط هل تم فتح الملف بشكل صحيح أم لأ
    كود PHP:
    if(file_handle!=INVALID_HANDLE
    ثم سنستخدم الداله FileIsEnding للتأكد من قراءة جميع القيم في الملف
    الدالة FileIsEnding تعود بالقيمه true إذا وصلت القراءة لنهاية الملف والعكس تعود بالقيمة false
    كود PHP:
     while(!FileIsEnding(file_handle)) 
    قراءة القيم في الملف
    يوجد أكثر من دالة لقراءة القيم في الملف أهم جزء والذي سأقوم بشرحه هو

    قراءة النص FileReadString

    هذه الدالة سوف تقوم بقراءة النص داخل الملف .
    إذا كان الملف من نوع bin-file فيجب أن يتم تحديد عدد الحروف التي يتم قرائتها, إذا كان الملف Text فلا داعي لتحديد عدد الحروف وسوف يقرأ كل سطر على حده, إذا كان الملف أكسل فسوف يقرأ حتى الحرف الفاصل الذي تم تحديده عند فتح الملف .
    مثال
    كود PHP:
    string line=FileReadString(file_handle); 
    2- الكتابة في الملفات

    أولا يجب أن نقوم بإضافة خيار الكتابة عند فتح الملف بإستخدام الداله FileOpen
    كود PHP:
    int file_handle=FileOpen("My File"+".txt",FILE_TXT|FILE_READ|FILE_WRITE,','); 
    ثم سنستخدم الدالة FileWrite للكتابة في ملف معين
    مثال
    كود PHP:
    FileWrite(file_handle,"this is first line\n"+"this is second line"); 
    ملحوظه :
    عند فتح ملف سابق كان به بيانات سابقه وتريد الكتابة أسفل آخر بيانات موجوده سابقا فقم بقرائتها أولا ثم الكتابة لكن إذا قمت بالكتابة مباشرة فسوف يبدأ في الكتابة من أول الملف بالتالي سيحذف البيانات القديمه

    إغلاق الملف و حفظ البيانات التي تم كتابتها :

    حتى يتم حفظ البيانات بشكل كامل في الملف يمكن ذلك بطريقتين
    الطريقة الأولى إغلاق الملف بإستخدام الداله FileClose
    كود PHP:
    FileClose(file_handle); 
    الطريقه الثانيه إستخدام الداله FileFlush حتى يجبر الداتا المتبقيه في الذاكره على الكتابه في الفايل
    كود PHP:
    FileWrite(file_handle,"this is first line\n"+"this is second line");
        
    FileFlush(file_handle); 
    أخيرا سيكون الكود بشكل كامل هو
    كود PHP:
    void OnStart()
      {   
       
    int file_handle=FileOpen("My File"+".txt",FILE_TXT|FILE_READ|FILE_WRITE,',');
       
       if(
    file_handle!=INVALID_HANDLE)
       {
        while(!
    FileIsEnding(file_handle)) 
        { 
         
    string line=FileReadString(file_handle);  
         Print(
    line);
        }
       }
       else Print(
    "Error Open File "+GetLastError()); 
       
        
       
    FileWrite(file_handle,"this is first line\n"+"this is second line");
       
    FileClose(file_handle);
    //---
      

    القراءة من ملف أكسل

    كمثال لو أريد قراءة بيانات كل صف وعمود في ملف أكسل وحفظها في مصفوفه
    أولا سأقوم بفتح ملف الأكسل
    كود PHP:
    int file_handle=FileOpen("My File"+".csv",FILE_CSV|FILE_READ|FILE_WRITE,','); 
    ثم دالة قراءة البيانات
    كود PHP:
     while(!FileIsEnding(file_handle)) 
        { 
         
    int size=ArraySize(Row);
         
    ArrayResize(Row,size+1);
         
    string Row[size]=FileReadString(file_handle);  
         Print(
    Row[size]);
        } 
    الكتابة في ملف أكسل

    عند الكتابة في ملف الأكسل فيجب أن نستخدم الفاصل الذي قمنا بتحديده عند فتح الملف بإستخدام FileOpen حتى نقوم بتقسيم الداتا في كل عمود
    مثال
    كود PHP:
    FileWrite(file_handle,"Second Column","Second Column","Third Column","Fourth Column","Fifth Column"); 
    ثم لنفرض أنك تريد الإنتقال للصف التاي فسوف تستخدم FileWrite مره أخرى وهكذا
    أو يمكنك وضعها داخل حلقه
    مثال
    كود PHP:
     for(int i=1;i<=10;i++)
       { 
        
    FileWrite(file_handle,"Second Column","Second Column","Third Column","Fourth Column","Fifth Column");
       } 
    أخيرا في حال وجود أي تسؤال يخص هذه الدالة فأرجو إضافته في الموضوع وسوف أشرحه بالتفصيل

  2. #2
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    مثال عملي لإسكربت يقوم بكتابة بيانات الزوج ( الهاي, اللو, الإفتتاح, الإغلاق ) في ملف أكسل
    أولا سنقوم بعمل الملف الجديد
    كود PHP:
     int file_handle=FileOpen("Record Candle Data"+Symbol()+".csv",FILE_CSV|FILE_WRITE,','); 
    بداية سوف أكتب أول سطر وهو عناوين كل عمود حتى يكون واضح
    كود PHP:
    int write=FileWrite(file_handle,"Pair","Time","Open","Close","High","Low"); 
    ثم سنكتب الحلقه للبحث في جميع الشموع
    كود PHP:
      for(int i=1;i<Bars;i++)
       {
        
    string time=TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
        
    string open=DoubleToStr(Open[i],Digits);
        
    string close=DoubleToStr(Close[i],Digits);
        
    string high=DoubleToStr(High[i],Digits);
        
    string low=DoubleToStr(Low[i],Digits);
        
        
    write=FileWrite(file_handle,Symbol(),time,open,close,high,low);
       } 
    وأخيرا إغلاق الملف بعد فتحه
    كود PHP:
    FileClose(file_handle); 
    سيكون شكل الملف

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

الاســـم:	1.png
المشاهدات:	33
الحجـــم:	45.7 كيلوبايت
الرقم:	457339

    مرفق الإسكربت النهائي
    الملفات المرفقة الملفات المرفقة

  3. #3
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    39
    المشاركات
    125

    افتراضي

    مشكور اخ مستر دولار طيب اذا انا بدي ارقام من موشر شلون طريقة اضافة الموشر

  4. #4
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    39
    المشاركات
    125

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    مثال عملي لإسكربت يقوم بكتابة بيانات الزوج ( الهاي, اللو, الإفتتاح, الإغلاق ) في ملف أكسل
    أولا سنقوم بعمل الملف الجديد
    كود PHP:
     int file_handle=FileOpen("Record Candle Data"+Symbol()+".csv",FILE_CSV|FILE_WRITE,','); 
    بداية سوف أكتب أول سطر وهو عناوين كل عمود حتى يكون واضح
    كود PHP:
    int write=FileWrite(file_handle,"Pair","Time","Open","Close","High","Low"); 
    ثم سنكتب الحلقه للبحث في جميع الشموع
    كود PHP:
      for(int i=1;i<Bars;i++)
       {
        
    string time=TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
        
    string open=DoubleToStr(Open[i],Digits);
        
    string close=DoubleToStr(Close[i],Digits);
        
    string high=DoubleToStr(High[i],Digits);
        
    string low=DoubleToStr(Low[i],Digits);
        
        
    write=FileWrite(file_handle,Symbol(),time,open,close,high,low);
       } 
    وأخيرا إغلاق الملف بعد فتحه
    كود PHP:
    FileClose(file_handle); 
    سيكون شكل الملف

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

الاســـم:	1.png
المشاهدات:	33
الحجـــم:	45.7 كيلوبايت
الرقم:	457339

    مرفق الإسكربت النهائي
    مشكور اخ مستر دولار طيب اذا انا بدي ارقام من موشر شلون طريقة اضافة الموشر

  5. #5
    الصورة الرمزية mohamed2012
    mohamed2012 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Feb 2016
    الإقامة
    مصر
    المشاركات
    66

    افتراضي

    شكرا لك استاذ أسامة على موضوعك وكل مواضيعك السابقة تستحق الاهتمام لمن يهتم بالبرمجة

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

    تحياتى وتقديرى

  6. #6
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة sal_moh85 مشاهدة المشاركة
    مشكور اخ مستر دولار طيب اذا انا بدي ارقام من موشر شلون طريقة اضافة الموشر
    نفس الفكره الفرق فقط هو البيانات التي ستحفظها هي التي ستختلف
    مثلا لو تريد حفظ قيم مؤشر RSI لآخر 100 شمعة
    ستكون بالشكل
    كود PHP:
     for(int i=1;i<100;i++)
       {
        
    double rsi=iRSI(Symbol(),0,14,PRICE_CLOSE,i);
        
    string time=TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
        
    write=FileWrite(file_handle,Symbol(),time,rsi);   
       } 

  7. #7
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    39
    المشاركات
    125

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    نفس الفكره الفرق فقط هو البيانات التي ستحفظها هي التي ستختلف
    مثلا لو تريد حفظ قيم مؤشر RSI لآخر 100 شمعة
    ستكون بالشكل
    كود PHP:
     for(int i=1;i<100;i++)
       {
        
    double rsi=iRSI(Symbol(),0,14,PRICE_CLOSE,i);
        
    string time=TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
        
    write=FileWrite(file_handle,Symbol(),time,rsi);   
       } 
    مشكور على رد طيب اذا كان موشر خارجي منستعل اداةiCustom

    for(int i=1;i<100;i++)
    {
    double rsi= iCustom(Symbol(),0,14,PRICE_CLOSE,i);
    string time=TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
    write=FileWrite(file_handle,Symbol(),time,rsi);
    }
    هل هاد كود صحيح

  8. #8
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة sal_moh85 مشاهدة المشاركة
    مشكور على رد طيب اذا كان موشر خارجي منستعل اداةiCustom

    for(int i=1;i<100;i++)
    {
    double rsi= iCustom(Symbol(),0,14,PRICE_CLOSE,i);
    string time=TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
    write=FileWrite(file_handle,Symbol(),time,rsi);
    }
    هل هاد كود صحيح
    نعم نفس الفكره لكن طبعا تأكد من إستدعاء الداله iCustom بشكل صحيح ووضع إسم المؤشر بشكل صحيح في الداله iCustom

  9. #9
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    39
    المشاركات
    125

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    نعم نفس الفكره لكن طبعا تأكد من إستدعاء الداله iCustom بشكل صحيح ووضع إسم المؤشر بشكل صحيح في الداله iCustom
    سلام عليكم مستر دولار انا طبقة دالة iCustom بس ما ظهروه الارقام مشكور سلافا اذا بتشوف وين خطاء New folder.zip

  10. #10
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة sal_moh85 مشاهدة المشاركة
    سلام عليكم مستر دولار انا طبقة دالة iCustom بس ما ظهروه الارقام مشكور سلافا اذا بتشوف وين خطاء New folder.zip
    وعليكم السلام ورحمة الله وبركاته
    الخطأ عندك في طريقة إستدعاء المؤشر. هذا المؤشر مثلا لا يعتمد على الbuffers لرسم القيم على الشارت بالتالي لن تستطيع إستدعاءه بهذه الطريقه

  11. #11
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    39
    المشاركات
    125

    افتراضي

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

  12. #12
    الصورة الرمزية FOXYFOX
    FOXYFOX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2013
    الإقامة
    مصر
    المشاركات
    62

    افتراضي

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

  13. #13
    الصورة الرمزية FOREXPROG
    FOREXPROG غير متواجد حالياً موقوف
    تاريخ التسجيل
    Jun 2016
    الإقامة
    مصر
    المشاركات
    23

    افتراضي

    ماهو افضل اكسبيرت حتي وان كان غير مجاني........؟؟؟

  14. #14
    الصورة الرمزية AlmhdeAlmnfe
    AlmhdeAlmnfe غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2016
    الإقامة
    ليبيا
    العمر
    27
    المشاركات
    7

    افتراضي

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

    if (i==hhb)
    b3[i]=High[hhb]+SignalGap*Point;

    if (i==llb)
    b4[i]=Low[llb]-SignalGap*Point;

    b1[i]=High[hhb];//+SignalGap*Point;
    b2[i]=Low[llb];//-SignalGap*Point;

    }
    return(0);
    }

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

  15. #15
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة AlmhdeAlmnfe مشاهدة المشاركة
    السلام عليكم اخواني
    عندي مؤشر وأريد اضافة منبه عليه , لكن لا أعرف لقلة خبرتي في هذا المجال

    if (i==hhb)
    b3[i]=High[hhb]+SignalGap*Point;

    if (i==llb)
    b4[i]=Low[llb]-SignalGap*Point;

    b1[i]=High[hhb];//+SignalGap*Point;
    b2[i]=Low[llb];//-SignalGap*Point;

    }
    return(0);
    }

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

صفحة 1 من 2 12 الأخيرةالأخيرة

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