السلام عليكم أستاذ دولار
عندي سؤال إحترت ألاقي الحل له .
السؤال :
كيف أعبر بلغه الmql4 , أنه إذا كانت الصفقه السابقه خاسره إفتح صفقه مماثله لها ( بيع أو شراء ) , إلى أن تربح واحده من الصفقات ؟
و أقصى حد للصفقات هي 4 صفقات .
شكرا لك مقدما .
Printable View
السلام عليكم أستاذ دولار
عندي سؤال إحترت ألاقي الحل له .
السؤال :
كيف أعبر بلغه الmql4 , أنه إذا كانت الصفقه السابقه خاسره إفتح صفقه مماثله لها ( بيع أو شراء ) , إلى أن تربح واحده من الصفقات ؟
و أقصى حد للصفقات هي 4 صفقات .
شكرا لك مقدما .
جزاك الله تعالى خيرا استاذى الغالى اسامه
بالفعل اشتغل على صحيح على الباك تست
لكن لما جربتة ديمو وعلى أكثر من حساب فى اكثر من شركة ظهر لى هذه العبارة فى الاخطاء
2016.01.18 07:56:12.772 VIP_V5_2 EURJPY,M2: invalid lots amount for OrderSend function
فهل هذا فيه مشكله كبيرة ؟
السلام عليكم اخي الكريم
جزاك الله الف خير على المساعدة . و جعلها الله في ميزان حسناتك
اذا امكن و رجاء مساعدة
اني احاول ان ابرمج اكسبرت بالخصائص التالية :
أن يقوم الاكسبيرت بفتح صفقتان بيع و شراء فور وضعه على الشارت مع تيك بروفت مخفي . و أن يفتح صفقتان بيع و شراء فور اغلاق احدى الصفقات بتيك البروفيت المخفي بشرط ان لا تكون هنالك صفقة من نفس النوع في نفس السعر او المجال السعري
مثال المجال السعري لصفقة شراء :
فإذا وجدت صفقة شراء و لا توجد صفقة بيع يفتح فقط بيعكود PHP:( OrderOpenPrice (POS BUY) < Ask + Step && OrderOpenPrice (POS BUY) > Ask - Step )
و إذا وجدت صفقة بيع و لا توجد صفقة شراء يفتح فقط شراء
و اغلاق الكل عند نسبة معينة من الايكويتي
الإشكال الذي يواجهني الان هو انني لم اتوصل الى الصيغة البرمجية لكي احقق الشروط عدم فتح نفس نوع الصفقة في المجال السعري
وعليكم السلام ورحمة الله وبركاته
في البداية ستقوم بعمل دالة لمعرفة نوع آخر صفقه والربح للصفقه
مثال
ودالة لمعرفة عدد الصفقات الخاسره المتتاليهكود PHP:double LastOrderInfo(string info)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(info=="Type")return(OrderType());
else if(info=="Profit")return(OrderProfit());
}
}
return(0);
}
ثم ستكون الشروطكود PHP:int TotalLossNumber()
{
int num;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()<0)num++;
else return(num);
}
}
return(num);
}
كود PHP:if(TotalLossNumber()<4&&LastOrderInfo("Profit")<0)
{
if(LastOrderInfo("Type")==OP_BUY)
{
// open new buy
}
else if(LastOrderInfo("Type")==OP_SELL)
{
// open new sell
}
}
المشكله في هذا الشرط
إجعلهكود PHP:if ((!G_timeframe_188 == 0 || G_timeframe_188 == PERIOD_M1 || G_timeframe_188 == PERIOD_M5 || G_timeframe_188 == PERIOD_M15 || G_timeframe_188 == PERIOD_M30 || G_timeframe_188 == PERIOD_H1 ||
G_timeframe_188 == PERIOD_H4 || G_timeframe_188 == PERIOD_D1 || G_timeframe_188 == PERIOD_W1 || G_timeframe_188 == PERIOD_MN1) && f0_30() == 0) {
f0_28("Signal", "Invalid Correlation Time Frame ...", Red, 24, 10, 10, 2);
return;
}
كود PHP:if (!(G_timeframe_188 == 0 || G_timeframe_188 == PERIOD_M1 || G_timeframe_188 == PERIOD_M5 || G_timeframe_188 == PERIOD_M15 || G_timeframe_188 == PERIOD_M30 || G_timeframe_188 == PERIOD_H1 ||
G_timeframe_188 == PERIOD_H4 || G_timeframe_188 == PERIOD_D1 || G_timeframe_188 == PERIOD_W1 || G_timeframe_188 == PERIOD_MN1) && f0_30() == 0) {
f0_28("Signal", "Invalid Correlation Time Frame ...", Red, 24, 10, 10, 2);
return;
}
مشرفنا الغالي مستر دولار
اريد ان اضع كود لمعرفه ربح الاكسبيرت لليوم الحالي
حاولت ان اضع في الاكسبيرت هذا الكود لكن عند عمل كومبايل له يضهر اخطاء كثيره بالاضافه اني اريد صافي الربح للاكسبيرت على الماجيك نمبر وليس صفقات البيع والشراء منفصله
الاكسبيرت توجد به وضيفه اضهار البيانات على الشارت ولكن لااعرف كيف ادرج كود حساب الربح اليومي بدون الاستعانه باكواد جاهزه
هل تستطيع مساعدتي باضافته واضهاره على الشارت على نفس الاكسبيرت
والرجاء ان امكن ان تبين لي ماذا فعلت لاني اريد التعلم
ارجو ان لا اكون اثقلت عليك بالطلب
كود PHP:double MyBuyProfit(int Magic)
{
double c=0; datetime bclose;
int total = OrdersHistoryTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
bclose=OrderCloseTime();
if(bclose>=timeea)
{
c=c+OrderProfit();
}}}}
return(c);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| هذه الوظيفة تحسب ربح صفقات البيع |
//+------------------------------------------------------------------+
double MySellProfit(int Magic)
{
double c=0; datetime sclose;
int total = OrdersHistoryTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL)
{
sclose=OrderCloseTime();
if(sclose>=timeea)
{
c=c+OrderProfit();
}}}}
return(c);
}
السلام عليكم استاذى الكريم
مستر دولار
ارجو ان تكون فى اتم صحة واحسن حال
استاذى الكريم
سؤال برمجى
كيف يتم عمل اكسبيرت نسخ الصفقات بين منصتين ؟و
هل ممكن يكون النسح على اكثر من منصه ؟
وهل ممكن يكون اكسبيرتين فقط بدون ملف dll
وكيف يتم التحكم فى طريقة نسخ الصفقات من نوع الصفقة او حجم اللوت وهى الاشياء
ارجو المساعده ولك الشكر والعرفان
تحياتى لك استاذى الكريم
أهلا أخي مستر دولار , أشكرك على ردك السريع .
لقد قمت بعمل ما طلبته و لكن لم يفعل المطلوب .. هل ممكن تشيك على الكود .
كود PHP:void CheckForOpen()
{
double ma;
int res;
int res1;
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//--- sell conditions
if(Close[1]<Open[1] &&TotalLossNumber()==0 ) //1
{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,"",MAGICMA,0,Red);
}
//--- buy conditions
if(Close[1]>Open[1]&&TotalLossNumber()==0) //2
{
res=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,"",MAGICMA,0,Blue);
}
//---
if(TotalLossNumber()<4&&LastOrderInfo("Profit")<0)
{
if(LastOrderInfo("Type")==OP_BUY)
{
res1=OrderSend(Symbol(),OP_BUY,0.05,Ask,0,0,0,"",MAGICMA,0,Blue);
}
else if(LastOrderInfo("Type")==OP_SELL)
{
res1=OrderSend(Symbol(),OP_SELL,0.05,Bid,0,0,0,"",MAGICMA,0,Red);
}
}
}
هذا مثال
كود PHP:double TodayProfit()
{
double profit;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderOpenTime()>=iTime(Symbol(),1440,0))
{
profit+=OrderProfit();
}
else return(profit);
}
}
return(profit);
}
وعليكم السلام ورحمة الله وبركاته
الفكره في أن تجعل إكسبرت يقوم بكتابة بيانات الصفقه التي تم فتحها في ملف تكست ثم تجعل الإكسبرت الآخر يقرأ هذه البيانات من الملف
بعد التحديث الأخير للميتاتريدر وبسبب مشاكل أمنيه أصبحت الدوال FileWrite و FileRead تقوم بحفظ ملفات التكست في نفس مسار الميتاتريدر بالتالي عندما أحاول قراءة ملف من الميتاتريدر الآخر لن أستطيع تحديد مسار الملف بنفسي لذلك يجب الإستعانه بملفات dll
راجع كود هذا الإكسبرت
https://forum.arabictrader.com/t200487.html