النتائج 1 إلى 15 من 18
- 31-05-2016, 09:58 PM #1
شرح التعامل مع الملفات بإستخدام لغة 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
);
open_flags نوع العملية للملف الذي ستقوم بفتحه ( مثلا الملف للقراءة أو الكتابه أو هل الملف نصي أو أكسل .. إلخ )
delimiter الحرف الذي سيستخدم للفصل بين القيم سواء في الملف النصي أو ملف الأكسل ( مثلا لو تريد وضع كل قيمة في عمود جديد في ملف الأكسل فيجب أن تحدد ما هو الفاصل الذي ستستخدمه )
codepage كود الترميز عند تحويل النص إلى حروف ( لن نستخدم هذا الخيار فسوف نجعله الخيار الإفتراضي
مثال عملي
سوف أقوم بفتح ملف من نوع تكست ( ملف نصي ) وسوف أجعله للقراءة والحرف الفاصل بين الأسطر ستكون ( , )
كود PHP:int file_handle=FileOpen("My File"+".txt",FILE_TXT|FILE_READ,',');
1- قراءة الملفات
في البداية سوف نضع شرط هل تم فتح الملف بشكل صحيح أم لأ
كود PHP:if(file_handle!=INVALID_HANDLE)
الدالة FileIsEnding تعود بالقيمه true إذا وصلت القراءة لنهاية الملف والعكس تعود بالقيمة false
كود PHP:while(!FileIsEnding(file_handle))
يوجد أكثر من دالة لقراءة القيم في الملف أهم جزء والذي سأقوم بشرحه هو
قراءة النص FileReadString
هذه الدالة سوف تقوم بقراءة النص داخل الملف .
إذا كان الملف من نوع bin-file فيجب أن يتم تحديد عدد الحروف التي يتم قرائتها, إذا كان الملف Text فلا داعي لتحديد عدد الحروف وسوف يقرأ كل سطر على حده, إذا كان الملف أكسل فسوف يقرأ حتى الحرف الفاصل الذي تم تحديده عند فتح الملف .
مثال
كود PHP:string line=FileReadString(file_handle);
أولا يجب أن نقوم بإضافة خيار الكتابة عند فتح الملف بإستخدام الداله FileOpen
كود PHP:int file_handle=FileOpen("My File"+".txt",FILE_TXT|FILE_READ|FILE_WRITE,',');
مثال
كود PHP:FileWrite(file_handle,"this is first line\n"+"this is second line");
عند فتح ملف سابق كان به بيانات سابقه وتريد الكتابة أسفل آخر بيانات موجوده سابقا فقم بقرائتها أولا ثم الكتابة لكن إذا قمت بالكتابة مباشرة فسوف يبدأ في الكتابة من أول الملف بالتالي سيحذف البيانات القديمه
إغلاق الملف و حفظ البيانات التي تم كتابتها :
حتى يتم حفظ البيانات بشكل كامل في الملف يمكن ذلك بطريقتين
الطريقة الأولى إغلاق الملف بإستخدام الداله FileClose
كود PHP:FileClose(file_handle);
كود 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");
أو يمكنك وضعها داخل حلقه
مثال
كود PHP:for(int i=1;i<=10;i++)
{
FileWrite(file_handle,"Second Column","Second Column","Third Column","Fourth Column","Fifth Column");
}
- 01-06-2016, 06:04 PM #2
مثال عملي لإسكربت يقوم بكتابة بيانات الزوج ( الهاي, اللو, الإفتتاح, الإغلاق ) في ملف أكسل
أولا سنقوم بعمل الملف الجديد
كود 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);
مرفق الإسكربت النهائي
- 01-06-2016, 06:48 PM #3
مشكور اخ مستر دولار طيب اذا انا بدي ارقام من موشر شلون طريقة اضافة الموشر
- 01-06-2016, 06:49 PM #4
- 01-06-2016, 07:03 PM #5
شكرا لك استاذ أسامة على موضوعك وكل مواضيعك السابقة تستحق الاهتمام لمن يهتم بالبرمجة
هناك أستراتجيات بالفعل تعتمد على ملف اكسيل وهناك أشخاص محترفون فيها لكن كانت مشكلتهم كيف الربط بين الاكسيل والميتا ترادر وأخذ أوامر الشراء والبيع من الملف
تحياتى وتقديرى
- 01-06-2016, 07:26 PM #6
نفس الفكره الفرق فقط هو البيانات التي ستحفظها هي التي ستختلف
مثلا لو تريد حفظ قيم مؤشر 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);
}
- 01-06-2016, 08:11 PM #7
- 01-06-2016, 08:35 PM #8
- 02-06-2016, 10:18 AM #9
سلام عليكم مستر دولار انا طبقة دالة iCustom بس ما ظهروه الارقام مشكور سلافا اذا بتشوف وين خطاء New folder.zip
- 02-06-2016, 02:33 PM #10
- 02-06-2016, 04:02 PM #11
- 18-06-2016, 12:24 PM #12
- 18-06-2016, 02:06 PM #13
ماهو افضل اكسبيرت حتي وان كان غير مجاني........؟؟؟
- 26-06-2016, 12:11 AM #14
السلام عليكم اخواني
عندي مؤشر وأريد اضافة منبه عليه , لكن لا أعرف لقلة خبرتي في هذا المجال
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);
}
الرجاء من لديه خبره في برمجة المؤشرات يساعدني وله جزيل الشكر
وأذا امكن يوضح ايضا طريقة التنبيه بالايميل
السلام عليكم
- 11-07-2016, 07:44 PM #15