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

 
gyfto:


Объясню другими словами: это самообразование, я самоучка всю свою жизнь, поэтому я НЕ знаю, какой подход у вас принят. Я НЕ знаю, что у вас принято, что нет.

Ладно, вернёмся к свечам.  Предположим у нас i_AnyBarsToHistory = 30,   i_sequentBarsСount = 3. Если в окне из 30 свечей было срабатывание cntUp == i_sequentBarsСount и cntDn == i_sequentBarsСount по одному разу, то что тогда должно произойти? Или считается всегда только по одному счётчику на проход?

Да, и зачем мы досрочно выходим из цикла, не дойдя до Close[1]. 


 Суть такая.Если цикл от 30 до 3, то расчёт идёт от индекса 30 к индексу 3 соответственно, включительно.

Если на текущем баре при проходе свеча требуемого признака, добавится 1 к счётчику, если дальше  при проходе свеча требуемого признака, добавим ещё 1 к счётчику. И т.д. пока не наткнёмся на бар, который не соответствует требуемому признаку. Если бар не соответствует требуемому признаку, то счётчик обнуляем, и, дальше анализируем ситуацию, т.е. ведём расчём дальше, то  циклу, пока не дойдём до бара с индексом 3. Просто всё.

 Надеюсь, я понятно объяснил.

 
hoz:

int signal = GetGeneralSignal();


можно заменить на

   if(GetMa(2)-GetMa(1)<σ) return; else int cross=MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1));
   for (int i=i_AnyBarsToHistory; i>=1; i--){
                if(cross*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cnt++; else cnt=0;
   }
   if(cnt >= i_sequentBarsСount){
                switch(cross+1){
                        case 0: OpenBuy(); break;
                        case 2: OpenSell(); break;
                }
   }

 Отследи сам, cross=+1 или -1 соответствует-таки OpenBuy() или OpenSell() (и close-open или open-close), это я в качестве демонстрации возможной структуры только привёл. σ у нас здесь какое-то назначенное бесконечно малое значение, аналог нуля.

tommy27:

Помогите, не могу сообразить, как сделать так, чтобы в индикаторе сравнивалось заданное количество последних баров и подсчитывалось сколько из них было вверх, сколько вниз и сколько пинбаров и у кого какие цены закр/откр, хай/лоу и объёмы?

Нужно сделать это именно в индикаторе. 


Устанавливаем CountedBars на определённое тобой окно свечей (напр., 30), и цикл по CountedBars с декрементом. Вверх или вниз, бычья или медвежья, смотри по разности двух соседних Close[]. Пинбар смотри по локальному максимуму или минимуму хаёв или лоу, и отклонение этого максимума или минимума от находящихся рядом значений. Если отклонение больше скольки-то установленным тобой процентам, то это пинбар. 

 
Добрый день. Подскажите как программно определить пересечение уровня 38.2 у объекта дуга фибоначчи ?
 

Здравствуйте,

Всех с прошедшими праздниками!

Есть такой торговый терминал OEC нужен к нему простенький индикатор спрэда

Может кто сможет написать, или хоть чем то помочь

а на мт4 он выгледит вот так 

Файлы:
 
ADGgeek:

Здравствуйте,

Всех с прошедшими праздниками!

Есть такой торговый терминал OEC нужен к нему простенький индикатор спрэда

Может кто сможет написать, или хоть чем то помочь

а на мт4 он выгледит вот так 


Могу посоветовать спросить на Пауке. А вообще только могу процитировать:

GaryKa:
Добавьте в описание пунктуации, и определение своих понятий (например "свое число") и сюда. А в этой ветке помогают только тем кто своими руками (и то по настроению)

  Это ко всем относится. На Пауке, скорее всего, ответят так же.

 

это я и искал спасибо Garyka! C раздниками вас прошедшими и наступающими!

 

Всех с праздниками!

Подскажите, что имеет в виду терминал, когда во вкладке "эксперты" пишет uninit reason 5?

Спасибо.

 
CYBOPOB:

Всех с праздниками!

Подскажите, что имеет в виду терминал, когда во вкладке "эксперты" пишет uninit reason 5?

Спасибо.


https://docs.mql4.com/ru/constants/uninit
 
hoz:

Просто всё.


Насколько понял из сравнения вашего описания с вашим кодом, у вас они расходятся, т.к. в коде происходит досрочный выход из цикла по достижению i_sequentBarsСount:

hoz:

for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if (directionMA == CROSS_UP)
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)
             cntDn++;
         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)
             cntDn = 0;
                                                                                        
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Open[i] - Close[i] = ", Open[i] - Close[i], "; cntDn = ", cntDn);

         if (cntDn == i_sequentBarsСount)            //<--
             return (REQUIRED_SEQUENTIAL_BEARS_GOT); //<--
      }

      if (directionMA == CROSS_DN)
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)
             cntUp++;
         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)
             cntUp = 0;
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);

         if (cntUp == i_sequentBarsСount)            //<--
             return (REQUIRED_SEQUENTIAL_BULLS_GOT); //<--
   }
hoz:

Если цикл от 30 до 3, то расчёт идёт от индекса 30 к индексу 3 соответственно, включительно.

Если бар не соответствует требуемому признаку, то счётчик обнуляем, и, дальше анализируем ситуацию, т.е. ведём расчём дальше, по  циклу, пока не дойдём до бара с индексом 3.

 
gyfto:


Насколько понял из сравнения вашего описания с вашим кодом, у вас они расходятся, т.к. в коде происходит досрочный выход из цикла по достижению i_sequentBarsСount:


 


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

Щяс накидаю что думаю, и отпишусь. 

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