1 مرفق
*-* نقل البيانات بين الميتاتريدر والإكسل *-* مكتبة قوية جدا
في البداية للإيضاح :
1 - يجب تفعيل Allow Dll imports من خصائص الإكسبيرتات .
2 - يتم وضع الملف excellink.dll في experts\libraries (في المرفقات)
3 - نقوم بإنشاء ملف إيكسل .xls وده بيكون في أي مكان وبأي إسم ( مش مهم لإننا بنقدر نختار مساره من الإكسبيرت)
الدوال المستخدمة : ويجب وضع هذا الكود في بداية الإكسبيرت لتعريف الدوال قبل إستخدامها
كود PHP:
#import "excellink.dll"
int ExcelStart(string,int);
string ExcelVersion();
int ExcelPutString(int,int,int,string);
int ExcelPutValue(int,int,int,double);
int ExcelFormatCellColor(int,int,int,int,int);
int ExcelFormatCellFontSize(int,int,int,int);
int ExcelFormatCellFont(int,int,int,int);
double ExcelGetValue(int,int,int);
string ExcelGetString(int,int,int);
int ExcelSaveFile(string);
int ExcelSheetRename(int, string);
int ExcelPutCalc(int,int,int,string);
string ExcelGetCalc(int,int,int,string);
int ExcelEnd();
int ExcelClose();
int ExcelFreeString();
string ExcelCell(int,int);
int ExcelUnixTime();
#import
شرح إستخدام كل دالة :
الدالة الأولى
كود PHP:
int ExcelStart(string,int);
وهذه الدالة تقوم بفتح ملف الإكسل ويكون في الخانة الأولى مسار الملف
والخانة الثانية :
0 لفتح الإكسل على الوضع الإفتراضي حسب أخر مرة تم إغلاقه Default Mode
أو 1 وهو يقوم بفتح الإكسل في وضع Minimized Mode وهو الأفضل والأسرع
بالشكل ده
كود PHP:
ExcelStart("D:\\AL Trade 4\\MySample2.xls",1);
الدالة الثانية
كود PHP:
string ExcelVersion();
وهي تعود بإصدار ملف الـ dll المستخدم ( و وظيفتها ليست مهمة إلا في حالة صدور إصدار جديد وإحنا عايزين مثلا نعرف إصدارنا الحالي )
الدالة الثالثة
كود PHP:
int ExcelPutString(int,int,int,string);
وهذه الدالة تستخدم في إرسال متغير نصي من الميتاتريدر إلى ملف الإكسل
والخانة الأولى يوضع فيها رقم الشيت المستخدم في الإكسل وهو سيكون 1
الخانة الثانية يوضع فيها رقم الصف الأفقي row
الخانة الثالثة يوضع فيها رقم العمود الرأسي column
الخانة الرابعة يوضع فيها الكلمة أو النص المرسل لملف الإكسل
بالشكل ده:
حيث sheet=1 row=1 column=1 أي أول خانة في الإكسل على الشمال فوق
كود PHP:
ExcelPutString(1,1,1,"YousefH say Hi");
الدالة الرابعة
كود PHP:
int ExcelPutValue(int,int,int,double);
وهي نفس الدالة السابقة ولكن تستخدم في إرسال الأرقام سواء صحيحة أو عشرية
الدالة الخامسة
كود PHP:
int ExcelFormatCellColor(int,int,int,int,int);
وهذه الدالة تستخدم لتنسيق لون الخلية الأمامي والخلفي في ملف الإكسل
أول وثاني وثالث خانة هم لـ ( رقم الشيت – رقم الصف – رقم العمود )
الخانة الرابعة يوضع بها اللون الأمامي
الخانة الرابعة يوضع بها اللون الخلفي
بالشكل ده :
كود PHP:
ExcelFormatCellColor(1,1,1,Lime,Red);
الدالة السادسة
كود PHP:
int ExcelFormatCellFontSize(int,int,int,int);
وهذه الدالة تستخدم في تحديد حجم الخط
أول ثلاث خانات ( رقم الشيت – رقم الصف – رقم العمود )
الخانة الرابعة ونضع فيها حجم الخط المطلوب وهو يكون من 1 إلى 100
الدالة السابعة
كود PHP:
int ExcelFormatCellFont(int,int,int,int);
وهذه الدالة تستخدم لتنسيق شكل الخط
أول ثلاث خانات ( رقم الشيت – رقم الصف – رقم العمود )
الخانة الرابعة : ويوضع بها رقم من 0 أو 1 أو 2 أو 4
0 يعني بدون تنسيق
1 يعني خط تقيل Bold
2 يعني خط مائل
4 يعني يوضع تحت الكلمة أو الرقم خط Underline
ملحوظة يمكن وضع رقم 5 مثلا ويكون الناتج 1 +4 يعني Bold+Underline
بالشكل ده
كود PHP:
ExcelFormatCellFont(1,1,1,5);
الدالة الثامنة
كل الدوال السابقة كانت للكتابة على ملف الإكسل
ولكن هذه الدالة للإستدعاء من الإكسل
كود PHP:
double ExcelGetValue(int,int,int);
وهذه الدالة تستخدم في إستدعاء قيمة رقمية من الإكسل من خانة يتم تحديدها عن طريق رقم الشيت – رقم الصف – رقم العمود
الدالة التاسعة
كود PHP:
string ExcelGetString(int,int,int);
وهي مثل الدالة الثامنة ولكن تستدعي متغير نصي عن طريق رقم الشيت – رقم الصف – رقم العمود
الدالة العاشرة
كود PHP:
int ExcelSaveFile(string);
وهذه الدالة توضع في دالة int deinit() وهي تقوم بحفظ التغيرات التي قمنا بها على ملف الإكسل
بالشكل ده
كود PHP:
int deinit() {
ExcelSaveFile("D:\\AL Trade 4\\MySample2.xls");
return(0); }
الدالة الحادية عشر
كود PHP:
int ExcelSheetRename(int, string);
وهذه الدالة تستخدم لتغير إسم الشيت في الإكسل
يعني ده مثلا أمر لتغيير إسم الشيت الأول إلى EURUSD و الشيت الثاني إلى GBPUSD
كود PHP:
ExcelSheetRename(1,"EURUSD");
ExcelSheetRename(2,"GBPUSD");
الدالة الثانية عشر
كود PHP:
int ExcelPutCalc(int,int,int,string);
وهذه الدالة تدعم كل العمليات الحسابية التي يقوم بها الإكسل
بمعنى أنا ممكن أن نقوم بجمع الأرقام الموجودة في الخلايا A1+A2+A3
وسيتم كتابة العملية كمتغير نصي بين علامتي " "
بالشكل ده
ده مثال لوضع ثلاث قيم في الخانات A1 و A2 و A3 ثم عمل متغير نصي Sum في الخلية A4 ثم جمع الثلاث خليات ووضع القيمة في الخلية B4
كود PHP:
ExcelPutValue(1,1,1,1.3050);
ExcelPutValue(1,2,1,1.3080);
ExcelPutValue(1,3,1,1.3120);
ExcelPutString(1,4,1,"Sum:");
ExcelPutCalc(1,4,2,"=a1+a2+a3");
الدالة الثالثة عشر
كود PHP:
string ExcelGetCalc(int,int,int,string);
وهذه الدالة تستخدم لإستدعاء أرقام النواتج الناتجة عن العمليات السابقة التي تمت بواسطة ExcelPutCalc
وهي لابد من إستخدامها وإلا كان الناتج العائد حسب المثال في الدالة السابقة متغير نصي "=a1+a2+a3"
ولابد من تحويها لمتغير double
يعني لو هنستدعي قيمة عملية الجمع الموجودة في الخلية B4 (في المثال السابق )ستكون بالشكل التالي:
كود PHP:
StrToDouble(ExcelGetCalc(1,4,2) ,4);
الدالة الرابعة عشر
وهذه الدالة تستخدم لوقف الإرسال من الميتا إلى الإكسل وتستخدم في دالة deinit
الدالة الخامسة عشر
كود PHP:
int ExcelClose();
وهي تقوم بإغلاق مساحة العمل في الإكسل وتكون أيضا في دالة deinit
ودوال الإغلاق ( الدالة 14 والدالة 15 ) يجب أن يكونوا في دالة deinit بعد أمر الحفظ بالشكل ده
كود PHP:
int deinit() {
ExcelSaveFile("D:\\AL Trade 4\\MySample2.xls");
ExcelEnd();
ExcelClose();
return(0); }
الدالة السادسة عشر
كود PHP:
int ExcelFreeString();
وهذه الدالة تستخدم فقط في حالة الإكسبيرتات التي تقوم بألاف العمليات
وتستخدم هذه الدالة لإفراغ مساحة في الذاكرة عن طريق حذف ما تم إستدعائه سابقا
وهي ليست مهمة لإن بعد إنتهاء فترة العمل وإغلاق الإكسل والمنصة تقوم الذاكرة بإفراغ نفسها أتوماتيكيا
وهذه الدالة تستخدم بعد إستخدام دالة ExcelGetString ودالة ExcelCell
الدالة السابعة عشر
كود PHP:
string ExcelCell(int,int);
وهذه الدالة تستخدم في إستدعاء قيمة من خلية محددة
الخانة الأولى رقم الصف – الخانة الثانية رقم العمود
ويمكن إستخدامها مثلا مع دالة ExcelPutCalc
وده مثال للتطبيق في دالة ExcelPutCalc المشروح سابقا :
كود PHP:
ExcelPutValue(1,1,1,1.3050);
ExcelPutValue(1,2,1,1.3080);
ExcelPutValue(1,3,1,1.3120);
ExcelPutString(1,4,1,"Sum:");
//ExcelPutCalc(1,4,2,"=a1+a2+a3");// بدل هذه الدالة
ExcelPutCalc(1,4,2,"="+ExcelCell(1,1)+"-"+ExcelCell(2,1)+"-"+ExcelCell(3,1));
// قمنا بالتعويض عن كل خلية بمكان برقم الصف العمود حسب تعريفها فوق
الدالة الأخيرة
وهي دالة
كود PHP:
int ExcelUnixTime();
وهذه الدالة تظهر الوقت الحالي وهي شبيه بالدالة TimeCurrent( ) في لغة MQL4
وتعود بالوقت المنقضي بالثانية من سنة 1970 حتى وقت إستدعائها
وهي غير مهمة ولكن لها إستخدام معين وهو حساب سرعة تنفيذ أوامر النقل بين الميتا والإكسل
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
( وبالمناسبة سرعة النقل بين الميتا والإكسل سرعة خرافية )
وبإذن الله في أقرب وقت نقوم بعمل تطبيق عملي على الموضوع
وسأقوم بإذن الله بعمل إكسبيرت لنقل العمليات بين منصتين على نفس الجهاز بإستخدام الإكسل في أقرب وقت
إنتهى الشرح بالتوفيق للجميع
لا تنسونا بدعوة في ظهر الغيب
رد:*-* نقل البيانات بين الميتاتريدر والإكسل *-* مكتبة قوية جدا
مثال توضيحي بسيط
عن كيفية إستدعاء هاي 30 شمعة يومي في زوج USDCHF
كود PHP:
extern int myExcel=0;
extern string filename="D:\\AL Trade 4\\MySample2.xls";
int init() {
myExcel = ExcelStart(filename,1);
if (myExcel>=0) { Print ("I am demostration for ExcelLink version ",
ExcelVersion()," successfully loaded"); }
return(0);
}
int deinit() {
ExcelSaveFile(filename);
ExcelEnd();
return(0); }
int start()
{
if (myExcel>=0) {
ExcelPutString(1,1,1,"USDCHF");
for(int i=1;i<30;i++){
ExcelPutValue(1,i+1,1,iHigh("USDCHF",1440,i)) ;
}
}
return(0);
}
رد:*-* نقل البيانات بين الميتاتريدر والإكسل *-* مكتبة قوية جدا
اقتباس:
المشاركة الأصلية كتبت بواسطة xcv114
مثال توضيحي بسيط
عن كيفية إستدعاء هاي 30 شمعة يومي في زوج USDCHF
كود PHP:
extern int myExcel=0;
extern string filename="D:\\AL Trade 4\\MySample2.xls";
int init() {
myExcel = ExcelStart(filename,1);
if (myExcel>=0) { Print ("I am demostration for ExcelLink version ",
ExcelVersion()," successfully loaded"); }
return(0);
}
int deinit() {
ExcelSaveFile(filename);
ExcelEnd();
return(0); }
int start()
{
if (myExcel>=0) {
ExcelPutString(1,1,1,"USDCHF");
for(int i=1;i<30;i++){
ExcelPutValue(1,i+1,1,iHigh("USDCHF",1440,i)) ;
}
}
return(0);
}
يعطيك الف الف عافيه على هذا المجهود الرائع
رد:*-* نقل البيانات بين الميتاتريدر والإكسل *-* مكتبة قوية جدا
اقتباس:
المشاركة الأصلية كتبت بواسطة Focus
شكرأ أخى يوسف على هذا المجهود الرائع ..وهل بالامكان الأن عمل أكسبيرت بأستراتيجية تعتمد على الاكسيل والحسابات الرقمية بشكل آلى 100%
نعم اخي ممكن