Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1954

 
Valeriy Yastremskiy #:

Изучить функцмм if, основы языка, получение данных из таймсерий. Можно взять так же код из кодобазы похожего индикатора и разобрать, можно прочитать учебник Ковалева.

Мало данных от Вас, поэтому такие и ответы.

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

Добрый день) Вот я и начал с написания простым языком алгоритма и условия для индикатора. Сразу же и уперся - как ему начать объяснять, что там где цена изменила направление - это есть уровень. Либо это на шпильке, либо цена просто развернулась... Видать здесь надо чтоб индикатор в буфере хранил данное среднего значения свечи за некий период. То есть ATR за 1000 свеч, допустим. И если цена падает, потом разворачивается и вырастает на 2 ATR допустим, то low той свечи где разворот пошел и будет уровнем. По сути даже и уровень сразу не поставится, а сначала дождётся движения вверх на 2 ATR, и при удачи уже потом отобразит уровень на low. Как то так...

Разобрать похожие индикаторы я тоже думал над этим, тот же самый zig-zag и фрактал ведь тоже как-то показывают вершины и впадины. Я просто не торгую по индикаторам, поэтому с ними практически не знаком.

Вот, только дошел в учебнике до раздела функции, сейчас буду изучать)))

 
to_ha #:

Добрый день) Вот я и начал с написания простым языком алгоритма и условия для индикатора. Сразу же и уперся - как ему начать объяснять, что там где цена изменила направление - это есть уровень. Либо это на шпильке, либо цена просто развернулась... Видать здесь надо чтоб индикатор в буфере хранил данное среднего значения свечи за некий период. То есть ATR за 1000 свеч, допустим. И если цена падает, потом разворачивается и вырастает на 2 ATR допустим, то low той свечи где разворот пошел и будет уровнем. По сути даже и уровень сразу не поставится, а сначала дождётся движения вверх на 2 ATR, и при удачи уже потом отобразит уровень на low. Как то так...

Разобрать похожие индикаторы я тоже думал над этим, тот же самый zig-zag и фрактал ведь тоже как-то показывают вершины и впадины. Я просто не торгую по индикаторам, поэтому с ними практически не знаком.

Вот, только дошел в учебнике до раздела функции, сейчас буду изучать)))

ещё раз вопрос - сами вы как эти уровни размечаете ? На бумаге сформулируйте свои правила и попробуйте им следовать. 

"я художник и так вижу" на функции/методы/программы не переводится никак

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

должны быть в наличии однозначные правила для-самого-себя.

----

Когда формализовано и повторимо - вот тогда можно браться за изучение MQL или раздела фриланс, от настроения

 
to_ha #:

Добрый день) Вот я и начал с написания простым языком алгоритма и условия для индикатора. Сразу же и уперся - как ему начать объяснять, что там где цена изменила направление - это есть уровень. Либо это на шпильке, либо цена просто развернулась... Видать здесь надо чтоб индикатор в буфере хранил данное среднего значения свечи за некий период. То есть ATR за 1000 свеч, допустим. И если цена падает, потом разворачивается и вырастает на 2 ATR допустим, то low той свечи где разворот пошел и будет уровнем. По сути даже и уровень сразу не поставится, а сначала дождётся движения вверх на 2 ATR, и при удачи уже потом отобразит уровень на low. Как то так...

Разобрать похожие индикаторы я тоже думал над этим, тот же самый zig-zag и фрактал ведь тоже как-то показывают вершины и впадины. Я просто не торгую по индикаторам, поэтому с ними практически не знаком.

Вот, только дошел в учебнике до раздела функции, сейчас буду изучать)))

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

 
Maxim Kuznetsov #:

"я художник и так вижу" 

Valeriy Yastremskiy #:

 т.е. надо знать предыдущую цену тика или бара и сравнивать ее с текущей ценой. 

Спасибо всем за ответы и советы)

Ещё хочу спросить у вас, а возможен ли какой ни будь вариант автоматического заполнения комментария к ордеру. Сложность в том, что сейчас вручную приходится высчитывать и заносить в таблицу параметры при которых открылся ордер. А это иногда много времени занимает, учитывая то, что я в основном лимитниками торгую, а параметры при срабатывании лимитника одни, а спустя время уже другие. Просто хочется понимать - могут ли вносится туда данные при открытии автоматически? если - ДА, то чем это делается?


 
to_ha #:

