وعليكم السلام ورحمة الله وبركاته
يمكنك إستخدام الداله
كود PHP:
ChartRedraw(0);
Printable View
السلام عليكم أيها الأحبة الكرام
أرجو المساعدة أستاذي الكريم
عند كل تكة يتم مراجعة شروط الدخول وبعدد لا نهائي من الصفقات بصفقة واحدة لكل شمعة ، وبالتالي سيتم الاستغناء عن شرط تحديد أقصى عدد الصفقات يعني لابد من استخدام شرط التايم0 كالتالي :
كل تمام في حالة عمل المنصة بشكل متواصل حيث يحتفظ بالتايم للشمعة الحالية وبالتالي لا يحدث تكرار للصفقاتكود PHP:
//+------------------Local variables------------------------------------------------+
datetime BarTime = 0;
//+------------------Expert Start------------------------------------------------+
void OncePerBar()
{
if (BarTime < Time[0])
{
// we have a new bar opened
BarTime = Time[0]; // keep the new bar open time
BuyOrder();
}
}
المشكلة عند إعادة تشغيل المنصة يفقد الاكسبيرت ما احتفظ به، وبالتالي يتم تكرار فتح الصفقة!
فهل يوجد حل؟
مثلا قبل مراجعة شروط الدخول يتم مراجعة أقصى عدد الصفقات في كل شمعة وليس في كل الشموع!
أو أي حل آخر جزاكم الله خيرا
تحياتي وتقديري
وعليكم السلام ورحمة الله وبركاته
يمكنك عمل دالة تحسب عدد الصفقات المفتوحه في آخر شمعه مثال
وبالتالي ستستغني عن الشرط الآخر وستضع هذا الشرط بدلا منهكود PHP:
int LastCandleOrders()
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderOpenTime()>=Time[0])cnt++;
else return(cnt);
}
}
return(cnt);
}
كود PHP:
if(LastCandleOrders()==0)
أستاذ MR.dollar أحتاج دالة . إذا وصل السكربت إلى 5 صفقات خسرة متتالية يتوقف السكربت عن العمل و تصبح أيقونت expert advisors الموجودة في أعلى برنامج MT4 حمراء.
ولا يعمل السكربت إلى بعد أن أضغط عليها
ستقوم بعمل دالة لمعرفة عدد الصفقات الخاسره المتتاليه
مثال
ثم ستضع الشرطكود PHP:
int Cnt_Lossing()
{
int cnt;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()<0)cnt++;
else return(cnt);
}
}
return(cnt);
}
كود PHP:
if(Cnt_Lossing()>=5)
{
ExpertRemove();
}
أخى مستر دولار وضعت دالة جعل هدف الصفقات المفتوحة نفس هدف أخر صفقة ولكنها لاتعمل (الأوامر التى أضعها أوامر معلقة)
كود PHP:
double LastOrderProfit(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magicnumber&&OrderType()==type)
{
return(OrderTakeProfit());
}
}
return(0);
}
void ModifyOrders(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magicnumber&&OrderType()==type)
{
if(OrderTakeProfit()!=LastOrderProfit(type))
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),LastOrderProfit(type),0);
}
}
}
}
لا توجد أخطاء ولكن لا يقوم الإكسيبرت بتغيير أهداف الصفقات
أخى بارك الله فيك إن لم يكن فيه تعب لك هذا الإكسيبرت قمت بعمله ووضعت فيه دالة الصفقات فمن فضلكم أخى أرجو أن تنظر إن كان مكان دالة الصفقات فى مكانه الصحيح أم لا وهذا هو الإكسيبرت الذى قمت بعمله يقوم بوضع أوامر معلقة ولكنه لا يغير هدف الصفقات وأرجو أن يعمل على سلة عملات فى أن واحد وجزاكم الله خيرا
كود PHP:
int start()
{
if(Hour()==0 && Minute()<5 && MyOrdersTotal(Magicnumber)>0)
{
DeletePendingOrders(Magicnumber);
CloseOrders(Magicnumber);
}
if(Hour()==0 && Minute()>5 && MyOrdersTotal(Magicnumber)==0)
{
double AAA1=ObjectGet("AAA1",OBJPROP_PRICE1);
double AAA2=ObjectGet("AAA2",OBJPROP_PRICE1);
double AAA3=ObjectGet("AAA3",OBJPROP_PRICE1);
double AAA4=ObjectGet("AAA4",OBJPROP_PRICE1);
double AAA5=ObjectGet("AAA5",OBJPROP_PRICE1);
double AAA6=ObjectGet("AAA6",OBJPROP_PRICE1);
double AAA7=ObjectGet("AAA7",OBJPROP_PRICE1);
double AAA8=ObjectGet("AAA8",OBJPROP_PRICE1);
double AAA9=ObjectGet("AAA9",OBJPROP_PRICE1);
double AAA10=ObjectGet("AAA10",OBJPROP_PRICE1);
double AAA11=ObjectGet("AAA11",OBJPROP_PRICE1);
double AAA12=ObjectGet("AAA12",OBJPROP_PRICE1);
OrderSend(Symbol(),OP_BUYLIMIT,Lots,AAA1,3,AAA11,AAA2,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_BUYLIMIT,Lots,AAA8,3,AAA11,AAA1,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_BUYLIMIT,Lots,AAA9,3,AAA11,AAA10,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots_s,AAA11,3,AAA1,AAA12,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,AAA2,3,AAA6,AAA1,"",Magicnumber,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,AAA3,3,AAA6,AAA2,"",Magicnumber,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,AAA4,3,AAA6,AAA5,"",Magicnumber,0,Red);
OrderSend(Symbol(),OP_BUYSTOP,Lots_s,AAA6,3,AAA2,AAA7,"",Magicnumber,0,Red);
}
return(0);
}
double LastOrderProfit(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magicnumber&&OrderType()==type)
{
return(OrderTakeProfit());
}
}
return(0);
}
void ModifyOrders(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magicnumber&&OrderType()==type)
{
if(OrderTakeProfit()!=LastOrderProfit(type))
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),LastOrderProfit(type),0);
}
}
}
}
int MyOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt > 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
{
OrderDelete(OrderTicket());
}
}
return(0);
}
int CloseOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt > 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
return(0);
}
جزاك الله خيرا أستاذى الحبيب سوف أقوم بتعديل الأمر
السلام عليكم ورحمة الله وبركاته
تحية طيبة أستاذي الكريم
أستاذي أريد دالة تحسب البروفيت الاجمالي للصفقات المغلقة من أول صفقة باللوت الابتدائي إلى آخر صفقة مضاعفة ( آخر صفقة مضاعفة سواء رابحة أو خاسرة) جزاك الله خيرا
وجمعة مباركة للجميع
:eh_s(7):
السلام عليكم
الكود التالي يدخل شراء اذا افتتاح الشمعه الحالية اعلى من افتتاح الشمعة السابقة ويدخل لمرة واحدة فقط
ما هوه التعديل لكي يدخل في كل شمعه تحقق الشرط
int start()
{
//----
if (iOpen(0,0,0)>iOpen(0,0,1)&& OrdersTotal()==0)
OrderSend(Symbol(),OP_BUY,0.1,Ask,30,0,0,"",1234,0 ,Green);
//----
return(0);
}
ممكن كود يحسب ارباح صفقات الشراء فقط ويغلقها على ربح محدد
ويحسب ارباح صفقات البيع فقط ويغلقها على ربح محدد
وشكرا جزيلا مقدما