А давайте сделаем из этого "мультик" (мультивалютник) - страница 5

 

Рано радовалась. Компиляция без ошибок, но в тесторе при открывшемся ордере цена через эту функцию в индикатор не поступает. Вызов делаю так: OP=PriceOpenLastPos(); Но в комент ОР так и остается равным нулю.

Это что, проблема тестора, он не передает значения в индикатор который висит в окне в режиме визуализации?

 
Angela писал(а) >>

Рано радовалась. Компиляция без ошибок, но в тесторе при открывшемся ордере цена через эту функцию в индикатор не поступает. Вызов делаю так: OP=PriceOpenLastPos(); Но в комент ОР так и остается равным нулю.

Это что, проблема тестора, он не передает значения в индикатор который висит в окне в режиме визуализации?

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

 
ALex2008 писал(а) >>

Прошу ответить)

//-------Поиск ордеров
bool WorkOrders(){
      for (int i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      Type = OrderType();
      Ticket=OrderTicket();
      return(true);
  }
  return(false);  
}
 
Vinin >>:

Исправил... Но осталась проблема(

Не работает функция Удаления ордеров DellAllOrders()..

//-------Удаление всех ордеров
void DellAllOrders(){
      if(WorkOrders())OrderClose(Ticket,OrderLots(),OrderClosePrice(),10);
  }
  
//-------Поиск ордеров
bool WorkOrders(){
      for (int i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      Type = OrderType();
      Ticket=OrderTicket();
      return(true);}
  return(false);
  }

Кажется нужно было добавить





OrderDelete(Ticket);

ВРоде так....?

//-------Удаление всех ордеров, открытых и отложенных
void DellAllOrders(){
      if(WorkOrders()){
      OrderClose(Ticket,OrderLots(),OrderClosePrice(),10);
      OrderDelete(Ticket);}
  }
 
ALex2008 писал(а) >>

Исправил... Но осталась проблема(

Не работает функция Удаления ордеров DellAllOrders()..

//-------Удаление всех ордеров
void DellAllOrders(){
  for (int i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      if (OrderType()<=OP_SELL) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10);
      else OrderDelete(OrderTicket());
  }
}
Удаляет еще и отложенники
 
Vinin >>:
Удаляет еще и отложенники

Спасибо)

ВРоде теперь должно всё работать..

//-------Удаление всех ордеров, открытых и отложенных
void DellAllOrders(){
      if(WorkOrders()){
      if(Type<=1)OrderClose(Ticket,OrderLots(),OrderClosePrice(),10);
      else OrderDelete(Ticket);}
  }
И ещё заметил ошибочку установки повторного стоплосса, если пересохранять советник (думаю так же будет если просто перезагрузить терминал)...
добавил проверку перед установкой стоплоса..-


if(WorkOrders())
      if ((Type<=1)&& (Stop==0))SetStop();



//-------Поиск ордеров
bool WorkOrders(){
      for (int i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      Type  = OrderType();
      Ticket=OrderTicket();
      Stop  =OrderStopLoss();
      return(true);}
  return(false);
  }
 
Люди) Посмотрите... может ещё чего не так, чего подправить?
 
ALex2008 >>:
Люди) Посмотрите... может ещё чего не так, чего подправить?
OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Ask+Profit, 0, 0,0, Green);

Так задумано? или таки

Enter+Profit
 
Swan >>:

Так задумано? или таки

И правда ошибка) Это ж отложенник, точно!!... Спасибо. Переделал.

 
ALex2008 >>:

И правда ошибка) Правда не критическая... Спасибо.

ошибка 130 постоянно.

StopLevel проверять надо, для StopLoss и Enter.


и исчо

if(b0<b1) StopLoss=b1;
else StopLoss=b0;

должно выбираться наибольшее?