السلام عليكم ورحمة الله وبركاته
سؤال برمجي للأستاذ مستر دولار
أنا برمجت اكسبيرت بسيط يقوم بفتح صفقتين احداهما بيع والاخرى شراء وهدف كل منهما 20 نقطة ومن غير ستوب لوز
ثم عرفت دالة لغلق الصفقة عندما يعكس السعر 20 نقطة (يعني كأني عملت ستوب لوز 20 نقطة)
المشكلة عند تشغيل هذا الاكسبيرت مثلا على يوم 14/11/2011 يفتح الاكسبيرت صفقتان بيع+شراء ولكن لا يتم تفعيل أمر غلق صفقة الشراء بعد عكس السعر لأسفل بينما يتم تفعيل أمر غلق صفقة البيع عندما يعكس السعر لأعلى
وهذا هو كود البرنامج
////////////////////////////////////////////////////////////
double TP,B,S;
int Magicnumber1=123456;
int Magicnumber2=123457;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double Lot,F;
F=AccountEquity()/AccountBalance();
Comment(F*100,"--",AccountEquity(),"--",AccountBalance());
Lot=NormalizeDouble(AccountFreeMargin()/25000,1);
TP=200;
if(MyOrdersTotal(Magicnumber1)==0)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,Ask+TP*Point ,"l",Magicnumber1,0,Green);
B=Ask;
}
if(MyOrdersTotal(Magicnumber2)==0)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,0,0,Bid-TP*Point,"l",Magicnumber2,0,Green);
S=Bid;
}
if(Ask<=B-TP*Point)
{
CloseOrders(Magicnumber1);
}
if(Bid>=S+TP*Point)
{
CloseOrders(Magicnumber2);
}
//////////////////////////////////////////////////////////////////////
return(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 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);
}
///////////////////////////////////////////////