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

Mirosha

Интересующийся
В данном случае сам индикатор не нужен, воспользуйтесь ф-цией iVolume
PHP:
long  iVolume(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

Спасибо за ответ , но не подскажите поподробнее в чем отличие между красными и зелеными линиями индикатора.
 

mobidik

-----
это у нас тут мобидик мастер)))

И к чему тут твой сарказм?

Спасибо за ответ , но не подскажите поподробнее в чем отличие между красными и зелеными линиями индикатора.

Если значение Volume на текущем баре больше за предыдущие - цвет зеленый, если меньше - красный.
 

Gnn-life

Местный знаток
И к чему тут твой сарказм?



Если значение Volume на текущем баре больше за предыдущие - цвет зеленый, если меньше - красный.

Сашка) нет никакого сарказма) НАОБОРОТ уважуха и респект! Считаю тебя очень умным прогером, правда):):embrace:
 

vladradon

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

CrazyDoc

Новичок форума
Доброго времени суток. Подскажите пожалуйста способ рассчитать(в теле бара, т.е. первое соприкосновение) точку пересечения МА и цены. Т.е. в реальном времени, придать значение переменной равное уровню цены в момент пересечения.
 

matro3

Почетный гражданин
Рассчитываешь МА_0 и МА_1 - _http://docs.mql4.com/ru/indicators/ima
Далее: Close[1]<MA_1 && Close[0]>MA_0 или Close[1]<MA_1 && Close[0]<MA_0
 
Последнее редактирование модератором:

ansol

Местный знаток
Рассчитываешь МА_0 и МА_1 - _http://docs.mql4.com/ru/indicators/ima
Далее: Close[1]<MA_1 && Close[0]>MA_0 или Close[1]<MA_1 && Close[0]<MA_0

Может быть, вместо Close[0] использовать Bid, а вместо Close[1] - Open[0] ?
Разница между закрытием предыдущей и открытием следующей - гэп, который случается нередко, не?
 
Последнее редактирование модератором:

vladradon

Программист
Доброго времени суток. Подскажите пожалуйста способ рассчитать(в теле бара, т.е. первое соприкосновение) точку пересечения МА и цены. Т.е. в реальном времени, придать значение переменной равное уровню цены в момент пересечения.
Насколько я понял:
double MA, Price;
int UpDown;
void OnInit()
{
MA = iMA(NULL, 0, period, 0, 3, 0, 0);
if (Bid>=MA) UpDown=1; //если текущая цена при первом запуске сова выше или равна текущего показания машки, то флаговой переменной присваиваем 1 - запоминаем положение графика относительно машки, как высшее
if (Bid<MA) UpDown=2; //запоминаем, как низшее относительно показаний машки
}
void OnTick()
{
MA = iMA(NULL, 0, period, 0, 3, 0, 0);//period и 3-ка - это параметры машки, которые уже сам вставишь
if (IsNewBar)
{
if (UpDown==1 && MA<Bid) {Price=Bid; UpDown=2;}
if (UpDown==2 && MA>Bid) {Price=Bid; UpDown=1;}
}
//Далее уже имеем цену Price для торгов после последнего пересечения
Дополнительная функция для определения открытия нового бара:
bool IsNewBar()
{
static datetime Told;
datetime Tnew[1];
CopyTime(Symbol(),PERIOD_CURRENT,0,1,Tnew);
if(Tnew[0]!=Told)
{
Told=Tnew[0];
return(true);
}
return(false);
}
Параметр UpDown можно использовать для определения последнего направления пересечения цены и машки UpDown=1 - последнее пересечение было сверху вниз и UpDown=2 - соответственно наоборот - снизу вверх.
 
Последнее редактирование:

vlad_123

Местный знаток
Насколько я понял:
Попробуйте оформлять вставки кода с использованием:
HTML:
[CODE]Здесь идет код мега-рубилки баксов[/CODE]
Который будет выглядеть так:
Код:
Здесь идет код мега-рубилки баксов

А то оформленный в виде обычного неотформатированного текста код читать невозможно, да и нет никакого желания...
 

CrazyDoc

Новичок форума
matro3, ansol, vladradon спасибо за отклики, сделал так(это тестовый модуль):
double MA, Price;
int UpDown;
void OnInit()
{
MA = iMA(NULL, 0, 15, 0, 0, 0, 0);
if (Bid>=MA) UpDown=1; //если текущая цена при первом запуске сова выше или равна текущего показания машки, то флаговой переменной присваиваем 1 - запоминаем положение графика относительно машки, как высшее
if (Bid<MA) UpDown=2; //запоминаем, как низшее относительно показаний машки
}
void OnTick()
{
MA = iMA(NULL, 0, 15, 0, 3, 0, 0);//period и 3-ка - это параметры машки
if (UpDown==1 && MA<Bid) {Price=MA; UpDown=2; Alert(Price);}
if (UpDown==2 && MA>Bid) {Price=MA; UpDown=1; Alert(Price);}
}
Т.к. требовалось найти пересечение именно в момент движения, а не по сформировавшемуся бару.

Если кому-нибудь интересно, библиотеки которые использую для определения нового бара, mql4(там же и новое событие OnNewBar()): https://yadi.sk/d/B6s-GGY8h2WMm https://yadi.sk/d/XACpJzUwh2WMs
 

vladradon

Программист
Попробуйте оформлять вставки кода с использованием:
HTML:
[CODE]Здесь идет код мега-рубилки баксов[/CODE]
Который будет выглядеть так:
Код:
Здесь идет код мега-рубилки баксов

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

matro3

Почетный гражданин
Так все же лучше. Вы согласны?
Код:
double MA,Price;
   int UpDown;
   void OnInit()
     {
      MA=iMA(NULL,0,period,0,3,0,0);
      if(Bid>=MA) UpDown=1; //если текущая цена при первом запуске сова выше или равна текущего показания машки, то флаговой переменной присваиваем 1 - запоминаем положение графика относительно машки, как высшее
      if(Bid<MA) UpDown=2; //запоминаем, как низшее относительно показаний машки
     }
   void OnTick()
     {
      MA=iMA(NULL,0,period,0,3,0,0);//period и 3-ка - это параметры машки, которые уже сам вставишь
      if(IsNewBar)
        {
         if(UpDown==1 && MA<Bid) {Price=Bid; UpDown=2;}
         if(UpDown==2 && MA>Bid) {Price=Bid; UpDown=1;}
        }
      //Далее уже имеем цену Price для торгов после последнего пересечения
      Дополнительная функция для определения открытия нового бара:
      bool IsNewBar()
        {
         static datetime Told;
         datetime Tnew[1];
         CopyTime(Symbol(),PERIOD_CURRENT,0,1,Tnew);
         if(Tnew[0]!=Told)
           {
            Told=Tnew[0];
            return(true);
           }
         return(false);
        }
 

vladradon

Программист
Так все же лучше. Вы согласны?
Код:
double MA,Price;
   int UpDown;
   void OnInit()
     {
      MA=iMA(NULL,0,period,0,3,0,0);
      if(Bid>=MA) UpDown=1; //если текущая цена при первом запуске сова выше или равна текущего показания машки, то флаговой переменной присваиваем 1 - запоминаем положение графика относительно машки, как высшее
      if(Bid<MA) UpDown=2; //запоминаем, как низшее относительно показаний машки
     }
   void OnTick()
     {
      MA=iMA(NULL,0,period,0,3,0,0);//period и 3-ка - это параметры машки, которые уже сам вставишь
      if(IsNewBar)
        {
         if(UpDown==1 && MA<Bid) {Price=Bid; UpDown=2;}
         if(UpDown==2 && MA>Bid) {Price=Bid; UpDown=1;}
        }
      //Далее уже имеем цену Price для торгов после последнего пересечения
      Дополнительная функция для определения открытия нового бара:
      bool IsNewBar()
        {
         static datetime Told;
         datetime Tnew[1];
         CopyTime(Symbol(),PERIOD_CURRENT,0,1,Tnew);
         if(Tnew[0]!=Told)
           {
            Told=Tnew[0];
            return(true);
           }
         return(false);
        }

Там код разделен на 3 части, которые я описал - кому лучше? Уж точно не тому, кому это надо! А вот если в таком варианте выложить, то точно ничего работать не будет! Я Вам удивляюсь...)))
 

matro3

Почетный гражданин
Там код разделен на 3 части, которые я описал - кому лучше? Уж точно не тому, кому это надо! А вот если в таком варианте выложить, то точно ничего работать не будет! Я Вам удивляюсь...)))

А я удивляюсь Вам... ))
Я просто скопировал код, не разбирался будет он работать или нет.
Т.к. в нашей беседе речь идет о читаемости, легком восприятии кода.
Я не настаиваю, пишите как хотите.
 

vladradon

Программист
А я удивляюсь Вам... ))
Я просто скопировал код, не разбирался будет он работать или нет.
Т.к. в нашей беседе речь идет о читаемости, легком восприятии кода.
Я не настаиваю, пишите как хотите.
Без обид! Я просто хотел обозначить, что код блочный и его блоки нужно уже в самом сове распределить по нужным местам: глобальные параметры, Онинит, Онтик(Старт) и отдельная функция, которая вне функции Онтик (Старт). Если все в кучу смешать, то копированием всего кода сразу, только убьешь уже имеющийся код. Спасибо за понимание!;)
 
Последнее редактирование:

CrazyDoc

Новичок форума
Пожалуйста подскажите как для фиксированной суммы пунктов рассчитать лот ордера выводящих несколько ордеров в безубыток? Т.е. к примеру есть ордер0+ордер1+ордер 2, их общий профит Х - какой лот поставить в следующем ордере, чтобы через N(константа) пунктов общий профит стал равен нулю?
 

vlad_123

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