Как запустить один раз советника?

 
Чтобы один ордер запускался я поставил. Как сделать чтобы после срабатывания стоплосс советник выключался?
 
luxerman:
Чтобы один ордер запускался я поставил. Как сделать чтобы после срабатывания стоплосс советник выключался?

Навсегда?
 
luxerman:   советник выключался
ExpertRemove()
 
paukas:

Навсегда?
Да навсегда, чтоб потом только при нажатии на эксперта запускался
 
LRA:
ExpertRemove()
Этот вариант не работает, эксперт все равно перезапускается
 
luxerman:   Этот вариант не работает, эксперт все равно перезапускается
Как это перезапускается? Скорей всего, вызов этой функции не производится
Попробуйте до и после вызова этой функции вставить алерты:
Alert("Выгружаем эксперт");
ExpertRemove();

Alert("Выгрузка произведена. Смотрим, что будет");

Или приложите код, посмотрю

Ну вот, получилось!

 
LRA:
Как это перезапускается? Скорей всего, вызов этой функции не производится
Попробуйте до и после вызова этой функции вставить алерты:
Alert("Выгружаем эксперт");
ExpertRemove();

Alert("Выгрузка произведена. Смотрим, что будет");

Или приложите код, посмотрю

Ну вот, получилось!

Работает можете еще подсказать чтоб при срабатывании стоплосс включалась эта функция ExpertRemove()(происходил выход, а не запускался еще раз ордер);

if(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}

if(OrderSelect(ticket, SELECT_BY_POS)==true){
       double stopper = OrderStopLoss();   //стоплосс этого ордера
          if(Price <= stopper){     //Price это Bid, тут условие если B
              ExpertRemove();
            }
          }

При таком варианте эта функция не срабатывает

 
luxerman:

Работает можете еще подсказать чтоб при срабатывании стоплосс включалась эта функция ExpertRemove()(происходил выход, а не запускался еще раз ордер);

if(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}

if(OrderSelect(ticket, SELECT_BY_POS)==true){
       double stopper = OrderStopLoss();   //стоплосс этого ордера
          if(Price <= stopper){     //Price это Bid, тут условие если B
              ExpertRemove();
            }
          }

При таком варианте эта функция не срабатывает

Она и не сработает. Потому что условие if(Price <= stopper) не срабатывает. Можешь сам проверить если вместо ExpertRemove(); влепишь Alert("SIGNAL");. Не дождешься сигнала. И вообще вместо Price лучше внедрить Bid предварительно обновив ее RefreshRates();.
 
luxerman:
Чтобы один ордер запускался я поставил. Как сделать чтобы после срабатывания стоплосс советник выключался?

bool trade=true; ...

if(trade) PutOrder(0,Ask); ...

if(LastDealResult==2) trade=false;

//+------------------------------------------------------------------+
//| Результат последней сделки                                       |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
Причина обращения: