как правильно написать код входа при открытий нового бара? - страница 2

 

А разве это нужно?

Позиция и так закроется на след. баре после открытия, если будет выполнено условие OrderOpenPrice()-Bid>=k*Point

 
он так не закрывает, закрывает через несколько баров, и количество баров различны в каждой сделке, а при снятий
if( OrderOpenPrice()-Bid>=k*Point) 

вот этого условия закрывается через один пункт, т.е. не ждет закрытия бара.

или что-то не так делаю? 

 

Ну не знаю.

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

У И.Кима есть функция, кот. возвращает число баров после открытия последней позиции.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;  int      i, k=OrdersTotal();
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            } }}}}}  return(iBarShift(sy, tf, t, True));}  

Функцию эту добавьте (скопируйте) в самый конец вашего кода, - вне ф-и Старт.

А в условия закрытия добавьте вместо

if( OrderOpenPrice()-Bid>=k*Point)

вот это (для вашего случая):

if ( NumberOfBarOpenLastPos(NULL, 0, OP_SELL, -1) ==1 )

 
спасибо
 
atik:
if( iVolume(Symbol(),TF,0)<2) - наилучший и кратчайший вариант для входа

Слава, твой вариант, как и все граали, годится исключительно для тестера.

В реале на 1-м тике бара торговый приказ может не исполниться по ряду причин, а может и сразу 2-3 тика прийти. В этой ветке рассмотрены рабочие варианты.

 
goldtrader:

Слава, твой вариант, как и все граали, годится исключительно для тестера.

В реале на 1-м тике бара торговый приказ может не исполниться по ряду причин, а может и сразу 2-3 тика прийти. В этой ветке рассмотрены рабочие варианты.

на реале я обычно ставлю 3й-4й тик. и всё отлично работает ( не было случаев сбоя )не зря же я написал < а не ==1

ну а по поводу граалей -так эксперт на машке и цене, (а не на тиковых объёмах ) отлично зарекомендовал себя и на реале ( ндд )

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

Ну, п1. уже выполнен.

Чтобы закрыть сделку с заданным профитом - задайте Тейкпрофит в ф-и открытия позиций

OrderSend(

string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Посмотрите, в любом советнике - как это делается.


.

 

Как закрыть сделку по цене закрытия бара - я не знаю.

Вряд ли это у вас получится! Ведь мы программно узнаем, что бар закрыт только тогда, когда откроется следующий бар.

Могу вам порекомендовать поэкспериментировать с упомянутыми выше функциями И.Кима

NumberOfBarCloseLastPos - Возвращает номер бара закрытия последней позиции или -1.
NumberOfBarOpenLastPos - Возвращает номер бара открытия последней позиции или -1.

в адресе https://www.mql5.com/ru/forum/131859

Возможно, и получится то, что вы хотите.

 
попробуем спасибо