[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 2

 
tara:
А если о двух?
Тогда имена по алфавиту.
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

    for(n=0,i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC+1 || OrderMagicNumber()>MAGIC+3) continue;
      no=OrderMagicNumber()-MAGIC;
      
      if(no==1)
      {
         n++;
         if(OrderType()==OP_SELL) { if(OrderOpenTime()>=ltts && BSo1==OP_SELL) s1=true; 
         if(MathAbs((OrderOpenPrice()-NormalizeDouble(Bid,Digits))/Point)<Add){OS1=1;} // Запрет на открытие селл

            } else
         if(OrderType()==OP_BUY) { if(OrderOpenTime()>=lttb && BSo==OP_BUY) b1=true;
         if(MathAbs(OrderOpenPrice()-NormalizeDouble(Ask,Digits))/Point<Add){OB1=1;} // Запрет на открытие бай
         }     
      }
   }
Добрый день.
Задача, открывать ордер на определенном расстоянии "Add" от уже открытого ордера.
Контролируются отдельно бай и отдельно селл.
Написал такой код. Вроде работает нормально, но иногда цена проходит большее расстояние чем "Add" а ордер не открывается.
Ставил принты, условие на проверку "Add" как то не корректно работает, а в чем ошибка не пойму.
Может кто что подскажет ?
 

Уважаемые, я тут озадачился решением одной проблемы, связанной с реквотами.

Ситуация: советник открывает ордера с рынка с жесткими стопами и тейками в пунктах, работает на закрытом баре, М15. Поступает сигнал на открытие, советник несколько раз пытается открыть сделку но не получается. На следующем баре сигнал повторяется и советник открывает таки сделку, но при этом курс уже ушел от точки где был подан первый сигнал. Получается, что стоп и тейк будет выставлен от курса открытия сделки, а не от курса когда был первый сигнал на открытие. Я написал такую конструкцию, чтобы при выставлении стопа и тейка советник брал цену при которой поступил первый сигнал, но проверить в тестере не получится из-за отсутствия в нем реквот, поэтому прошу специалистов посмотреть, правильно ли я написал.

  if(sg==1 && TimeCurrent()-buy_time>=1800) {buy_price=Ask;buy_time=TimeCurrent();}//
  if(sg==-1 && TimeCurrent()-sell_time>=1800) {sell_price=Bid;sell_time=TimeCurrent();}//
где,
sg==1 сигнал на покупку
sg==-1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

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

 
evillive:

Тралит ОрдерсТотал - 1, то есть до самого старого никогда не добирается, это во первых. Во вторых, тралит ордера с самого свежего к самому старому, а более старые могут вылететь по стопу или тэйку ещё до того как к нему тральщик доберётся. А вообще что именно не работает, логи ошибок есть?


TS вообще не работает, уже несколько раз я заметил, что "по задуманному" он не закрывает позиции вообще.Логов ошибок нет, а как их получить?

А вот про закрываемые ордера, не могли бы Вы написать подробнее, так как советник мультивалютный, но с лимитом 1-й сделки на валюте единовременно.

 
Stells:
Добрый день.
Задача, открывать ордер на определенном расстоянии "Add" от уже открытого ордера.
Контролируются отдельно бай и отдельно селл.
Написал такой код. Вроде работает нормально, но иногда цена проходит большее расстояние чем "Add" а ордер не открывается.
Ставил принты, условие на проверку "Add" как то не корректно работает, а в чем ошибка не пойму.
Может кто что подскажет ?


Функции Игоря Ким, просто и удобно.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  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) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Sancho77:

Уважаемые, я тут озадачился решением одной проблемы, связанной с реквотами.

Ситуация: советник открывает ордера с рынка с жесткими стопами и тейками в пунктах, работает на закрытом баре, М15. Поступает сигнал на открытие, советник несколько раз пытается открыть сделку но не получается. На следующем баре сигнал повторяется и советник открывает таки сделку, но при этом курс уже ушел от точки где был подан первый сигнал. Получается, что стоп и тейк будет выставлен от курса открытия сделки, а не от курса когда был первый сигнал на открытие. Я написал такую конструкцию, чтобы при выставлении стопа и тейка советник брал цену при которой поступил первый сигнал, но проверить в тестере не получится из-за отсутствия в нем реквот, поэтому прошу специалистов посмотреть, правильно ли я написал.

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

Получается, что у вас оптимальность определяется только уровнями tp и sl, а цена сделки может быть любой? Как-то это нелогично.
 
alsu:
Получается, что у вас оптимальность определяется только уровнями tp и sl, а цена сделки может быть любой? Как-то это нелогично.

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

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

 
Sancho77:

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

datetime buy_time,sell_time;
int init(){
   buy_time = 0;
   sell_time = 0;
}
int start(){
   if(buy_time==0 && Open[1]>Close[2]) buy_time = TimeCurrent();
   .......
   if(buy_time!=0){
      OrderSend(.........);
      buy_time = 0;
   }
return(0);
}
ну а если вопрос борьбы лишь реквотами, то поройтесь в ветке Игоря Ким, там почти все функции для выставления ордеров имеют параметр сколько раз пытаться выставить ордер
 
Sancho77:

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

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

Да написано-то правильно, только вот представьте себе ситуацию: "настоящая" цена сделки оказалась, например, выше запомненного ТП - что тогда делать будете? (а эта ситуация вполне реальна - реквоты как раз частят на быстром рынке, когда цена скачет)
 
alsu:
Да написано-то правильно, только вот представьте себе ситуацию: "настоящая" цена сделки оказалась, например, выше запомненного ТП - что тогда делать будете? (а эта ситуация вполне реальна - реквоты как раз частят на быстром рынке, когда цена скачет)

Спасибо за мнение.

Ну если цена окажется выше запомненного ТП то сделка откроется с минимальным уровнем тейка, такая обработка в советнике заложена.

PS Кстати, надо будет попробовать вставить запрет на открытие позиции если новая цена ушла от запомненной цены более чем на определенную дистанцию, спасибо за мысль, жалко в тестере это не проверишь, только в торговле.