رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة mostafa400
ممكن توضيح اكثر بكتابة الكود انا عندى الإكسيبرت الفرعى فيه دالة لمعرفة البروفت وليكن اسمه ProfitCode كود:
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
MyOrdersProfit();
//----
return(0);
}
double MyOrdersProfit()
{
double c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c=c+OrderProfit()+OrderCommission()+OrderSwap();
}
}
return(c);
}
//+------------------------------------------------------------------+
وهذا الإكسيبرت الأساسى كيف اكتب الكود لإستدعاء البروفت من الفرعى وليكن اسمه GetProfit كود:
#property link ""
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double Profit;
Profit=MyOrdersProfit(); //
SetLabel("z10",DoubleToStr(Profit,2)+" ",1,386,"Arial",12,1,Red);
return(0);
}
void SetLabel(string name,string txt,int x,int y,string font,int size,int cor,color clr)
{
int idx=0;
if(ObjectFind(name) == -1)
{
ObjectCreate(name, OBJ_LABEL, idx, 0, 0);
ObjectSetText(name, txt, size, font, clr);
ObjectSet(name, OBJPROP_XDISTANCE, x);
ObjectSet(name, OBJPROP_YDISTANCE, y);
ObjectSet(name, OBJPROP_CORNER, cor);
ObjectSet(name, OBJPROP_WIDTH,2);
}
else
{
ObjectSet(name, OBJPROP_XDISTANCE, x);
ObjectSet(name, OBJPROP_YDISTANCE, y);
ObjectSetText(name, txt, size, font, clr);
ObjectSet(name, OBJPROP_CORNER, cor);
ObjectSet(name, OBJPROP_WIDTH,2);
}
}
معلش عشان انا ماقدرتش افهم - والكود سوف يسهل فهمها - ولك جزيل الشكر
سيكون هذا الإكسبرت النهائي
كود PHP:
#property link ""
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double Profit;
Profit=MyOrdersProfit(); //
SetLabel("z10",DoubleToStr(Profit,2)+" ",1,386,"Arial",12,1,Red);
return(0);
}
void SetLabel(string name,string txt,int x,int y,string font,int size,int cor,color clr)
{
int idx=0;
if(ObjectFind(name) == -1)
{
ObjectCreate(name, OBJ_LABEL, idx, 0, 0);
ObjectSetText(name, txt, size, font, clr);
ObjectSet(name, OBJPROP_XDISTANCE, x);
ObjectSet(name, OBJPROP_YDISTANCE, y);
ObjectSet(name, OBJPROP_CORNER, cor);
ObjectSet(name, OBJPROP_WIDTH,2);
}
else
{
ObjectSet(name, OBJPROP_XDISTANCE, x);
ObjectSet(name, OBJPROP_YDISTANCE, y);
ObjectSetText(name, txt, size, font, clr);
ObjectSet(name, OBJPROP_CORNER, cor);
ObjectSet(name, OBJPROP_WIDTH,2);
}
}
double MyOrdersProfit()
{
double c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c=c+OrderProfit()+OrderCommission()+OrderSwap();
}
}
return(c);
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة fxsmartsniper
الشكر لك
لم تنسي هذه المشاركة مستر دولار
لا يوجد أي سبب يمنع عمله فقط تأكد أن الشارت لايف والسعر يتحرك حتى يعمل الإكسبرت
إذا ظل الخطأ موجود إستخدم الداله GetLastError بعد كل أمر فتح صفقه لطباعة الخطأ
الأخطاء عند التجربه لايف تكون موجوده في خانة Experts
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
لا زلت اتعلم مستر دولار
ارجو اضافة الكود لمعرفة الخطا
كل شيء تمام بالسيرفر وبشارت الدقيقة وكلة تمام
وبتجربة اكسبرت اخر يعمل علي الرينكو
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة fxsmartsniper
لا زلت اتعلم مستر دولار
ارجو اضافة الكود لمعرفة الخطا
كل شيء تمام بالسيرفر وبشارت الدقيقة وكلة تمام
وبتجربة اكسبرت اخر يعمل علي الرينكو
مرفق الإكسبرت
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة mostafa400
ما أقصده هو كيف يكون لدينا 2 اكسيبرت ونستدعى الدالة MyOrdersProfit فقط من الإكسيبرت الفرعى فى الإكسيبرت الأساسى دون ان نكتب اكوادها كاملة فى الاكسيبرت الأساسى
يعنى انا عندى 10 دوال عايز اكتبهم فى اكسيبرت منفصل واستدعيهم فى حال توافر شروط معينة بحيث لا اجعل الاكسيبرت الأساسى حجمه كبير .
في هذه الحاله لا تستخدم إكسبرت لكن يمكنك إستخدام ملف include تضع به الدوال التي تريدها ثم تقوم بإستدعاء الملف في أول الإكسبرت بإسمه
مثل
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
شباب في مشكلة في هذا الاكسبيرت أنه بعدما يتحقق هدف الصفقة يعاود الدخول مرة أخرة على نفس الشمعة وهذا خطر لأنه تكون تحركت الشمعة ولا أريده أن يدخل مرة اخرى على نفس الشمعة
أرجو المساعدة وفقكم الله
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Mr. Nothing
شباب في مشكلة في هذا الاكسبيرت أنه بعدما يتحقق هدف الصفقة يعاود الدخول مرة أخرة على نفس الشمعة وهذا خطر لأنه تكون تحركت الشمعة ولا أريده أن يدخل مرة اخرى على نفس الشمعة
أرجو المساعدة وفقكم الله
هل إضافة هذا الكود يحل المشكلة ؟؟
كود:
static datetime tmp;
if (tmp!= Time[0]) {
tmp = Time[0];
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
الآن النسخة الاخيرة بالمرفقات
والتعديل المطلوب هو :
الاكسبيرت حاليا يفتح نوع واحد من العقود حسب اختيارنا للمخرج
كود PHP:
USE_BUY_ONLY = true/false
الآن أريد أن يلغى هذا الشرط وأريد ان يفتح كل العقود معا بيع او شراء لافرق في معاملة الاكسبيرت لهما سواء في الأرباح أو الخسارة و.... إلخ
وشكرا جزيلا
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Mr. Nothing
الآن النسخة الاخيرة بالمرفقات
والتعديل المطلوب هو :
الاكسبيرت حاليا يفتح نوع واحد من العقود حسب اختيارنا للمخرج
كود PHP:
USE_BUY_ONLY = true/false
الآن أريد أن يلغى هذا الشرط وأريد ان يفتح كل العقود معا بيع او شراء لافرق في معاملة الاكسبيرت لهما سواء في الأرباح أو الخسارة و.... إلخ
وشكرا جزيلا
قمت بإلغاء الشرط لك راجع كود الإكسبرت