Спасибо всем за ответы и советы)

Ещё хочу спросить у вас, а возможен ли какой ни будь вариант автоматического заполнения комментария к ордеру. Сложность в том, что сейчас вручную приходится высчитывать и заносить в таблицу параметры при которых открылся ордер. А это иногда много времени занимает, учитывая то, что я в основном лимитниками торгую, а параметры при срабатывании лимитника одни, а спустя время уже другие. Просто хочется понимать - могут ли вносится туда данные при открытии автоматически? если - ДА, то чем это делается?


Скриптом или советником. Но для этого надо знать язык программирования мкл 4 или 5

 
to_ha #:

Спасибо всем за ответы и советы)

Ещё хочу спросить у вас, а возможен ли какой ни будь вариант автоматического заполнения комментария к ордеру. Сложность в том, что сейчас вручную приходится высчитывать и заносить в таблицу параметры при которых открылся ордер. А это иногда много времени занимает, учитывая то, что я в основном лимитниками торгую, а параметры при срабатывании лимитника одни, а спустя время уже другие. Просто хочется понимать - могут ли вносится туда данные при открытии автоматически? если - ДА, то чем это делается?


Просто можно открывать ордера скриптом, если не надо дальше следить за лимитником или советник сделать\заказать чтобы открывал и сопровождал.

 

Всем привет! В процессе начального познания языка MQL4 дошёл до оператора if-else. В рамках его изучения написал некий пример кода. Хотелось бы узнать мнение - в правильном ли направлении я движусь? Так ли пишутся программы? Или я слишком много лишнего сделал, и много ещё не понимаю? Просто хочу ваше мнение узнать)))

Это чисто пример для понимания принципа работы.

//+---------------------------------+
//+ Задание 1 с  оператором if-else +
//----------------------------------+
 
 double    price=Bid;           //  Объявляем тип переменных и переменные
 double    line1=1.15000;      //   для БИД и Линий.
 double    line2=1.34000;     // Цены указаны в рамках эксперимента.
 double    line3=1.32000;    // Меняется комбинация, допустим с 1,15000 на1,35000.
 
 string s1="Очень ";         //--------------------------------------+
 string s2="Сильно ";        // Задаём строки для выдачи в сообщении +
 string s3="Продавать";      //                                      +
 string s4="ЖОПА";           //--------------------------------------+
      
 string M1=s1+s2+s3;         //---------------------------------------+
 string M2=s2+s3;           //  Отображение строк в сообщении         +
 string M3=s3;              //                                        +
 string M4=s4;              //----------------------------------------+
 
 void OnStart()
 {  
 
      if(price<line1&& price<line2&& price<line3)        //----------------------------------------
        MessageBox(M1);                                  // Вносим разную комбинацию знаков больше - меньше
   else                                                  //  Если все линии больше цены, то сообщение
                                                         //   "Очень сильно продавать"
      if((price<line1&& price<line2&& price>line3)       //
         ||(price>line1&& price<line2&& price<line3)     //  Если любая одна комбинация не соответствует,
         ||(price<line1&& price>line2&& price<line3))    // и одна из линий меньше цены, то сообщение
      MessageBox(M2);                                    //  "Сильно продавать"
                                                         //
   else                                                  //
      if((price<line1&& price>line2&& price>line3)       //  Если уже две линии не соответствуют, и находятся 
        ||(price>line1&& price<line2&& price>line3)      //  ниже цены, то сообщение "Продавать"
        ||(price>line1&& price>line2&& price<line3))     //
      MessageBox(M3);                                    //  Если все три несоотвествия - то сообщение
                                                         //   "Жопа"
   else MessageBox(M4);                                  //
 }                                                       //---------------------------------------
 
to_ha #:

Всем привет! В процессе начального познания языка MQL4 дошёл до оператора if-else. В рамках его изучения написал некий пример кода. Хотелось бы узнать мнение - в правильном ли направлении я движусь? Так ли пишутся программы? Или я слишком много лишнего сделал, и много ещё не понимаю? Просто хочу ваше мнение узнать)))

Это чисто пример для понимания принципа работы.

Понимание правильное, но так же часто выгодней использовать Если Не. Вослицательный знак перед булевым значением.

А по алгоритму с тремя уровнями это ну не знаю. глупости или невнимательность или ошибки алгоритма. уровни всегда 1 меньше 2 меньше 3. И условия больше всех, это больше 3, меньше всех это меньше 1, и меньше 3 и больше 2, и меньше 2 и больше 1. Одно сравнения в первом и последнем ифе.

 
to_ha #:

Всем привет! В процессе начального познания языка MQL4 дошёл до оператора if-else. В рамках его изучения написал некий пример кода. Хотелось бы узнать мнение - в правильном ли направлении я движусь? Так ли пишутся программы? Или я слишком много лишнего сделал, и много ещё не понимаю? Просто хочу ваше мнение узнать)))

Это чисто пример для понимания принципа работы.

Для начала, для большей наглядности, меньшей вероятности внесения опечаток, упрощения дальнейшей модификации (форматирование - на свой вкус):

void OnStart()
 {
  bool signal1, signal2, signal3;

  signal1=price<line1; // Крайне редкий случай price==line1 - считаем отсутствием сигнала
  signal2=price<line2;
  signal3=price<line3;
  
      if(signal1 && signal2 && signal3)
        MessageBox(M1);
      else if(( signal1 &&  signal2 && !signal3)
            ||(!signal1 &&  signal2 &&  signal3)
            ||( signal1 && !signal2 &&  signal3))
              MessageBox(M2);
      else if(( signal1 && !signal2 && !signal3)
            ||(!signal1 &&  signal2 && !signal3)
            ||(!signal1 && !signal2 &&  signal3))
              MessageBox(M3);
      else MessageBox(M4);
 }

Другой вариант:

void OnStart()
 {
  int signal,signal1,signal2,signal3;

  signal1=(price<line1?1:0);
  signal2=(price<line2?1:0);
  signal3=(price<line3?1:0);
  signal=signal1+signal2+signal3;

      if(signal>=3)
        MessageBox(M1);
      else if(signal==2)
        MessageBox(M2);
      else if(signal==1)
        MessageBox(M3);
      else MessageBox(M4);
 }

В принципе, наверное можно было и bool сложить, но так строже.

А иногда удобнее так:

#define SIGNAL1 0x1
#define SIGNAL2 0x2
#define SIGNAL3 0x4

void OnStart()
 {
  uint signal=0;

  signal|=(price<line1?SIGNAL1:0);
  signal|=(price<line2?SIGNAL2:0);
  signal|=(price<line3?SIGNAL3:0);

  switch(signal & (SIGNAL1|SIGNAL2|SIGNAL3)) // Сбросим лишние биты
    {
     case SIGNAL1|SIGNAL2|SIGNAL3 :
       MessageBox(M1);
       break;
     case SIGNAL1|SIGNAL2 :
     case SIGNAL1|SIGNAL3 :
     case SIGNAL2|SIGNAL3 :
       MessageBox(M2);
       break;
     case SIGNAL1:
     case SIGNAL2:
     case SIGNAL3:
       MessageBox(M3);
       break;
     case 0 :
       MessageBox(M4);
       break;
     default:
       // В принципе, тут можно было поставить MessageBox(M1); и первый случай убрать.
       break;
    }
 }
 
Valeriy Yastremskiy #:

Понимание правильное А по алгоритму с тремя уровнями это ну не знаю. глупости или невнимательность или ошибки алгоритма.

 Нету понимания в трёх уровнях))) Исключительно чтоб лучше понять как работает данный оператор. Крутил-вертел восклицательный знак, но дело ночью было, поэтому с ним потом разберусь:) 

JRandomTrader #:

Для начала, для большей наглядности, меньшей вероятности внесения опечаток, упрощения дальнейшей модификации (форматирование - на свой вкус):

В принципе, наверное можно было и bool сложить, но так строже.

 Спасибо за варианты, сейчас разберу их)

 Я до bool ещё не дошёл, ещё не учил его. Только до while дошёл, по нему тоже вопросы есть. Я сейчас изложу вопрос, и если не сложно будет - то ответьте.

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