اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 5 صفقات
مع كل اشارة ولم افهم لما 5 صفقات رغم اني غيرة الدالة
وجعلتها تفتح صفقة واحدة فقط دون اي متغير خارجي يتحكم
في عدد الصفقات وايضا يقوم بتفعيل مع اول اشارة
ولا يغلق الصفقة رغم اني وضعت دالة اغلاق الصفقة في
حال وجود اشارة عكسية
[PHP]extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;
int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----
//----
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment(""+"\n"+""+"\n"+"/");
//////////////////////////////////////////////////
double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);
دالة استدعاء المؤشر
//////////////////////////////////////////////////
double TP,SL;
if(indigreen<5000&&LastOrder()>0&&orderstotal()<=1 ) {
{CloseSellOrders();}
دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",Magi cNumber,0,Blue);
}
//////////////////////////////////////////////////
if(indired<5000&&LastOrder()!=1&&orderstotal()<=1) {
{CloseBuyOrders();}
دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",Mag icNumber,0,Red);
}
return(0);
}
//+------------------------------------------------------------------+
دالة اغلاق صفقة الشراء في حال ظهور اشارة معاكسة
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
}
//////////////////////////////////////////////////
دالة اغلاق صفقة البيع في حال ظهور اشارة معاكسة
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
if (OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
دالة لجعل الاكسبيرت يفتح الصفقات بتسلسل
اي لا يفتح صفقتين متتاليتين بيع او شراء
int LastOrder(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Ma gicNumber){
return(OrderType());
}
}
return(2);
}
[/PHP]