# Ваши вопросы по языку MQL4

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2011-11-07 10:37
Ответов: 9576 | Просмотров: 1106998
Страница 474 из 479
Источник: https://forexsystemru.com/threads/65289/page-474

---

## star603 — 2024-11-18 20:22

> Цитата (MakarFX):
> f_IsNewBar() не позволяет

Намекнешь что не так с ней?

## MakarFX — 2024-11-18 23:19

> Цитата (star603):
> Намекнешь что не так с ней?

А что намекать, f_IsNewBar() = true на открытии бара, после первого тика = false, до нового бара

## star603 — 2024-11-19 07:58

> Цитата (MakarFX):
> А что намекать, f_IsNewBar() = true на открытии бара, после первого тика = false, до нового бара

Это я понимаю. Но когда на подходящей свече наступает условия открытия открытия не пррисходит.

## MakarFX — 2024-11-19 11:56

> Цитата (star603):
> Это я понимаю. Но когда на подходящей свече наступает условия открытия открытия не пррисходит.

Условие на ступает позже, когда f_IsNewBar() = false.
Поменяйте алгоритм срабатывания f_IsNewBar(), чтобы он проверялся после открытия ордера.

## MakarFX — 2024-11-19 12:09

> Цитата (star603):
> Это я понимаю. Но когда на подходящей свече наступает условия открытия открытия не пррисходит.

Пример для Вашего советника

```
datetime newbar=0;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(newbar!=Time)
     {
      if(OrdersTotal()==0 && Indi.Sar(1)< Open && Indi.Sar(0)>Open)
        {
         Open_Sell(); newbar=Time;
        }
      if(OrdersTotal()==0 && Indi.Sar(1)> Open && Indi.Sar(0)<Open)
        {
         Open_Buy(); newbar=Time;
        }
     }
   OrderModyfi(razmer_stopa(Magik),razmer_profita(Magik));
  }
```

## star603 — 2024-11-19 22:48

> Цитата (MakarFX):
> Пример для Вашего советника
>
>
> 
```
datetime newbar=0;
> //+------------------------------------------------------------------+
> //| Expert tick function                                             |
> //+------------------------------------------------------------------+
> void OnTick()
>   {
>    if(newbar!=Time)
>      {
>       if(OrdersTotal()==0 && Indi.Sar(1)< Open && Indi.Sar(0)>Open)
>         {
>          Open_Sell(); newbar=Time;
>         }
>       if(OrdersTotal()==0 && Indi.Sar(1)> Open && Indi.Sar(0)<Open)
>         {
>          Open_Buy(); newbar=Time;
>         }
>      }
>    OrderModyfi(razmer_stopa(Magik),razmer_profita(Magik));
>   }
```

не работает

## MakarFX — 2024-11-19 23:03

> Цитата (star603):
> не работает

У меня работает, все по условиям советника

## star603 — 2024-11-20 00:13

> Цитата (MakarFX):
> У меня работает, все по условиям советника

Странно почему у меня только 1 сделку открывает понять не могу.

## MakarFX — 2024-11-20 00:32

> Цитата (star603):
> Странно почему у меня только 1 сделку открывает понять не могу.

Покажите Ваш код

## star603 — 2024-11-20 22:03

> Цитата (MakarFX):
> Покажите Ваш код

## MakarFX — 2024-11-21 00:28

У меня работает

## star603 — 2024-11-21 06:36

> Цитата (MakarFX):
> У меня работает

В чем причина может быть ещё?

## MakarFX — 2024-11-21 12:44

> Цитата (star603):
> В чем причина может быть ещё?

С мои сетом у Вас работает?

## star603 — 2024-11-21 23:43

> Цитата (MakarFX):
> С мои сетом у Вас работает?

Тоже

## ИванМН — 2024-11-21 23:46

> Цитата (star603):
> Странно почему у меня только 1 сделку открывает понять не могу.

У Вас стоит два ограничения на открытие: контроль нового бара (newbar == Time) и контроль открытых позиций (OrdersTotal() == 0). Пока открытая позиция не закроется, новая не откроется, даже на новом баре.
Модификацию позиции надо переставить в однократный блок. Зачем Вам на каждом тике двигать ТП и СЛ?
И ещё добрый совет, проверенный временем: никогда не сравнивайте дробные числа напрямую. Рекомендую в начале каждой программы вставлять макрос #define ND(a,b,c) NormalizeDouble((a) - (b),(c)) и в дальнейшем для этой цели пользоваться им, сравнивая нормализованную разницу a и b c каким-либо числом. Это позволит Вам избежать многих проблем с разницей результатов прогонов при одних и тех же исходных.

## star603 — 2024-11-21 23:51

> Цитата (MakarFX):
> С мои сетом у Вас работает?

Тоже

> Цитата (ИванМН):
> У Вас стоит два ограничения на открытие: контроль нового бара (newbar == Time) и контроль открытых позиций (OrdersTotal() == 0). Пока открытая позиция не закроется, новая не откроется, даже на новом баре.
> Модификацию позиции надо переставить в однократный блок. Зачем Вам на каждом тике двигать ТП и СЛ?
> И ещё добрый совет, проверенный временем: никогда не сравнивайте дробные числа напрямую. Рекомендую в начале каждой программы вставлять макрос #define ND(a,b,c) NormalizeDouble((a) - (b),(c)) и в дальнейшем для этой цели пользоваться им, сравнивая нормализованную разницу a и b c каким-либо числом. Это позволит Вам избежать многих проблем с разницей результатов прогонов при одних и тех же исходных.

скажите пожайлуйста можно на примере?

## ИванМН — 2024-11-21 23:59

> Цитата (star603):
> скажите пожайлуйста можно на примере?

Вы о сравнении дробных? Пожалуйста.

Сравнение некоей переменной с нулём:

#define ND(a,b,c) NormalizeDouble((a) - (b),(c))

<...>

if (ND(LastOOP,0,2) > 0) /*а не if (LastOOP > 0). То есть из LastOOP вычитается второе число (в данном                                           случае ноль), разница нормализуется третьим значением макроса и уже
                                        этот результат сравнивается с нулём */
{
}

Сравнение двух переменных:

if (ND(MashB,LastOOP,2) > 0) /*а не if (MashB > LastOOP). Из MashB вычитается LastOOP, результат                                                               нормализуется (2 знака после запятой) и сравнивается с нулём */
{
}

## star603 — 2024-11-23 22:35

> Цитата (ИванМН):
> У Вас стоит два ограничения на открытие: контроль нового бара (newbar == Time) и контроль открытых позиций (OrdersTotal() == 0). Пока открытая позиция не закроется, новая не откроется, даже на новом баре.
> Модификацию позиции надо переставить в однократный блок. Зачем Вам на каждом тике двигать ТП и СЛ?
> И ещё добрый совет, проверенный временем: никогда не сравнивайте дробные числа напрямую. Рекомендую в начале каждой программы вставлять макрос #define ND(a,b,c) NormalizeDouble((a) - (b),(c)) и в дальнейшем для этой цели пользоваться им, сравнивая нормализованную разницу a и b c каким-либо числом. Это позволит Вам избежать многих проблем с разницей результатов прогонов при одних и тех же исходных.

1. У Вас стоит два ограничения на открытие: контроль нового бара (newbar == Time) и контроль открытых позиций (OrdersTotal() == 0). Пока открытая позиция не закроется, новая не откроется, даже на новом баре.

Да это понимаю. Но когда позиция закрывается новая не открывается.

2. Модификацию позиции надо переставить в однократный блок. Зачем Вам на каждом тике двигать ТП и СЛ?

Чтобы это сделать у меня  два варианта решения:
а) менять только на новом баре. (с этим проблемы)
б) либо также когда нет ордеров.

## ИванМН — 2024-11-24 00:18

> Цитата (star603):
> Но когда позиция закрывается новая не открывается.

У Вас открытие позиции должно происходить при смене направления Параболика? Тогда почему во вторых условиях в 9 и 13 строках функция Indi.Sar снимает показания с первого бара, а сравнение происходит с ценой Open нулевого бара? Показание на первом баре надо сравнивать с Open на первом же баре, на нулевом - с Open на нулевом (на первом Параболик над ценой, на нулевом - под ней и наоборот).

## star603 — 2024-11-24 18:15

> Цитата (ИванМН):
> У Вас открытие позиции должно происходить при смене направления Параболика? Тогда почему во вторых условиях в 9 и 13 строках функция Indi.Sar снимает показания с первого бара, а сравнение происходит с ценой Open нулевого бара? Показание на первом баре надо сравнивать с Open на первом же баре, на нулевом - с Open на нулевом (на первом Параболик над ценой, на нулевом - под ней и наоборот).

 Спасибо исправил. Осталось только открытие нового бара наладить.

---

Следующая страница: https://forexsystemru.com/threads/65289/page-475
