Имеется в виду, что один и тот же советник и открывает ордера, и выполняет над ним какую-то задачу.
Если только искать ордер и над ним издеваться, то скрипт будет выглядеть примерно так:
//+------------------------------------------------------------------+//| Order_act.mq4 |//| |//| |//+------------------------------------------------------------------+#property copyright ""#property link ""int Order_array[200];
int Total=0;
int j,pos,count,order_tick,type;
bool found;
//+------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------+int start()
{
//----// создаем список ордеров (туда входят и открытые, и отложенные)
Total=OrdersTotal();
for(pos=0;pos<Total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{ Order_array[pos]=OrderTicket();}
}
// проверочная часть скрипта int i=0;
while ( !IsStopped() )
{
count=OrdersTotal();
for(pos=0;pos<count;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{
found=false;
order_tick=OrderTicket();
for (j=0;j<Total;j++)
{
if (order_tick==Order_array[j]) {found=true;}
}
if (!found)
{
type=OrderType();
if ((type==OP_BUY) || (type==OP_SELL))
{
Total++; // в случае,если есть новый открытый
Order_array[Total-1]=order_tick; //ордер - добавляем в списокAlert("Новый открытый ордер"); // и делаем с ним что хотим
}
}
}
// если планируется, что скрипт будет работать долго или открываемся часто// удаляем из списка все закрытые ордера чтобы не было переполнения. // А чтобы работало быстрее, количество записей можно уменьшить (лишь бы не превысило // максимально возможного числа открытых и отложенных поз.if (Total>190)
{
for (j=0;j<Total;j++)
{
if(OrderSelect(Order_array[j],SELECT_BY_TICKET)==true)
{
if (OrderCloseTime()!=0)
{
Alert("нашли закрытый в списке и удалили");
for (i=j+1;i<Total;i++) {Order_array[j]=Order_array[i];}
Total--;
}
}
}
}
Sleep(100);
}
}
//----return(0);
}
//+------------------------------------------------------------------+
Имеется в виду, что один и тот же советник и открывает ордера, и выполняет над ним какую-то задачу.
Если только искать ордер и над ним издеваться, то скрипт будет выглядеть примерно так:
//+------------------------------------------------------------------+ //| Order_act.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" int Order_array[200]; int Total=0; int j,pos,count,order_tick,type; bool found;
//+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start()
{ //---- // создаем список ордеров (туда входят и открытые, и отложенные)
Total=OrdersTotal();
// проверочная часть скрипта int i=0; while ( !IsStopped() )
{
count=OrdersTotal(); for(pos=0;pos<count;pos++)
{ if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{
found=false;
order_tick=OrderTicket();
for (j=0;j<Total;j++)
{
if (order_tick==Order_array[j]) {found=true;}
} if (!found)
{
type=OrderType();
if ((type==OP_BUY) || (type==OP_SELL))
{
Total++; // в случае,если есть новый открытый
Order_array[Total-1]=order_tick; //ордер - добавляем в список
Alert("Новый открытый ордер"); // и делаем с ним что хотим
}
}
} // если планируется, что скрипт будет работать долго или открываемся часто // удаляем из списка все закрытые ордера чтобы не было переполнения. // А чтобы работало быстрее, количество записей можно уменьшить (лишь бы не превысило // максимально возможного числа открытых и отложенных поз. if (Total>190)
{ for (j=0;j<Total;j++)
{ if(OrderSelect(Order_array[j],SELECT_BY_TICKET)==true)
{ if (OrderCloseTime()!=0)
{ Alert("нашли закрытый в списке и удалили"); for (i=j+1;i<Total;i++) {Order_array[j]=Order_array[i];}
Total--;
}
}
}
} Sleep(100);
}
} //---- return(0);
} //+------------------------------------------------------------------+
А он будет учитывать ордера, которые открыты системой ?
Может сделать обработку ордера сразу же после открытия, тогда и искать ничего не надо будет.
Что вы имеете ввиду?
Хоть скажите, это спомошью масивов делаеться?
Что вы имеете ввиду?
Имеется в виду, что один и тот же советник и открывает ордера, и выполняет над ним какую-то задачу.
Если только искать ордер и над ним издеваться, то скрипт будет выглядеть примерно так:
Имеется в виду, что один и тот же советник и открывает ордера, и выполняет над ним какую-то задачу.
Если только искать ордер и над ним издеваться, то скрипт будет выглядеть примерно так:
Огромное Спасибо . Теперь главное разобраться самому в этом коде до мельчайших деталей.
Может сделать обработку ордера сразу же после открытия,
Имеется в виду, что один и тот же советник и открывает ордера, и выполняет над ним какую-то задачу.
Если только искать ордер и над ним издеваться, то скрипт будет выглядеть примерно так:
//+------------------------------------------------------------------+
//| Order_act.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
int Order_array[200];
int Total=0;
int j,pos,count,order_tick,type;
bool found;
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
// создаем список ордеров (туда входят и открытые, и отложенные)
Total=OrdersTotal();
for(pos=0;pos<Total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{ Order_array[pos]=OrderTicket();}
}
// проверочная часть скрипта
int i=0;
while ( !IsStopped() )
{
count=OrdersTotal();
for(pos=0;pos<count;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{
found=false;
order_tick=OrderTicket();
for (j=0;j<Total;j++)
{
if (order_tick==Order_array[j]) {found=true;}
}
if (!found)
{
type=OrderType();
if ((type==OP_BUY) || (type==OP_SELL))
{
Total++; // в случае,если есть новый открытый
Order_array[Total-1]=order_tick; //ордер - добавляем в список
Alert("Новый открытый ордер"); // и делаем с ним что хотим
}
}
}
// если планируется, что скрипт будет работать долго или открываемся часто
// удаляем из списка все закрытые ордера чтобы не было переполнения.
// А чтобы работало быстрее, количество записей можно уменьшить (лишь бы не превысило
// максимально возможного числа открытых и отложенных поз.
if (Total>190)
{
for (j=0;j<Total;j++)
{
if(OrderSelect(Order_array[j],SELECT_BY_TICKET)==true)
{
if (OrderCloseTime()!=0)
{
Alert("нашли закрытый в списке и удалили");
for (i=j+1;i<Total;i++) {Order_array[j]=Order_array[i];}
Total--;
}
}
}
}
Sleep(100);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
А он будет учитывать ордера, которые открыты системой ?