Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме
Страница 386 из 386
Первая ... 376 385 Последняя

Показаны сообщения: с 7,701 по 7,715 из 7715

Тема: MQL4: Несколько вопросов от начинающего

 Перейти в классический вид темы
  1. линк#7701
    Частый гость
    OLEKSANDR стараюсь положительно себя зарекомендовать Аватар для OLEKSANDR
    Регистрация:
    04.01.2010
    Сообщений:
    126
    Накопленные выплаты (Подробнее):
    469 RUB
    Поставил(а) лайков:
    0
    Получено лайков:  6
    в 6 сообщениях
    5%
    Продолжение темы [Архив] Несколько вопросов по MQL от начинающего

    -------------------------------------------

    как получить целое чесло ?

    MQL код:
    double A = 0.0;                           //перещот среднего бара
    for(int a = 1; a < 30; a++)
    {
    A += High[a];
    }
    double B = 0.0;
    for(int b = 1 ;b < 30; b++)
    {
    B += Low[b];
    }
    double AB = 0.0;
    AB=(A-B)/30;
    MessageBox("средний="+(AB));

    Последний раз редактировалось Gold; 24.07.2014 в 20:39. Причина: Добавил ссылку на архивную тему

  2. post_thanks Получено лайков: 1

    vivianalens (27.07.2017)

     
  3. ТОП сообщений
    2018-05-07   13:19
    Лучший ответ #1
    Накопленные выплаты 27537 RUB

    Цитата Сообщение от Yuriyzp Посмотреть сообщение
    Т.е. если кинуть советник на ранее открытую серию, буфер не накапливается. Как можно это исправить?
    если Вы однозначно уверенны, что серия ордеров начинается с некого "стартового ордера" и он не будет закрыт ранее остальных ордеров, тогда при подсчете ордеров найдите самый "старый" рыночный ордер - по времени, он и будет стартовым, примерно так:
    PHP код:
    int NumberOfOrders(int magic_,int &buy_,int &sell_,int &ticket_) {
    int i,ot,k=OrdersTotal(); string sy=Symbol(); buy_=0;sell_=0; datetime t,tfo = TimeCurrent();
    ticket_ = -1;
    for (
    i=0; i<k; i++) {
    if(
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if((
    OrderMagicNumber()==magic_)&&(OrderSymbol()==sy )){
    t = OrderOpenTime();
    ot=OrderType();
    if(
    ot==OP_BUY) buy_++;
    if(
    ot==OP_SELL) sell_++;
    if(
    t<tfo){tfo = t;ticket_ = OrderTicket();}
    }
    }
    }
    return(
    buy_+sell_);
    }
    моя ф-ция вернет общее количество всех рыночных ордеров и в качестве параметров ей нужно передать 4 параметра:
    - магик номер
    - любые переменные в которые ф-ция запишет результаты: всего БАЙ, СЕЛЛ и вот то о чем речь - № тикета самого первого по времени рыночного ордера
    ЗЫ: если у Вашей ТС другие ситуации возникают - есть еще вариант запоминать всю важную информацию в глобальных переменных терминала и считывать их при инициализации советника

    2018-04-03   14:48
    Лучший ответ #2
    Накопленные выплаты 11826 RUB

    Цитата Сообщение от IgorM Посмотреть сообщение
    меламиновые губки в помощь, из Китая регулярно заказываю, первый раз именно из за маркеров на мебели и заказывал
    Да, нет, на мой взгляд тут просто в спешке знаки препинания не так расставлены.
    Исходя из личного опыта я-бы написал так:
    Цитата Сообщение от freshwind Посмотреть сообщение
    ...в эту субботу сподобилась маркером разрисовать все окно и подоконник. Изнутри оттирали спиртом долго...

    2018-09-18   13:37
    Лучший ответ #3
     

    Цитата Сообщение от ir0407 Посмотреть сообщение

    А солидные деньги это сколько и какая в них доля спреда (я думаю очень смешная)
    Не надо ничего писать, итак понятен ваш результат торгов. Я плавающий спред не поливаю, я вас просто предупреждаю, что имеются не честные брокеры. Я один раз опекся и мне этого было достаточно. А на форексе я более 12 лет и за это время всякое и всяких повидал. А насчет спреда это вы что то выдумали - просто его нет в прибыльных ордерах, а других у меня не бывает. Так что меня больше волнует комиссия при снятии средств. Если бы не вы я бы так бы и не знал, что бывают проблемы со спредом. Как говорится, кто ищет проблемы тот всегда их найдет.
    А теперь по делу и прекращаем пустозвон, лично для меня спреда не существует, и я не отвлекаюсь по не существующим мелочам.
    Кроме тех 2-х счетов, где я в долгосроке, у меня имеется еще пару счетов, где, как говорится, что бы там руки не чесались я пипсую или в среднесроке.
    Вот один из них на forex4you (за 4 последних дня) Кроме того на 1,1664 у меня отложка на покупку пока с т/п 1,1714, А там буду смотреть вероятность на счет ордера на продажу.
    Вложение 2162772

    Изображение
    Превью
    2018-09-19   02:39
    Лучший ответ #4
     

    Цитата Сообщение от Андрей2010 Посмотреть сообщение

    Добавь
    В начале старта
    int k=0;
    int orderticket[];
    А в цикле
    k=k+1;
    А там уже определись
    for (cnt=OrdersTotal()-1; cnt>=0; cnt--) .... сnt=++ или cnt=-- с первого или с последнего...
    K=k+1;
    orderticke[k] = OrderTicket();

    2018-09-28   13:53
    Лучший ответ #5
    Накопленные выплаты 29274 RUB

    Цитата Сообщение от ir0407 Посмотреть сообщение
    C/C++ Работа с битами -> http://volstr.ru/?p=36

    Вложение 2184902
    Нужно пробовать что-то написать с применением прочтённого! Так трудно понять! Всё что приходит в голову это инвертирование состояний флага! Например в свойствах объектов или графика где применяется bool параметр! Можно ли как-то это прикрутить например сюда?
    Код:
    ChartSetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value)
    Вместо value использовать битовую маску и не городить проверку текущего состояния отображения торговых уровней, а просто инвертировать флаг!

    Изображение
    Превью
    2018-09-28   16:21
    Лучший ответ #6
    Накопленные выплаты 162768 RUB

    Цитата Сообщение от Viktor1987 Посмотреть сообщение

    Ты не понял... bool - это не один бит. В MQL bool - это целое число размером в 1 байт. Т.е. bool - это 8 бит, где значение 0b00000000 интерпретируется, как False, а значение 0b00000001(как и остальные всевозможные комбинации битов в этом байте) интерпретируется, как True. Т.е. для типа bool нет никакого смысла в битовых операторах, за исключением оператора логического отрицания "~", при помощи которого можно инвертировать булево значение. Но даже в этом случае результат будет совершенно не таким, как при работе с другими числовыми типами. В MQL битовые операторы, в подавляющем большинстве случаев, тебе могут даже и не понадобиться, а вот при работе с WinAPI они очень даже широко используются.
    Попробуй почитать еще вот это -> https://ravesli.com/urok-46-bitovye-...bitovye-maski/

  4. линк#7708
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,120
    Накопленные выплаты (Подробнее):
    162768 RUB
    Поставил(а) лайков:
    914
    Получено лайков:  7,204
    в 3,451 сообщениях
    101%
    Цитата Сообщение от evbut Посмотреть сообщение
    Помогите разобрать где чего не доглядел
    А что такое есть BarType(index) и IsThisBarWRB(index)?


  5. линк#7709
    Кандидат форумных наук
    Хитер
     
    evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация Аватар для evbut
    Регистрация:
    17.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,614
    Накопленные выплаты (Подробнее):
    18003 RUB
    Поставил лайков:
    614
    Получено лайков:  971
    в 635 сообщениях
    60%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    А что такое есть BarType(index) и IsThisBarWRB(index)?
    BarType



    IsThisBarWRB



    а для последней GetBodyOrBarHeight



  6. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  7. линк#7710
    В начале пути
    Fet2017 стараюсь положительно себя зарекомендовать Аватар для Fet2017
    Регистрация:
    08.06.2017
    Пол:
    Мужчина
    Сообщений:
    39
    Накопленные выплаты (Подробнее):
    273 RUB
    Поставил лайков:
    6
    Получено лайков:  0
    в 0 сообщениях
    0%
    Добрый день, всем.

    Помогите, пожалуйста, с кодом
    Для входа мне надо получить сигнал на индикаторе ST, далее получить формацию как на картинке от индикатора S и войти.
    По данной функции не входит, так как мне надо, в чем я не прав?


    //
    paperclip Рисунок
    • Тип файла: jpg 01.05.jpg (219.9 КБ, Просмотров: 9)

    Последний раз редактировалось Fet2017; 01.05.2020 в 17:01.

  8. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  9. линк#7711
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,626
    Накопленные выплаты (Подробнее):
    55097 RUB
    Поставил лайков:
    277
    Получено лайков:  616
    в 558 сообщениях
    38%
    Цитата Сообщение от Fet2017 Посмотреть сообщение
    в чем я не прав?
    Не понимание, того что ты делаешь, вряд ли можно расценивать как не правоту.
    Когда ты поймешь смысл того, что ты хочешь сделать, тогда код сам " ляжет" как надо.

    В кратце, по картинке, накинь туда еще Zig-Zag, можно и со стандартными параметрами, это поможет получить дополнительную ясность.

    Теперь, по твоему коду и сути, и немного по картинке.
    Код:
    int Get17()
    {
      //--- Объявили локальные переменные,
      //--- присвомли начальные значения. 
      int Result = -1,
          i      = 0;
      double UP  = 0
             DF  = 0,
             DW  = 0,
             DFG = 0,
             up1 = 0, 
             up2 = 0, 
             df1 = 0, 
             df2 = 0;
      //--- Проход по значениям индикаторов
      //--- Шпилим ничего не сохраняя, из того, что нашли.
      while(true)  // && !IsStopped - добавить по слезной просбе метаквотовцев
      {
        i++;
        // до если еще не, просто  присвоили значения идикатора  объявленным  переменным.
        up1 = iCustom(NULL, TF4, "ST",Auto1,per1,M_per1,F_per1,PriceConst,1,i); // [-] если <0 то зеленый
        up2 = iCustom(NULL, TF4, "ST",Auto1,per1,M_per1,F_per1,PriceConst,2,i); // [-] если >0 то красный
        df1 = iCustom(NULL, TF4, "S",Auto1,Length11,0,i);                       // [-] если >0 то красный
        df2 = iCustom(NULL, TF4, "S",Auto1,Length11,1,i);                       // [-] если <0 то зеленый
        //--- анализируем полученные значения
        //--- и переприсваиваем их переменным.
        if(UP == 0)   // если значения переменных тождественны
          if(up1 < 0) // если <0 то зеленый
          {
            UP = i;   // присваиваем переменной новое значение
          }
        if(DW == 0)   // если значения переменных тождественны
          if(up2>0)   // если >0 то красный
          {
           DW = i;    // присваиваем переменной новое значение
          }
        if(DF == 0)   // если значения переменных тождественны
          if(df1 > 0) // если >0 то красный
          {
            DF = i;   // присваиваем переменной новое значение
          }
        if(DFG == 0)  // если значения переменных тождественны
          if(df2 < 0) // если <0 то зеленый
          {
            DFG = i;  // присваиваем переменной новое значение
          }
        
        //--- Тут не полный код
        // if(UP>0 && DF>0 && DFG>0 && DW>0 && UP break;
        //--- Но представим его гдето так:
        // Если все значения больше ноля, то выходим из while
        // Типа нашли.
        // Но судя по картинке, такой ситуации ты не встретишь. Увы. 
        // Хотя ...
        if(UP>0 && DF>0 && DFG>0 && DW>0 && UP) break; 
        //--- Тут не полный код.
        if(UP>DW && DF // Что ты хотел тут прилепить загадка.
      }
      //--- Поскольку Result ни где не получил новое значение,
      //--- То "на гора", уйдет "-1".
      return(Result);
    }
    }
    До формирования сигнала, дело не дошло, а до открытия позиции тем более.

    По картинке:
    1. Находишь начальный сигнал комбинации ( котировка/время ), запоминаешь, и ждешь второй сигнал комбинации, эдак, часок, другой.
    2. Находишь второй сигнал комбинации ( котировка/время ), запоминаешь, и ждешь третий сигнал комбинации.
    3. Дождался третьего сигнала ( котировка/время ) , анализируешь комбинацию всех трех значений,
    и с задержкой в 2-е минуты, как на картинке, отрываешь позицию.

    4. Предварительно, подготавливаешь данные для открытия позиции.
    5. Делаешь необходимые проверки, перед открытием позиции.
    6. Открываешь. Все.

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

    Последний раз редактировалось MonyaMaker; 02.05.2020 в 00:40.

  10. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  11. линк#7712
    Кандидат форумных наук
    Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Аватар для Leschich
    Регистрация:
    30.11.2012
    Пол:
    Мужчина
    Сообщений:
    1,452
    Накопленные выплаты (Подробнее):
    42559 RUB
    Поставил лайков:
    4,619
    Получено лайков:  1,671
    в 780 сообщениях
    115%
    Помогите посчитать до трех. На скрине показал, что нужно трижды прочитать цену первых точек переворота индикатора Psar. Как бы прочитать получилось(выставлены горизонтальные линии), однако в процесе, уровни иногда начинают "плавать". Прям все просто, но что то не так.. Сам код для наглядности выкладываю и тестовый советник. Премного благодарен буду, за направление на путь истинный.
    З.Ы. Строка под вызовом функции цыкла не пропечатывается полностью
    MQL код:
         while(true) {
    if(SAR[i+1]>=Close[i+1] && SAR[i] <меньше Close[i]) { // переворот вверх



    MQL код:
    extern double Step    = 0.02; // начальное значение и шаг
    extern double Maximum = 0.02; // конечное значение
    int dg,a,b,c,d;
    //
    double SAR[], // буфер параболика
    ChTop[], // буфер верхних значений
    ChBot[]; // буфер нижних значений
    //+------------------------------------------------------------------+
    //| Expert initialization function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    //---
    ArrayResize(SAR,302);
    ArrayResize(ChTop,3);
    ArrayResize(ChBot,3);

    for(int i=300; i>=0; i--) {
    SAR[i]=iSAR(NULL,0,Step,Maximum, i);
    while(true) {
    if(SAR[i+1]>=Close[i+1] && SAR[i]<меньше Close[i]) { // переворот вверх
    a=ArraySize(ChBot);
    b=ArrayInsertDouble(ChBot, SAR[i], 0);
    break;
    }
    if(SAR[i+1]<=Close[i+1] && SAR[i]>Close[i]) { // переворот вниз
    c=ArraySize(ChBot);
    d=ArrayInsertDouble(ChTop, SAR[i], 0);
    break;
    }
    break;
    }
    }

    //---
    }
    //+----------------------------------------------------------------------------+
    //| Автор : Ким Игорь В. aka KimIV, [url]http://www.kimiv.ru[/url] |
    //+----------------------------------------------------------------------------+
    //| Версия : 31.10.2008 |
    //| Описание : Выполняет вставку элемента массива с заданным индексом. |
    //| Возвращает размер нового массива. |
    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| m - массив элементов типа double |
    //| e - значение элемента |
    //| i - индекс элемента (-1 - добавить в конец массива) |
    //+----------------------------------------------------------------------------+
    int ArrayInsertDouble(double& m[], double e, int i=-1) {
    int j, k=ArraySize(m);
    ArrayResize(m, k+1);
    if (i>=0 && i for (j=k; j>i; j--) m[j]=m[j-1];
    m[i]=e;
    } else m[k]=e;
    ArrayResize(m, k);
    return(k);//+1
    }
    double ND(double v) {
    return(NormalizeDouble(v,dg));
    }
    paperclip Рисунок attachment3680263 
    paperclip Вложения

    Последний раз редактировалось Leschich; 02.05.2020 в 02:05.
    " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
    Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

  12. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  13. линк#7713
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,626
    Накопленные выплаты (Подробнее):
    55097 RUB
    Поставил лайков:
    277
    Получено лайков:  616
    в 558 сообщениях
    38%
    Цитата Сообщение от Leschich Посмотреть сообщение

    Глянь туда: 2020.05.02 02:19:06.458 2018.11.26 09:00:00 Test-Psar EURUSD,M5: array out of range in 'Test-Psar.mq4' (48,24)


  14. post_thanks Получено лайков: 3

    Leschich (02.05.2020), Незарегистрированный (2 пользователя)

  15. линк#7714
    Кандидат форумных наук
    Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Аватар для Leschich
    Регистрация:
    30.11.2012
    Пол:
    Мужчина
    Сообщений:
    1,452
    Накопленные выплаты (Подробнее):
    42559 RUB
    Поставил лайков:
    4,619
    Получено лайков:  1,671
    в 780 сообщениях
    115%
    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    Глянь туда: 2020.05.02 02:19:06.458 2018.11.26 09:00:00 Test-Psar EURUSD,M5: array out of range in 'Test-Psar.mq4' (48,24)
    Однако, таких сообщений у меня нет. Предположим, что есть..

    " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
    Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

  16. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  17. линк#7715
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,120
    Накопленные выплаты (Подробнее):
    162768 RUB
    Поставил(а) лайков:
    914
    Получено лайков:  7,204
    в 3,451 сообщениях
    101%
    Цитата Сообщение от Leschich Посмотреть сообщение
    Однако, таких сообщений у меня нет. Предположим, что есть..
    Ну прям, как у классиков:
    - Ты суслика видишь?
    - Нет.
    - И я нет... А он есть.

    Или второй вариант:
    - У вас на стройке несчастные случаи были?
    - Нет.
    - Будут...

    Leschich, ну ты же вроде не новичек давно, но "грабли" походу таки уважаешь. Пересмотри алгоритм.
    1. Самый жирный косяк while(true). Для чего он там? Да еще и внутри цикла... Лично я не понял. Избавься от него.
    2. Зачем тебе аж 3 массива, да еще и динамических, если размеры их заранее известны?
    3. Там можно вообще обойтись совершенно без массивов.
    4. Не увидел, где там у тебя идет счет до твоих "посчитать до трех".
    5. Почему цикл крутишь именно до 300? А если за 300 баров не найдется 3-х переворотов, что будет в твоих массивах и что будет отрисовываться?
    6. Нет проверки получаемых значений на корректность. Ну это на любителя... И дело случая... А случаи, как тот суслик, бывают разные.

    ЗЫ: И еще... Не нужно SAR проверять на нулевом баре. Он там может "моргать". Да и на каждом тике гонять всю эту шнягу какой смысл? Разве только побарно.

    Последний раз редактировалось ir0407; 02.05.2020 в 22:00.

  18. post_thanks Получено лайков: 4

    Leschich (03.05.2020), Незарегистрированный (3 пользователя)

  19. линк#7716
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,120
    Накопленные выплаты (Подробнее):
    162768 RUB
    Поставил(а) лайков:
    914
    Получено лайков:  7,204
    в 3,451 сообщениях
    101%
    Я бы набросал что-то примерно такое:



  20. post_thanks Получено лайков: 4

    Leschich (04.05.2020), Незарегистрированный (3 пользователя)

  21. линк#7717
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,626
    Накопленные выплаты (Подробнее):
    55097 RUB
    Поставил лайков:
    277
    Получено лайков:  616
    в 558 сообщениях
    38%
    Цитата Сообщение от Leschich Посмотреть сообщение
    Однако, таких сообщений у меня нет. Предположим, что есть..
    Для начала, код без изменений в тестер кинул, суббота была однако, так что, что вылезло то вылезло.


  22. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  23. линк#7718
    Кандидат форумных наук
    Ангел
     
    axe44 приемлемый уровень репутации axe44 приемлемый уровень репутации Аватар для axe44
    Регистрация:
    08.07.2012
    Пол:
    Мужчина
    Сообщений:
    1,083
    Накопленные выплаты (Подробнее):
    7479 RUB
    Поставил лайков:
    41
    Получено лайков:  164
    в 147 сообщениях
    15%
    Здравствуйте.

    У меня ступор. Не могу задать в логику индикатора Болинджир Бандс правило отрисовки линий от закрытия предыдущего дня .

    Функция iClose("USDCHF",PERIOD_D1,0) на первый взгляд подходит, но не совсем. При пересчёте цикла на часовом графике сразу всё ломается.

    MQL код:

    //+------------------------------------------------------------------+
    //| Клюква.mq4 |
    //| Алексей Корольков . |
    //| https://www.mql5.com/ru/users/alekkar |
    //+------------------------------------------------------------------+
    #property copyright "2020 Алексей Корольков ."
    #property link "https://www.mql5.com/ru/users/alekkar"
    #property description "Клюква"
    #property strict

    #include

    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_color1 LightSeaGreen
    #property indicator_color2 LightSeaGreen
    #property indicator_color3 LightSeaGreen
    //--- indicator parameters
    input int InpBandsPeriod=20; // Bands Period
    input int InpBandsShift=0; // Bands Shift
    input double InpBandsDeviations=2.0; // Bands Deviations
    input string SimbolUSD="USDIDX..";
    //--- buffers
    double ExtMovingBuffer[];
    double ExtUpperBuffer[];
    double ExtLowerBuffer[];
    double ExtStdDevBuffer[];
    double Drv,DrvIn,min,max,minIn,maxIn,xx,xIn,natr,natrIn,m a1,ma2,bid1,bid2,R1,R2,R01,R02;
    int tm,mn;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int OnInit(void)
    {
    //--- 1 additional buffer used for counting.
    IndicatorBuffers(4);
    IndicatorDigits(Digits);
    //--- middle line
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,ExtMovingBuffer);
    SetIndexShift(0,InpBandsShift);
    SetIndexLabel(0,"Bands SMA");
    //--- upper band
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1,ExtUpperBuffer);
    SetIndexShift(1,InpBandsShift);
    SetIndexLabel(1,"Bands Upper");
    //--- lower band
    SetIndexStyle(2,DRAW_LINE);
    SetIndexBuffer(2,ExtLowerBuffer);
    SetIndexShift(2,InpBandsShift);
    SetIndexLabel(2,"Bands Lower");
    //--- work buffer
    SetIndexBuffer(3,ExtStdDevBuffer);
    //--- check for input parameter
    if(InpBandsPeriod<=0)
    {
    Print("Wrong input parameter Bands Period=",InpBandsPeriod);
    return(INIT_FAILED);
    }
    //---
    SetIndexDrawBegin(0,InpBandsPeriod+InpBandsShift);
    SetIndexDrawBegin(1,InpBandsPeriod+InpBandsShift);
    SetIndexDrawBegin(2,InpBandsPeriod+InpBandsShift);
    //--- initialization done
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Bollinger Bands |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total,
    const int prev_calculated,
    const datetime &time[],
    const double &open[],
    const double &high[],
    const double &low[],
    const double &close[],
    const long &tick_volume[],
    const long &volume[],
    const int &spread[])
    {
    int i,pos;
    //---
    if(rates_total<=InpBandsPeriod || InpBandsPeriod<=0)
    return(0);
    //--- counting from 0 to rates_total
    ArraySetAsSeries(ExtMovingBuffer,false);
    ArraySetAsSeries(ExtUpperBuffer,false);
    ArraySetAsSeries(ExtLowerBuffer,false);
    ArraySetAsSeries(ExtStdDevBuffer,false);
    ArraySetAsSeries(close,false);
    //--- initial zero
    if(prev_calculated<1)
    {
    for(i=0; i {
    ExtMovingBuffer[i]=EMPTY_VALUE;
    ExtUpperBuffer[i]=EMPTY_VALUE;
    ExtLowerBuffer[i]=EMPTY_VALUE;

    }
    }
    //--- определение АТР
    for(i=InpBandsPeriod-1; i>=0; i--)
    {
    xx=High[i]-Low[i];
    Drv+=xx;
    if(min>xx) min=xx;
    if(max xIn=iHigh(SimbolUSD,NULL,i)-iLow(SimbolUSD,NULL,i);
    DrvIn+=xIn;
    if(minIn>xIn) minIn=xIn;
    if(maxIn }
    Drv/=InpBandsPeriod;
    DrvIn/=InpBandsPeriod;
    natr=((Drv-min)/(max-min))*100; //тут определяем пройденное значение атр инструментом на графике
    natrIn=((DrvIn-minIn)/(maxIn-minIn))*100; //тут определяем пройденное значение атр инструментом на индексе доллара
    //средние АТР
    ma1=iMA(NULL,0,InpBandsPeriod,0,2,1,0);
    ma2=iMA(SimbolUSD,0,InpBandsPeriod,0,2,1,0);
    //определяем знак АТР
    bid1=MarketInfo(NULL,MODE_BID);
    bid2=MarketInfo(SimbolUSD,MODE_BID);
    if (bid1-ma1<0) Drv=Drv*(-1); // если цена падает значит минус
    if (bid2-ma2<0) DrvIn=DrvIn*(-1); // если цена падает значит минус

    // а теперь сама она родная
    //где Drv инструмент графика,а DrvIn индекс доллара
    //расчёт индекса волатильности для инструмента
    R01 = (1-(1+Drv)/(1+max))*100;//используем для движения вверх
    R02 = (1-(1-Drv)/(1+max))*100;//используем для движения вниз
    //расчёт индекса волатильности для доллара
    R1 = (1-(1+DrvIn)/(1+maxIn))*100;//
    R2 = (1-(1-DrvIn)/(1+maxIn))*100;//используем для движения вниз
    // далее сам расчёт




    //--- начальный расчет
    if(prev_calculated>1)
    pos=prev_calculated-1;
    else
    pos=0;
    //--- главный цикл
    for(i=pos; i {
    //--- средняя линия
    ExtMovingBuffer[i]=SimpleMA(i,InpBandsPeriod,close);
    //--- рассчитайте и запишите со стандартным отклонением
    ExtStdDevBuffer[i]=StdDev_Func(i,close,ExtMovingBuffer,InpBandsPerio d); // тут наверно смогу разместить код
    //--- верхняя линия указывает зону перекупленности
    // -- тут хотел параметр ExtMovingBuffer[i] заменить на iClose("USDCHF",PERIOD_D1,0)
    ExtUpperBuffer[i]=ExtMovingBuffer[i]+(max)*(R01+R2)/2; //Print("Drv ",Drv,",DrvIn",DrvIn,", R1", R1,", R2 ", R2);
    //--- нижняя линия указывает зону перепроданности
    ExtLowerBuffer[i]=ExtMovingBuffer[i]+(-max)*(R02+R1)/2;
    //---
    }
    //---- OnCalculate done. Return new prev_calculated.
    return(rates_total);
    }
    //+------------------------------------------------------------------+
    //| Calculate Standard Deviation |
    //+------------------------------------------------------------------+
    double StdDev_Func(int position,const double &price[],const double &MAprice[],int period)
    {
    //--- variables
    double StdDev_dTmp=0.0;
    //--- check for position
    if(position>=period)
    {
    //--- calcualte StdDev
    for(int i=0; i StdDev_dTmp+=MathPow(price[position-i]-MAprice[position],2);
    StdDev_dTmp=MathSqrt(StdDev_dTmp/period);
    }
    //--- return calculated value
    return(StdDev_dTmp);
    }
    //+------------------------------------------------------------------+


    Skype axe-441

  24. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  25. линк#7719
    Кандидат форумных наук
    Хитер
     
    evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация evbut хорошая репутация Аватар для evbut
    Регистрация:
    17.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,614
    Накопленные выплаты (Подробнее):
    18003 RUB
    Поставил лайков:
    614
    Получено лайков:  971
    в 635 сообщениях
    60%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    А что такое есть BarType(index) и IsThisBarWRB(index)?
    Я так и не нашел "дырки" в коде, по моему вопросу. Вы что-нибудь увидели?


  26. линк#7720
    Кандидат форумных наук
    Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Аватар для Leschich
    Регистрация:
    30.11.2012
    Пол:
    Мужчина
    Сообщений:
    1,452
    Накопленные выплаты (Подробнее):
    42559 RUB
    Поставил лайков:
    4,619
    Получено лайков:  1,671
    в 780 сообщениях
    115%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Ну прям, как у классиков:
    - Ты суслика видишь?
    Приветствую! Да, было дело, промелькнула такая мысль.. Но больше всего такая "мысля" крутилась... Хочешь спрятать вещь,- положи ее на самое видное место. Кода всего две строчки, и как бы все просто..
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Leschich, ну ты же вроде не новичек давно, но "грабли" походу таки уважаешь
    Что тут сказать... Ничто не чуждо, если не логикой, так надо же лоб чем то набивать..

    Цитата Сообщение от ir0407 Посмотреть сообщение
    ЗЫ: И еще... Не нужно SAR проверять на нулевом баре. Он там может "моргать".
    Таки да, видел такое и делал, но! прокрутив разные варианты без результата, уже "галиматья" пошла..

    Цитата Сообщение от ir0407 Посмотреть сообщение
    Да и на каждом тике гонять всю эту шнягу какой смысл? Разве только побарно.
    Эт понятно, достаточно опроса побарно.

    Цитата Сообщение от ir0407 Посмотреть сообщение
    Я бы набросал что-то примерно такое:
    Ха, знакомые буковки...
    Price_1 = NormalizeDouble((Low[1] + High[1]) / 2, Digits);
    До того, как выложить свой косячный код, был похожий вариант, опять таки "косячный".. с прокруткой баров по возрастающей и вычислением среднего значений хай-лоу на текущем и на предыдущем баре в самом цыкле ... но не зашло, все равно "плыли" уровни
    MQL код:
        //Нашли все что нужно?  

    if(ChTop < 3 || ChBot < 3)

    {

    SAR_1 = SAR_2;

    Price_1 = Price_2;

    }

    else

    break;

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

    Последний раз редактировалось Leschich; 04.05.2020 в 12:08.
    " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
    Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

  27. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  28. линк#7721
    В начале пути
    Denis Bran стараюсь положительно себя зарекомендовать Аватар для Denis Bran
    Регистрация:
    24.04.2019
    Сообщений:
    47
    Накопленные выплаты (Подробнее):
    171 RUB
    Поставил(а) лайков:
    324
    Получено лайков:  15
    в 12 сообщениях
    32%
    Всем доброго времени суток!

    Подскажите, пожалуйста, как установить свою картинку, вместо фона, именно через код советника. И вообще возможно ли это?

    Заранее спасибо!


  29. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

    <a href="https://www.mt5.com/ru/forex_analysis">Форекс портал</a>
  30. линк#7722
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,120
    Накопленные выплаты (Подробнее):
    162768 RUB
    Поставил(а) лайков:
    914
    Получено лайков:  7,204
    в 3,451 сообщениях
    101%
    Цитата Сообщение от Denis Bran Посмотреть сообщение
    как установить свою картинку, вместо фона, именно через код советника. И вообще возможно ли это?
    Возможно... Как вариант смотрим сюда.


  31. post_thanks Получено лайков: 2

    Denis Bran (22.05.2020), Незарегистрированный (1 пользователь)


Страница 386 из 386
Первая ... 376 385 Последняя

Подписанные на тему (76)

Похожие темы

  1. Несколько слов о языке программирования mql4
    от Заз в разделе MQL-программирование, АТС
    Replies: 32
    Последнее сообщение: 26.09.2018, 11:31
  2. 55 вопросов по истории РОССИИ
    от НАИВНЫЙ-СЕРДЦИЕТ в разделе Свободное общение
    Replies: 15
    Последнее сообщение: 25.12.2015, 15:44
  3. [Архив] MQL4: Несколько вопросов от начинающего
    от Nick'Otin в разделе MQL-программирование, АТС
    Replies: 9235
    Последнее сообщение: 26.10.2015, 01:36