Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Leonid Borsky
2381
Leonid Borsky  

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

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

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

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

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

Leonid Borsky
2381
Leonid Borsky  

Ну не знаю.

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

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

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 )

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

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

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

atik
410
atik  
goldtrader:

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

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

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

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

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

Ну, п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)

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


.

Leonid Borsky
2381
Leonid Borsky  

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

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

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

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

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

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

Ilnaz
440
Ilnaz  
попробуем спасибо
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий