[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 619

 
kwadrad:

А что с этом можно сделать?

перед открытием обнови данные, цену нормализуй

Vinin:

Я и написал сразу же, что такое закрытие не рекомендуется. Используется недокументированная возможность. Но у любой открытой позиции время закрытие равно нулю, а цена закрытия будет равна текущей цене закрытия.

после всех этих опытов это уже очевидно)

 
kwadrad:

А что с этом можно сделать?

Смотрите внимательно на заданные вами цены при открытии позиции. Наверняка там... Ask с Bid`ом не перепутали?
 
artmedia70:
Смотрите внимательно на заданные вами цены при открытии позиции. Наверняка там... Ask с Bid`ом не перепутали?

так и есть. Спасибо.
 
kwadrad:

так и есть. Спасибо.
Не за что - это самое первое, что путают новички, по себе знаю...
 
Кто-нибудь делал так, чтобы простой трейлинг-стоп двигал не уровень стопа, а отложенный ордер за ценой? Возможно такое сделать?
Я чёт пытался-корячился, добился только того, что отложенник ёрзает за ценой туда-сюда, как больной...

Может возможно переделать функцию простейшего трейлинга, чтоб она ордерами занималась вместо стопов? Например этот:

//+----------------------------------------------------------------------------+
//|  Сопровождение позиции простым тралом                                      |
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                   (-1 - любая позиция)                    |
//|    mn - MagicNumber                (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
  void TrailingPositionsSimplTR(string sy="", int op=-1, int mn=-1) {
  double p, pp;
  int    i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            pp=MarketInfo(sy, MODE_BID);
            if (!ProfitTrailing || (pp-OrderOpenPrice())>TrailingStopBuy*p) {
              if (OrderStopLoss()<pp-(TrailingStopBuy+TrailingStepSimplTR-1)*p) {
                ModifyOrder(sy, -1, pp-TrailingStopBuy*p, 0, clModifyBuy);//
              }
            }
          }
          if (OrderType()==OP_SELL) {
            pp=MarketInfo(sy, MODE_ASK);
            if (!ProfitTrailing || OrderOpenPrice()-pp>TrailingStopSell*p) {
              if (OrderStopLoss()>pp+(TrailingStopSell+TrailingStepSimplTR-1)*p || OrderStopLoss()==0) {
                ModifyOrder(sy, -1, pp+TrailingStopSell*p, 0, clModifySell);
              }
            }
          }
        }
      }
    }
  }
}
 
ToLik_SRGV:

Print() округляет до 4-х знаков, для того что бы корректно вывести в консоль тип double (который возвращает iOpen() с точностью в 5 знаков после запятой, в данном случае), нужно воспользоваться функцией DoubleToStr()

string DoubleToStr( double value, int digits)
Преобразование числового значения в текстовую строку, содержащую символьное представление числа в указанном формате точности.

Параметры:

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (громное спасибо.


спасибо большое .
 
Roger:


Посмотри этот советник, там я это реализовал

http://www.rogersignals.com/ru/experts.php?a=Support_Resistance

ОК, спасибо, поразбираюсь...
 
artmedia70:
Кто-нибудь делал так, чтобы простой трейлинг-стоп двигал не уровень стопа, а отложенный ордер за ценой? Возможно такое сделать?
Я чёт пытался-корячился, добился только того, что отложенник ёрзает за ценой туда-сюда, как больной...

Может возможно переделать функцию простейшего трейлинга, чтоб она ордерами занималась вместо стопов? Например этот:

Что то у вас все слишком сложно :))
Вот мой код

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing)-Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point && (Ask+Point*trailing)-Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid-(Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point && Bid-(Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
Передаете в метод в качестве параметров меджик отложенника, и желаемый тралл.
 
      for (i =0;i<OrdersTotal();i++)
      {
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true&&OrderMagicNumber()==MAGICMA&&OrderSymbol()==Symbol())
         {
            if (MathAbs(funk-OrderOpenPrice())>Point)
            {
               if (OrderType()==OP_BUYSTOP||OrderType()==OP_BUYLIMIT&&MathAbs(Ask-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk+TakeProfiti*Point,Digits),0);
               }
               if (OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT&&MathAbs(Bid-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk-TakeProfiti*Point,Digits),0);
               }
            }
         }
      }
что-то типа этого, тут ордер тралиться по рассчитанному значению funk
 
ToLik_SRGV:

Что то у вас все слишком сложно :))
Вот мой код

Передаете в метод в качестве параметров меджик отложенника, и желаемый тралл.

Вот спасибо! Думаю, то, что надо!
Причина обращения: