Как найти время бара, в котором пересеклись скользящие средние? (код внутри) - страница 3

 

Да, мне это нужно именно для графика PERIOD_H1. Поскольку я могу менять таймфреймы и хочу, чтобы это было жестко закодировано для данного ТФ.

(Меня беспокоит, что я делаю это неправильно - особенно то, что вы уже дважды написали мне WHRoeder относительно MA's и оператора if... - Так что я готовлюсь к некоторой пощечине, но я думаю, что это скажет мне о баре, где пересеклись МА (ниже). Так что это наверняка сработает, если применить это к iBarShift...)?

if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[1];
 
WHRoeder:

Несколько скользящих средних не пересекутся одновременно.

Почему вы дважды постите? На ваш вопрос уже был дан ответ.

Найдите самый ранний бар, где все они были в правильном порядке.


int DIR = 0;
for(int iBar = 0; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if(     MA20 > MA5 && MA5 > ...) DIR = -1;
   else if(MA20 < MA5 && MA5 < ...) DIR = +1; // All fanning up.
   else if (DIR != 0){ iBar--; break; }       // Last one was cross.
}
Могу я спросить, какова цель переменных бара? Также, что означает "--"? Два знака "--" и "!" (если вы будете так добры?). Я просмотрел раздел помощи, но так и не понял, для чего они нужны).
 
DomGilberto:

Могу ли я узнать, каково назначение переменных Bar? Также, что означает "--"? Два знака "--" и "!" (если вы будете так добры? Я просмотрел весь раздел помощи, но не нашел, для чего они нужны).


И могу ли я спросить, почему basic из книги до сих пор неизвестен?

https://book.mql4.com/basics/expressions

 
Ваш вопрос похож на вопрос: "Что это за маленькая металлическая штучка (ключ) и почему одна штука имеет форму прямоугольника (газ), а другие - квадратные?".
научитесь кодировать.
 

Но я знаю, что такое газовый ключ... - это более просто, чем кодирование...

Вы правы - мне нужно прочитать все до конца.

Это потому что я лучше всего учусь методом проб и ошибок (я парень с руками, когда дело доходит до запоминания знаний). Это помогает мне понять логику, когда я ее вижу. К тому же сайт MQL4 не всегда четко объясняет, как все это работает вместе.

Так что, отвечая на ваш вопрос, deVries, именно поэтому я знаю некоторые основы и некоторые более продвинутые вещи, но они приходят обрывочно, потому что мне нравится играть и учиться таким образом.

Извините, если я становлюсь занудой!

EDIT - Я все еще не понимаю "Bar" часть того кода, который вы написали WHRoeder - я не уверен, что это правильно?

 
DomGilberto: Но я знаю, что такое газовый ключ... - это более просто, чем кодирование...

Но стали бы вы пытаться водить машину, не зная, что это такое? Это было бы идиотизмом.

Вы пытаетесь кодировать, не зная, что такое "--" и "!". В чем разница?

 

!=True, если x не равен y -(DIR != 0) - Если DIR (который равен 0) не равен "0", то оператор Break вернет управление оператору for. И запустит цикл снова.

-- Вычитание 1 из значения переменной. Итак, "iBar--;" = iBar = 0, поэтому вычитание 1 = -1?

Эй - я действительно пытаюсь здесь. Мне жаль, если я не учусь так же быстро, как некоторые люди (и не думаете ли вы, что я бы предпочел быть таким! Я бы предпочел научиться сам и получить это, без необходимости просить чьей-то помощи!), но я стараюсь изо всех сил. Возможно, я не самая яркая искра в мире... Так что простите меня хотя бы за это...

 
DomGilberto:

!=True, если x не равен y -(DIR != 0) - Если DIR (который равен 0) не равен "0", то оператор Break вернет управление оператору for. И запустит цикл снова.

-- Вычитание 1 из значения переменной. Итак, "iBar--;" = iBar = 0, поэтому вычитание 1 = -1?

Эй - я действительно пытаюсь здесь. Мне жаль, если я не учусь так же быстро, как некоторые люди (и не думаете ли вы, что я бы предпочел быть таким! Я бы предпочел выучить все сам и получить это, без необходимости просить кого-то о помощи!), но я стараюсь изо всех сил. Возможно, я не самая яркая искра в мире... Так что простите меня хотя бы за это...


В этом цикле

for(int iBar = 0; iBar < Bar; iBar++){//....do some stuff and come back}

iBar имеет здесь различные значения, пока он меньше Bar, он будет иметь значение на 1 больше

iBar--;

значит....

iBar = iBar - 1;
 
int DIR = 0;
for(int iBar = 0; iBar < Bars; iBar++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,1); 
   double i2  = iMA(NULL,60,5,0,1,0,1);
   double i3  = iMA(NULL,60,8,0,1,0,1);
   double i4  = iMA(NULL,60,10,0,1,0,1);  
   double i5  = iMA(NULL,60,12,0,1,0,1);
   double i6  = iMA(NULL,60,15,0,1,0,1);  
   double i7  = iMA(NULL,60,30,0,1,0,1);
   double i8  = iMA(NULL,60,35,0,1,0,1);
   double i9  = iMA(NULL,60,40,0,1,0,1);
   double i10 = iMA(NULL,60,45,0,1,0,1);
   double i11 = iMA(NULL,60,50,0,1,0,1);
   double i12 = iMA(NULL,60,60,0,1,0,1); 
   double ema21 = iMA(NULL,60,21,0,1,0,1);

   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
   
   if (DIR != 0)
   { 
   iBar--; break; 
   }       // Last one was cross.

Ах - я думаю, что теперь у меня все работает - просто смотрел на Bar некоторое время, а потом понял :) - Я начинаю понимать, что то, что я пытаюсь закодировать, немного сложнее, чем я сначала думал. Мне нужно, чтобы MA's поворачивались и веером поднимались или опускались (в зависимости от того, покупка это или продажа). Если она развернулась вверх (надолго), они не всегда должны быть в правильном порядке - это просто случай, когда сначала нужно определить, когда они все сложены и развернулись в правильном порядке - с этого момента все, что я хочу, это чтобы цена проверила 21 ema, а затем разместила ордер выше максимумов. Я, конечно, поиграю! НЕ ожидаю, что кто-то напишет мне код - просто пишу свои мысли вслух.

Спасибо!

 
Исправьте отступы или отсутствующие скобки
Размещенный код
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
Правильно расставленные отступы
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
   triggerBarTime = Time[1];
   if(Low[1]<ema21) OrderEntry(0);
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
   triggerBarTime1 = Time[1];
   if(High[1]>ema21)  OrderEntry(1);
Правильно расставленные скобки
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21) OrderEntry(0);
   }
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)  OrderEntry(1);
   }
Причина обращения: