Trailing Stop без ордеров - страница 2

 
у меня не работает
 
еще сходите сюда, тут полный набор и с кодом
 
А, собственно в чём смысл такого трала? Ну запомнил советник некий уровень, по достижении которого он должен отдать приказ на сервер о закрытии позиции. Что дальше произойдёт в реальности? Цена достигла этого уровня, советник отдал приказ серверу, и пока сервер обрабатывал этот приказ, пришли новые котировки. В силу того, что в советнике были правильно прописаны параметры проскальзывания, сделка закрылась с отклонением от запрошенной цены. Практика показывает, что ордера закрываются при отклонении цены в худшую сторону. Что в результате? А в результате увеличенный убыток по счёту. Пусть не большой, но! Маленьие ручейки потихоньку стекаются в большие реки!
Ситуация другая. Рынок настолько активен, что проскальзывания не хватило для закрытия позы. В результате и ордер не закрыт и цена уже уехала от точки закрытия ордера и советник видит, что опоздал с закрытием и не отдаёт повторного приказа. Результат - поза поехала в минус.
В чём смысл-то?
Если бы приказ лежал как у нормального  треала, на сервере, то ордер был бы закрыт по стопу как положенно.
 
sashasan >>:
еще сходите сюда, тут полный набор и с кодом

За это спасибо

" Практика показывает, что ордера закрываются при отклонении цены в худшую сторону. "
это зависит от дц

Хорошо пусть так, просто может кто нибудь понять почему оно не работает? =) хочу докопаться до своей ошибки.

void VirtualTrailingStop() //------------------------------ Виртуальный Трэйлинг стоп ------------
  {
    for(int i=0;i<OrdersTotal();i++)   
    {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
 
      
      
      if (OrderType()==OP_BUY)
      {
        if((Bid-OrderOpenPrice())>=(TS*Point) && (Bid-TS*Point)>TrailStop) //почему эта часть выполняется
        {
          TrailStop=(Bid-Point*TS);
          return(0);
        }
        if (TrailStop==Bid || TrailStop==Bid-1 || TrailStop==Bid+1) // а эта нет, нормальное же условие
        {
          Print("закрываемся");
          while (OrdersTotal()>0)
          {
            OrderSelect(0,SELECT_BY_POS);
            OrderClose(OrderTicket(),Lot,Bid,3,Green);
            TrailStop=0;
          }        
        }
      }
      
      
      
      
      if (OrderType()==OP_SELL)
      {
        if((OrderOpenPrice()-Ask)/Point>=(TS) && (Ask+TS*Point)<TrailStop)
        {
          TrailStop=(Ask+Point*TS);
          return(0);
        }
        if (TrailStop==Ask || TrailStop==Ask-1 || TrailStop==Ask+1)
        {
          Print("закрываемся");        
          while (OrdersTotal()>0)
          {
            OrderSelect(0,SELECT_BY_POS);
            OrderClose(OrderTicket(),Lot,Ask,3,Red);
            TrailStop=0;            
          }        
        }
      }
    }
  }
 
или почему не работает это:
void TrailingStop() //------------------------------------------------- Трэйлинг стоп ------------
  {
    if(TS==0) return;
    for(int i=0;i<OrdersTotal();i++)   
    {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);


      if (OrderType()==OP_BUY)
      {
        if( (Bid-OrderOpenPrice()) >=((TS+10)*Point) )
        {
          OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TS,OrderClosePrice(),0,Yellow);
          return(0);
        }
      }


      if (OrderType()==OP_SELL)
      {
        if((OrderOpenPrice()-Ask) >=((TS+10)*Point) )
        {
          OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TS,OrderClosePrice(),0,Purple);
          return(0);
        }
      }


    }
  }
я уже хочу биться об стену. все же правильно! ошибка 130, типа кривой лось, я в отчаяньи.
 
sergentum >>:
или почему не работает это:
я уже хочу биться об стену. все же правильно! ошибка 130, типа кривой лось, я в отчаяньи.

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

MODE_STOPLEVEL 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах


TrailStop==Bid+1

Тут Вы имели ввиду, наверное:

TrailStop==Bid+1*Point
 
Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах

ну не может он быть больше 15, как бы там ни было. руками стоп ставится меньше 10
 
sergentum >>:
Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах

ну не может он быть больше 15, как бы там ни было. руками стоп ставится меньше 10

Стоп должен быть нормализован по Digits.

 
дописал я. результатом недоволен. т.е. работать то работает, но с моей тс по средним толку немного на флэте.
 
sergentum >>:
дописал я. результатом недоволен. т.е. работать то работает, но с моей тс по средним толку немного на флэте.

Ну, батенька, а Вы что, хотели грааль получить ? Впереди ещё много разочарований. Вопрос был, как я понимаю по коду. Сейчас ошибки выдаёт ? Если есть, то какие. Это к торговой системе не относится.

Причина обращения: