Несколько условий на покупку в СОВЕТНИКЕ! ВОПРОС!!! - страница 3

 

Как же быть люди - подскажите?

 
slayer:

Как же быть люди - подскажите?

 

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

Кстати, странная функция и используете Вы ее странно. Я имею ввиду это :

int ExistPositions(string sy="", int op=-1, int mn=12345, datetime ot=0) {
  int i, k=OrdersTotal();
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
тип возвращаемого значения инт, а возвращает боол.... и сравниваете не на истинность а с единицей ??????? Понятно, что типы совместимы, но во-первых это плохой стиль программирования, а во-вторых - дополнительный  источник ошибок.


Думаю, Вам все-таки нужно прочитать "инструкцию", то есть начать изучать учебник. Можно еще воспользоваться поиском - эти вопросы освещались неоднократно.

Успехов.

 
VladislavVG:
slayer:

Как же быть люди - подскажите?

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

Кстати, странная функция и используете Вы ее странно. Я имею ввиду это :

int ExistPositions(string sy="", int op=-1, int mn=12345, datetime ot=0) {
  int i, k=OrdersTotal();
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
Понятно, что типы совместимы, но во-первых это плохой стиль программирования, а во-вторых - дополнительный источник ошибок.

ну вообще-то не я автор функции...ее придумал великий KimIV ..... Я думаю что функция в полне удачная, просто у меня не хватает опыта ее правильно приспособить....Поээтому я здесь за помощью

 
slayer:

ну вообще-то не я автор функции...ее придумал великий KimIV ..... Я думаю что функция в полне удачная, просто у меня не хватает опыта ее правильно приспособить....Поээтому я здесь за помощью

В данном случае нет разницы кто придумал. Исправьте тип возвращаемого значения - измените на боол.

Используют такие функции так :

if(ExistPositions(...))
{
// Ваш код
}
 
или так :
if(!ExistPositions(...))
{
// Ваш код
}

Успехов.

ЗЫ и почитайте учебник - полезно весьма. В МКЛ есть специфика. Многие вопросы отпадут.

 
VladislavVG:
slayer:

ну вообще-то не я автор функции...ее придумал великий KimIV ..... Я думаю что функция в полне удачная, просто у меня не хватает опыта ее правильно приспособить....Поээтому я здесь за помощью

В данном случае нет разницы кто придумал. Исправьте тип возвращаемого значения - измените на боол.

Используют такие функции так :

if(ExistPositions(...))
{
// Ваш код
}
 
или так :
if(!ExistPositions(...))
{
// Ваш код
}

Успехов.

ЗЫ и почитайте учебник - полезно весьма. В МКЛ есть специфика. Многие вопросы отпадут.

Хорошо! Спасибо!!!

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