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

 
sergeev:
что именно не работает?


позиция не открывается.
 
IgorM:

попробуйте так:


или я чет не понимаю, или вы не правильно поняли задачу.

имеется цена Close[2] равная 1.34529 и цена Open[1] равная 1.34530

у меня есть условие, при котором позицию можно открыть.

Close[2] >= Open[1]

тк 10 - 20 пп (в 5-ти знаке) не играют большой роли, требуется заложить это в программу,

что если цена Close 1.34529 а цена Open 1.34530 то позицию все равно можно открыть.

 
kilnart:

позиция не открывается.

???

а при чем тогда здесь условие цен?

вы дальше по коду смотрите. у вас в другом ошибка.

 
дальше по графику идет цена устраивающая условие, и позиция открывается.
 
сейчас перепроверю код, отпишусь
 
kilnart:


или я чет не понимаю, или вы не правильно поняли задачу

......

тк 10 - 20 пп (в 5-ти знаке) не играют большой роли, требуется заложить это в программу

видимо, Вы сначала написали свой предыдущий пост, а затем лишь задумались чего хотите услышать в ответ....

действительно, 10-20 пп в 5-ти знаке не большого имеют значения, я показал как правильно сравнивать переменные типа double, подозреваю, что у Вас проблема не в составлении правильного условия. Попробуйте сначала сформулировать четкий однозначный вопрос, чтобы получить однозначный ответ

 
IgorM:

видимо, Вы сначала написали свой предыдущий пост, а затем лишь задумались чего хотите услышать в ответ....

действительно, 10-20 пп в 5-ти знаке не большого имеют значения, я показал как правильно сравнивать переменные типа double, подозреваю, что у Вас проблема не в составлении правильного условия. Попробуйте сначала сформулировать четкий однозначный вопрос, чтобы получить однозначный ответ


Только вот имхо, неправильно так doble сравнивать. Например, четырехзнак, цены 1.00014 и 1.00016, эквивалентно 1.0001 и 1.0002, но 1.00016 - 1.00014 < Point
 
220Volt:Только вот имхо, неправильно так doble сравнивать. Например, четырехзнак, цены 1.00014 и 1.00016, эквивалентно 1.0001 и 1.0002, но 1.00016 - 1.00014 < Point

Вы путаете сравнение double и округление, нужна четкая постановка вопроса: или округлить 5-ти знак в 4-х знак и в дальнейшем делать анализ в 4-х знаке или просто правильно сравнить два double.

Если сравнивать два double то та часть кода которую я привел будет работать правильно как для 4-х так и для 5-ти знака:

switch(Digits){
   case 5: if(1.00014-1.00016>=10*Point); условие= false, -0.00002 меньше 0.00001*10   // цена больше на 10 пп в 5-ти знаке
   case 4: if(1.0001-1.0002>=Point); условие= false, -0.0001 меньше 0.0001          // цена больше на 1 пп в 4-х знаке
}

полистайте: https://www.mql5.com/ru/articles/1561 и https://www.mql5.com/ru/forum/101433

ЗЫ: в моем коде ошибочка закралась: case нужно закрывать break, т.е. так:

switch(Digits){
   case 5: if(Close[2]-Open[1]>=10*Point);// цена больше на 10 пп в 5-ти знаке
           break;
   case 4: if(Close[2]-Open[1]>=Point);// цена больше на 1 пп в 4-х знаке
           break;
}
 
IgorM:

Вы путаете сравнение double и округление, нужна четкая постановка вопроса: или округлить 5-ти знак в 4-х знак и в дальнейшем делать анализ в 4-х знаке или просто правильно сравнить два double.

Если сравнивать два double то та часть кода которую я привел будет работать правильно как для 4-х так и для 5-ти знака:

полистайте: https://www.mql5.com/ru/articles/1561 и https://www.mql5.com/ru/forum/101433

ЗЫ: в моем коде ошибочка закралась: case нужно закрывать break, т.е. так:


Хотя Вы наверное правы, возможно для автора это и не важно. Я каждый пипс считаю, вот и смотрю на такие ситуации со своей точки зрения.
 

все. в конец запутался и голова уже не варит.

вот код

       double Low1=Low[iLowest(NULL,0,MODE_LOW,3,0)],
              Low2=Low[iLowest(NULL,0,MODE_LOW,20,0)];
         
         if(Low1<Low2 && Open[2]>Close[2])    
          {
            if(Open[1]<=Close[2] && Open[2]<Close[1])
             {
                 double sl=Low[iLowest(NULL,0,MODE_LOW,3,0)],
                        tp=Ask+(Open[2]-Low[2]);
                 OrderSend(Symbol(),OP_BUY,0.1,Ask,3,sl,tp);
                 return;
             }
          }

изобразить хочу следующее. мне нужно найти минимальную точку для 3-х последних свечей. сравнить ее с минимальной ценой 20-ти свечей, если 3 последние свечи находятся ниже, а свеча черная ( Open[2]>Close[2] ) значит смотрим дальше.

дальше мне нужно найти медвежье поглощение ( Open[1]<=Close[2] && Open[2]<Close[1] ).

и открыть позицию на покупку.

вроде все правильно, но чтото не так.

если поможете буду очень признателен.

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