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

 
hoz:


:) А почему бы как функцию нового бара не реализовать данный момент? Вам нужно чтоб раз сутки, т.е. начиная с 0.00 времени чтоб индюк делал перерасчёт. Значит делаем просто. В старте есс-но:

По-моему это самый верный путь хоть и примитивен!
Vinin, Ваш тёзка, мне ответил, что он должен меняться сам, но этого никогда не было, только с компиляцией. Спасибо за идею использовать контроль бара! На один график поставил один вариант, на другой Ваш вариант. Завтра посмотрю, что сработает.
 
hoz:


 Тока не либо а И. Там же знак &&

ИЛИ. Потому что условие И не выполняется, когда хотя бы один из операндов равен false (первый ИЛИ второй) - в будевой логике это называется "закон Де Моргана"

 Я всё понимаю. Но тут смысл в том, что:

Переменная index  вообще по коду имеет значение Bar - IndicatorCounted()

Т.е. на текущем баре равно 1, а на новом 2

 Входит в функцию IsUpFractal() значение либо по очередно, либо 1 если бар не новый ещё, так?

Значится,  переменная i будет иметь фиксированное значение т.к. входной параметр index тоже фиксированный. Значит цикл будет всегда прерываться после первой итерации. Зачем тогда цикл?

На каждом шаге цикла переменная i уменьшается на 1 (i--), поэтому i пробегает все значения от index+g_center-1 до нуля. Кроме того, заметьте, что при первом старте индикатора IndicatorCounted() дает 0, т.е. index будет бежать по всем барам, а значит i каждый раз присваивается index+g_center-1, а затем бежит вниз, пока не достигнет 0 бара ИЛИ пока cnt не станет равно g_center, т.е. пока не перестанет выполняться условие цикла (ну, или пока не произойдет вызод по return, расположенному в самом теле цикла).
 
alsu:

ИЛИ. Потому что условие И не выполняется, когда хотя бы один из операндов равен false (первый ИЛИ второй) - в будевой логике это называется "закон Де Моргана"

 Ого. Жесть какая. Сколько я использовал эти операторы.. а тут как-будто "баран на новые ворота смотрю". Закон я прочитал, написано как-то дико заумно. Там описывается ситуация с отрицанием. Я так понимаю, данный приём касается только для ситуаций с отрицанием? Я имею ввиду, если какая-нибудь. из булевых переменных не равна True.
 

 Я по ходу понял что не втыкал. Суть такая, что отличие тут следующее. Это индикатор, потому мне ещё не привычно так думать.. Значится при первом вызове индикатора бары не просчитаны и index будет равен либо количеству баров на графике, либо, если условиями ограничен расчёт баров значению какой-то переменной limitReCalcBar.

По сути переменная g_center = 2 исходя из кода.  limitReCalcBar = 5000 тоже исходя из внешних переменных.

При первом запуске индикатора в функцию:

//+-------------------------------------------------------------------------------------+
//| Определение наличия верхнего фрактала на указанном баре                             |
//+-------------------------------------------------------------------------------------+
bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

 передаётся значение 5000 соответственно.

 i = index + g_center - 1 = 5000 + 2 - 1 = 5001 

Смотрим в цикл:

for (; i >= 0 && cnt < g_center; i--)

  Нужно просчитать 5000 баров. После первых двух баров т.е. 0-го и 1-го у нас становится ложных условие cnt < g_center. Как тогда просчитывать все 5000 баров? Вот этот момент я хочу осилить. Для профи видать это элементарно, но я не въезжаю. Если, конечно, оператор && воспринимать как ИЛИ, то всё станет на свои места.. НО это как-то противоречит тому, что я уже использовал в советниках и вообще когда либо встречал.

 Ну а когда всё будет расчитано, тогда всё уже просто. Через index на каждом тике будет передаваться 0 и 1 там условия соблюдаться будут в цикле и нет никаких сложностей как я вижу. 

 

Уважаемые програмисты! Подскажите пожалуйста, возможно ли написать такой скрипт, который следит за открытыми позициями и при достижении какой то позицией определенного уровня убытка, часть позиции закрыть. Предельный уровень убытка высталять либо в валюте депозита, либо в пунктах. Таким образом если цена идет против нас, мы уменьшили убыток, а если цена развернулась в плюс, то вместо убытка мы можем получить и какой то профит или еще меньший убыток, взависимости от выставленного ТП. Скрипт должен работать постоянно в режиме советника.  Он является помошником к любой торговой системе или эксперту.

 
destan:

Уважаемые програмисты! Подскажите пожалуйста, возможно ли написать такой скрипт, который следит за открытыми позициями и при достижении какой то позицией определенного уровня убытка, часть позиции закрыть. Предельный уровень убытка высталять либо в валюте депозита, либо в пунктах. Таким образом если цена идет против нас, мы уменьшили убыток, а если цена развернулась в плюс, то вместо убытка мы можем получить и какой то профит или еще меньший убыток, взависимости от выставленного ТП. Скрипт должен работать постоянно в режиме советника.  Он является помошником к любой торговой системе или эксперту.

Возможно. Здесь помогут.

 
valeryk:

Возможно. Здесь помогут.


Есть такая штука стоп лосс называется!!!
 

Здравствуйте!Возник такой вопрос.В терминале открыто несколько одинаковых окон.К каждому из них подключен один и тот же советник,но с разными настройками.!Подскажите пожалуйста,есть-ли функции или готовые алгоритмы в MQL4 позволяющие определить,из какого окна открыт рыночный ордер?

 
badbadboy:

Здравствуйте!Возник такой вопрос.В терминале открыто несколько одинаковых окон.К каждому из них подключен один и тот же советник,но с разными настройками.!Подскажите пожалуйста,есть-ли функции или готовые алгоритмы в MQL4 позволяющие определить из какого окна открыт рыночный ордер?

Логичнее сделать копии советника, назвав по-разному, и в журнале всё увидите, какая копья и, соответственно, в каком окне Вы уже сообразите!
 
borilunad:
Логичнее сделать копии советника, назвав по-разному, и в журнале всё увидите, какая копья и, соответственно, в каком окне Вы уже сообразите!

Я то соображу,а как советнику об этом сообщить?
 
borilunad:
Логичнее сделать копии советника, назвав по-разному, и в журнале всё увидите, какая копья и, соответственно, в каком окне Вы уже сообразите!

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