Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Как написать код для поиска мах цены?

    Я уже писал в некоторых темах этого форума, но ответа не дождалься, поэтому создал новую тему.
    А суть вот в чем:
    Представте ситуацию : торгует себе спокойно робот-эксперт и, бац, оборвалась связь между терминалом и сервером ДЦ. Через несколько минут - связь востановилась, но робот (в виду особеностей своего кода) не понимает что призошло. Вот как мне ему приказать после востановления связи просматривать пропущеный промежуток времени. А конкретнее - нужно, чтобы он находил мин и мах значения цены за время отсутствия связи.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от arvis Посмотреть сообщение
    Я уже писал в некоторых темах этого форума, но ответа не дождалься, поэтому создал новую тему.
    А суть вот в чем:
    Представте ситуацию : торгует себе спокойно робот-эксперт и, бац, оборвалась связь между терминалом и сервером ДЦ. Через несколько минут - связь востановилась, но робот (в виду особеностей своего кода) не понимает что призошло. Вот как мне ему приказать после востановления связи просматривать пропущеный промежуток времени. А конкретнее - нужно, чтобы он находил мин и мах значения цены за время отсутствия связи.
    Самый простой вариант.
    Каждый тик робот сравнивает текущее время сервера с предыдущим.
    Если дельта больше заданного значения, то робот проверяет цены баров, которые пропустил, на предмет наличия максимумов и минимумов.
    Не существует безвыходных ситуаций, лишних людей, случайных встреч и потерянного времени (В. Альбисетти)

    Комментарий

    • #3 Свернуть

      На словах так все прекрасно и без объяснений понятно а вот как сделать на языке програмиирования - код пожалуйста .....

      Комментарий

      • #4 Свернуть

        статическую переменную можно использовать, в которую записывается время последнего вызова эксперта. И сравнивать время текущее с этой переменной.
        MQL код:
        int start()
        {
        //----
        int i;
        double myMax;
        static datetime sTime;
        int timeFrame=Period();
        bool flag;
        if (sTime==0){sTime = iTime(Symbol(),timeFrame,0); return;}//первый раз
        if ( sTime!=iTime(Symbol(),timeFrame,0)) //если время открытия 0-ого бара не равно нашей стат. переменной
        {
        //1
        //---- Обнуление переменных --------
        i=0;
        myMax=0;
        flag=true; //включаем флаг цикла
        //-----------------
        //поиск макс. от 0 бара до бара со временем sTime
        while (flag)
        {//2
        myMax=MathMax(myMax,High[i]);
        i++;
        if (sTime==iTime(Symbol(),timeFrame,i)) {flag=false;} //выключение флага
        }//2

        sTime = iTime(Symbol(),timeFrame,0);
        }//1
        //----
        return(0);
        }


        Как-то так наверное. Только если так сделать, то наступление каждого нового бара эксперт будет считать за обрыв связи и искать макс. между предыдущим и новым баром. Еще скорее всего какое-то условие нужно включить.
         
        Последний раз редактировалось Gold; 26.03.2013, 23:15.
        FX-календарь | Регистрация на ФОРУМЕ |

        Комментарий

        • #5 Свернуть

          Сообщение от arvis Посмотреть сообщение
          Я уже писал в некоторых темах этого форума, но ответа не дождалься, поэтому создал новую тему.
          А суть вот в чем:
          Представте ситуацию : торгует себе спокойно робот-эксперт и, бац, оборвалась связь между терминалом и сервером ДЦ. Через несколько минут - связь востановилась, но робот (в виду особеностей своего кода) не понимает что призошло. Вот как мне ему приказать после востановления связи просматривать пропущеный промежуток времени. А конкретнее - нужно, чтобы он находил мин и мах значения цены за время отсутствия связи.
          Записывайте время последнего отработанного тика в глобальную переменную, при этом установите дельту, которая будет означать несущественный для советника интервал пропадания связи (1 минута, например).
          И как Вам уже подсказали, на каждом тике проверяйте текущее время с сохраненным. Если прошло более той самой минуты — пересчет баров (или что он там у Вас должен будет сделать).

          Кстати, советники, использующие такой алгоритм (который Вам нужен), очень уязвимы. Лучше полностью избегать в советнике зависимостей от стабильности связи. Стопы используйте, в общем... А то ведь даже VPS иногда вырубается.


          MQL код:
          Time = TimeCurrent();
          Delta = 60; // секунды
          void start() {
          if (TimeCurrent() > (Delta + Time)) { // прошло времени более допустимого
          /* фигачим нужные нам манипуляции */
          Time = TimeCurrent();
          }
          // Работаем дальше
          }
          Последний раз редактировалось Gold; 26.03.2013, 23:15.

          Комментарий

          • #6 Свернуть

            Ну для начала нужно создать алгоритмм что иммено Вам необходимо сделать, кака я понял Ва нужно.
            1. Создать статическую переменную которая будет сохратять время последней обработки данных советника
            т.е. советник после выполнения операция с данными сохраняет время обработки
            2. Нахожения максимальных и минимальных цен от вермени последней обработки советником данных до текущего времени
            3. Если данные изменились - пункт выполнение дейсвий и пункт 1. если нет - переход на сл. дату.

            если это все то реализуется это сле. образом, добавляется код

            MQL код:
            // Инициалицазия статической переменной   
            //...
            static datetime timeWork;
            //...

            // В коде советника при записи обработке манипуляциями с новыми данными и т.д. - незнаю что делает Ваш советник -но в коде в конце или при изменнени данных тут выбирайте как Ва нужно добавляете код
            //...
            timeWork = TimeCurrent();
            //...


            // Вычисление диаппазона для обработки данных и обработка этих данных
            //...
            double PriceMin, PriceMax;
            int BarLast = iBarShift(Symbol(),0, timeWork); //определяем бар из истории от текущего момента до момента ппоследней обработки данных
            if (BarLast>0) //-- Если с момента последней обработки прошло 1 бар и более
            {
            PriceMin = Low[ArrayMinimum(Low,BarLast)]; //нахождение минимума
            PriceMax = High[ArrayMaximum(High,BarLast)]; //нахождение максимума
            }
            else //-- Если с момента последней обработки мы все еще находимся на текущем баре
            {
            PriceMin = Low[0]; //минимум - минимум текущего бара
            PriceMax = High[0]; //максимум - максимум текущего бара
            }
            //.......
            // PriceMin и PriceMax - и есть Ваша минимальная и максимальная цена с момента псоледней обработки советника по текущий момент
            Последний раз редактировалось Gold; 26.03.2013, 23:14.

            Комментарий

            • #7 Свернуть

              Приведу пример нахождения максимального числа на языке java. В принципе его не трудно перевести и на QML . Важно ведь не синтаксис,а , в первую очередь, алгоритм.
              MQL код:
              public double maxElement(double a[]){
              int i=0;
              double max=a[i];
              while(i<a.length){
              if(max<a[i]){
              max=a[i];
              }
              i++;
              }

              return max;

              метод maxElement принимает в качестве параметра массив чисел, и находит среди них максимальное.
              }
              Последний раз редактировалось Gold; 26.03.2013, 23:12.

              Комментарий

              • #8 Свернуть

                Сообщение от yuklia Посмотреть сообщение
                Приведу пример нахождения максимального числа на языке java. В принципе его не трудно перевести и на QML . Важно ведь не синтаксис,а , в первую очередь, алгоритм.
                MQL код:
                 public double maxElement(double a[]){
                int i=0;
                double max=a[i];
                while(i<a.length){
                if(max<a[i]){
                max=a[i];
                }
                i++;
                }


                return max;
                метод maxElement принимает в качестве параметра массив чисел, и находит среди них максимальное.
                }
                Ну а где здесь пропущенное время? Разговор то именно об этом - чтоб найти максимальную цену в период отсутствия связи терминала с сервером. А метод перебора данных в массиве, который вы тут приводите - это школьный курс информатики. Перевести с какого-то языка программирования на другой не составляет труда, в этом вы правы, но код нужно приводить правильный, а не набивать сообщения ради бонусных баллов.
                Последний раз редактировалось Gold; 26.03.2013, 23:14.

                Комментарий

                • #9 Свернуть

                  Народ у кого нибудь есть готовый советник или индикатор который показывают максимально и минимально значение цены дня? или вообще каким способом можно узнать точку до которого коснулась цена? а то в разных терминлах по разному показывает и не могу понять, у кого есть такой инструмент прощу скинуть+

                  Комментарий

                  • #10 Свернуть

                    Сообщение от arvis Посмотреть сообщение
                    Представте ситуацию : торгует себе спокойно робот-эксперт и, бац, оборвалась связь между терминалом и сервером ДЦ. Через несколько минут - связь востановилась, но робот (в виду особеностей своего кода) не понимает что призошло. Вот как мне ему приказать после востановления связи просматривать пропущеный промежуток времени.
                    ... не пойму я чёта в чём проблема, а почему Ваш советник не следит за рынком во всё время его работы, когда связь есть и когда она только что восстановилась ...
                    видимо тут что-то нечисто
                    Сообщение от arvis Посмотреть сообщение
                    (в виду особеностей ЕГО кода)
                    В моём сове я спецом урезаю его "аппетиты" при выполнении того же анализа рыночной ситуации, дабы сэкономить системные ресурсы для других задач...
                    например анализ по Параболику не чаще чем раз в 9 секунд, анализ по Блохастику не чаще чем раз в 4,2 секунды, анализ по МАшкам не чаще чем раз в две секунды....
                    ну или я вообще что-то не понял...

                    ---------- Сообщение добавлено в 23:41 ---------- Предыдущее сообщение размещено в 23:39 ----------

                    Сообщение от Криминал Посмотреть сообщение
                    а то в разных терминлах по разному показывает
                    ну праально, у разных терминалов разные брокеры, а у разных брокеров разные котиры... всё в пределах нормы!

                    Комментарий

                    • #11 Свернуть

                      Сообщение от Криминал Посмотреть сообщение
                      Народ у кого нибудь есть готовый советник или индикатор который показывают максимально и минимально значение цены дня? или вообще каким способом можно узнать точку до которого коснулась цена? а то в разных терминлах по разному показывает и не могу понять, у кого есть такой инструмент прощу скинуть+
                      используйте стандартную готовую функцию
                      она уже заложена в мкул
                      и выдумывать ничего не нужно

                      Комментарий

                      • #12 Свернуть

                        Способов куча:

                        1) годится для любого дня, любого символа, любого ТФ
                        MQL код:
                        double highestDaily = iHigh(Symbol(),PERIOD_D1,bar); // вместо , bar указывайте интересующий вас номер бара
                        double lowestDaily = iLow(Symbol(),PERIOD_D1,bar); // вместо , bar указывайте интересующий вас номер бара


                        2) годится только для текущего дня, для любого символа
                        MQL код:
                        double highestDaily = MarketInfo(Symbol()MODE_HIGH); // показывает хай текущего дня
                        double lowestDaily = MarketInfo(Symbol()MODE_LOW); // показывает лоу текущего дня


                        3) годится только для текущего символа и текущего таймфрейма
                        MQL код:
                        double highest = High[0]; // показывает хай бара, указанного в скобочках
                        double lowest = Low[0]; // показывает лоу бара, указанного в скобочках
                        Ошибка 0xWTF: Подпись не найдена.

                        Комментарий

                        • #13 Свернуть

                          Правильно. Максимум цены среди чего? Дней, неделей или воообще произвольного массива цен?... Что дано. Максимум среди чего. Все познается в сравнении. Копирайт А.Эйнштейн.
                           
                          FX-календарь | Регистрация на ФОРУМЕ |

                          Комментарий

                          • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                          • #14 Свернуть

                            Сообщение от Криминал Посмотреть сообщение
                            Народ у кого нибудь есть готовый советник или индикатор который показывают максимально и минимально значение цены дня? или вообще каким способом можно узнать точку до которого коснулась цена? а то в разных терминлах по разному показывает и не могу понять, у кого есть такой инструмент прощу скинуть+
                            Попробуй использовать встроенный в терминал индикатор фракталов. Он как раз показывает максимальный и минимальный бар из заданного значения количества баров
                            определённого периода времени графика. Советник может получить цену из буферов индикатора. Всего две строки кода. Бары пересчитываются постоянно, отключение не
                            влияет на работу индикатора.

                            Комментарий

                            Сейчас онлайн

                            working...
                            X