Помогите с кодом

 

Такая проблема 

После пересечения скользящих средних нужно входить, но нужно игнорировать все следующие пересечения пока не закроется ордер.

 

int TimeBar;


if (TimeBar!=Time[0])
if( пересечение )
  {
    OpenOrders(OP_BUY);
    TimeBar=Time[0];  
  }
 
traderEvgen:

Такая проблема 

После пересечения скользящих средних нужно входить, но нужно игнорировать все следующие пересечения пока не закроется ордер.

 

datetime TimeBar; а не int. Больше ошибок не вижу.  

 
Vitalii Ananev:

datetime TimeBar; а не int. Больше ошибок не вижу.  

Ордер закрывается по SL или TP, но возможно пересечение скользящих средних, и тогда будет открыт новый ордер, при том что предыдущий не закрылся, а мне надо что бы новый открывался только когда предыдущий закрылся.

Да.... сделки  открываются только Buy 

 
traderEvgen:
Ордер закрывается по SL или TP, но возможно пересечение скользящих средних, и тогда будет открыт новый ордер, при том что предыдущий не закрылся, а мне надо что бы новый открывался только когда предыдущий закрылся 

Для начала тип переменной TimeBar должен быть datetime.

Перед отправкой торгового приказа проверяйте наличие уже открытых ордеров (функция OrdersTotal() возвращает кол-во открытых ордеров). 

Посмотрите примеры советников в базе кодов, по сто раз одно и тоже писать не хочется. 

 
Vitalii Ananev:

Для начала тип переменной TimeBar должен быть datetime.

Перед отправкой торгового приказа проверяйте наличие уже открытых ордеров (функция OrdersTotal() возвращает кол-во открытых ордеров).

за datetime спасибо, уже исправил :)

А  OrdersTotal не поможет, если вручную был вход, или с другого советника ?

 
traderEvgen:

за datetime спасибо, уже исправил :)

А  OrdersTotal не поможет, если вручную был вход, или с другого советника ?

Проверяйте ордера на наличие магического номера.

То есть отправляя торговый приказ на сервер указывайте ордеру уникальный маг. номер. По нему вы будете отличать ордера своего советника от других советников и от открытых вручную. 

 
Vitalii Ananev:

Проверяйте ордера на наличие магического номера.

То есть отправляя торговый приказ на сервер указывайте ордеру уникальный маг. номер. По нему вы будете отличать ордера своего советника от других советников и от открытых вручную. 

да, нужно использовать magic Number, возможно Symbol(). Но как написать проверку?

Помогите пожалуйста... я уже столько времени на это потратил и ничего не выходит  

 

Вот простой пример:

int OrderCount(int MN,string SMB)
{
   int count = 0;
   int Total = OrdersTotal();

   if (Total==0) return(0);
   for(int i=Total-1; i>=0; i--)         
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber()!=MN && OrderSymbol()!=SMB) continue;
      count++;
   }
   return(count);
}
 
Vitalii Ananev:

Вот простой пример:

спасибо большое 
 
Vitalii Ananev:

Вот простой пример:

Эта функция считает кол-во всех ордеров любого типа имеющих магической номер MN и символ SMB.

Пример.

if (OrderCount(12345,"EURUSD")==0) OrderSend();
 
Vitalii Ananev:

Эта функция считает кол-во всех ордеров любого типа имеющих магической номер MN и символ SMB.

Пример.

даа, я уже понял. Еще раз огромное спасибо 
Причина обращения: