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

 

Обычно <= используется. Или >=. В обоих случаях, реализация - аппаратная, Метаквоты - ни при чем.

Разработчики других языков - тоже ни при чем. Базовая операция. Как + и -.

 
drknn:

Поскольку в условии находится не строгая дизъюнкия (а она всегда истинна если хотябы 1 её элемент является истинным), то на месте разработчика самое логичное для обработки данного условия было бы сначала разделить молекулу (a>b || c>d) на атомы "a>b" и "c>d", затем организовать цикл последовательного перебора атомов для проверки на предмет истинности. И если очередной атом истинный, то тут же прервать цикл, дав возможность программе выполнить действие, которое лежит сразу за скобками условия - то есть, не перебирать оставшиеся атомы, ибо в этом уже нет нужды. И тут не имеет значения, перебираем мы атомы из начала в конец или из конца в начало созданного списка атомов. Направление перебора может показать Вам только разработчик (метаквотесы). А зачем оно Вам понадобилось-то? Вы что, свой компилятор пишете?
На ум пришло: если в логике ТС условие a>b является истинным гораздо чаще, нежели c>d==true, то тогда может иметь значение порядок проверки истинности этих двух условий для ускорения работы программы
 
artmedia70:
На ум пришло: если в логике ТС условие a>b является истинным гораздо чаще, нежели c>d==true, то тогда может иметь значение порядок проверки истинности этих двух условий для ускорения работы программы

На самом деле выражение выглядит так: if(a>b || (a<=b && c>d)). Если проверка истинности происходит слева направо, то выражение a<=b будет лишним с точки зрения ускорения работы программы. Вопрос как раз и был в том, слева направо или наоборот или в разных случаях по-разному.
 
AndEv:

На самом деле выражение выглядит так: if(a>b || (a<=b && c>d)). Если проверка истинности происходит слева направо, то выражение a<=b будет лишним с точки зрения ускорения работы программы. Вопрос как раз и был в том, слева направо или наоборот или в разных случаях по-разному.

Подскажите в чем причина, советник не открывакет ордера, пишет error 133
 
paladin80:

Необходимо время открытия позиций сравнивать со временем открытия текущего бара Time[0]. Если время открытия позиции больше или равно времени открытия бара - експерт не открывает новые позиции. Когда появится новый бар Time[0] поменяет значение на позднее время и такое сравнение покажет, что на текущем (новом) баре позиция ещё не была открыта и можно торговать.

Кстати, ваш вопрос можно ещё разбить на 2 под-вопроса:
1. На текущем баре открылась позиция и успела закрыться, однако и так ждём новый бар.
2. На текущем баре открылась позиция и успела закрыться, тогда можно ещё раз на этом же бар открыть позицию (т.е. на 1 баре одновременно можно открыть 1 позицию).

в общем такая проблема: в один и тот бар на несколько минут условие для открытия ордера становится тру и ордер открывается. потом становится фолс и опять тру и открывается второй ордер. как с этим боросться? я придумал только открытие ордера раз в бар может есть другие варианты?
 
что такое детрендирование??? это типа "хватит трындеть"?
 
GarKain:
в общем такая проблема: в один и тот бар на несколько минут условие для открытия ордера становится тру и ордер открывается. потом становится фолс и опять тру и открывается второй ордер. как с этим боросться? я придумал только открытие ордера раз в бар может есть другие варианты?

Вижу, что вы используете флаг, который позволяет/запрещает открытие позиции. Не зная условие для флага невозможно что-либо подсказать. Я в своём советнике использую 2 подход при открытии позиии и могу предложить такой код:

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }
 
moskitman:
что такое детрендирование??? это типа "хватит трындеть"?

Применение к ряду фильтра низких частот == вычитание трендовой (наклонной) составляющей. простейший пример : наложить мувинг на цену, и потом показать разность в отдельном окне.
 
paladin80:

Вижу, что вы используете флаг, который позволяет/запрещает открытие позиции. Не зная условие для флага невозможно что-либо подсказать. Я в своём советнике использую 2 подход при открытии позиии и могу предложить такой код:



if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }

не совсем понял что куда и откуда.

 
У меня записано так:

если то-то и то-то, тогда равно тру

если равно тру то ордер открывается.



Если я запишу если то-то и то-то, то ордер открывается. это решит проблему?

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