Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 74 из 87 ПерваяПервая ... 2464727374757684 ... ПоследняяПоследняя
  1. 8
    Комментарии
    0
    Темы
    8
    Репутация Pro
     
    Новичок

    2 Медалей
    Cпасибо примного благодарен.
  2. 134
    Комментарии
    1
    Темы
    136
    Репутация Pro
    Аватар для G_Dark  
    В начале пути

    2 Медалей
    Добрый день подскажите пожалуста как получить в MQL5 значения индикатора параболик сар? Зрание спасибо.
  3. 1,156
    Комментарии
    4
    Темы
    1189
    Репутация Pro
    Аватар для zerkmax  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от G_Dark Посмотреть сообщение
    Добрый день подскажите пожалуста как получить в MQL5 значения индикатора параболик сар? Зрание спасибо.
    Код:
    iSAR
    
    Возвращает хэндл индикатора Parabolic Stop and Reverse system. Всего один буфер.
    
    int  iSAR(
       string           symbol,      // имя символа
       ENUM_TIMEFRAMES  period,      // период
       double           step,        // шаг увеличения скорости - ускорение
       double           maximum      // максимальный коэффициент следования за ценой
       );
     
    
    Параметры
    
    symbol
    
    [in]  Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
    
    period
    
    [in]  Значение периода может быть одним из значений перечисления ENUM_TIMEFRAMES, 0 означает текущий таймфрейм.
    
    step
    
    [in]  Приращение уровня стопа, обычно 0.02.
    
    maximum
    
    [in]  Максимальный уровень стопа, обычно 0.2.
    
    Возвращаемое значение
    
    Возвращает хэндл указанного технического индикатора, в случае неудачи возвращает INVALID_HANDLE. Для освобождения памяти компьютера от неиспользуемого больше индикатора служит функция IndicatorRelease(), которой передается хэндл этого индикатора.
    
    Пример:
    
    //+------------------------------------------------------------------+
    //|                                                    Demo_iSAR.mq5 |
    //|                        Copyright 2011, MetaQuotes Software Corp. |
    //|                                              http://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2011, MetaQuotes Software Corp."
    #property link      "http://www.mql5.com"
    #property version   "1.00"
    #property description "Индикатор демонстрирует как нужно получать данные"
    #property description "индикаторных буферов для технического индикатора iSAR."
    #property description "Символ и таймфрейм, на котором рассчитывается индикатор,"
    #property description "задаются параметрами symbol и period."
    #property description "Способ создания хэндла задается параметром 'type' (тип функции)."
    #property description "Все остальные параметры как в стандартном Parabolic Stop and Reverse."
     
    #property indicator_chart_window
    #property indicator_buffers 1
    #property indicator_plots   1
    //--- построение iSAR
    #property indicator_label1  "iSAR"
    #property indicator_type1   DRAW_ARROW
    #property indicator_color1  clrBlue
    #property indicator_style1  STYLE_SOLID
    #property indicator_width1  1
    //+------------------------------------------------------------------+
    //|  перечисление способов создания хэндла                           |
    //+------------------------------------------------------------------+
    enum Creation
      {
       Call_iSAR,              // использовать iSAR
       Call_IndicatorCreate    // использовать IndicatorCreate
      };
    //--- входные параметры
    input Creation             type=Call_iSAR;               // тип функции 
    input double               step=0.02;                    // шаг - фактор ускорения при подтягивании стопов
    input double               maximum=0.2;                  // максимальное значение шага
    input string               symbol=" ";                   // символ 
    input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // таймфрейм
    //--- индикаторные буферы
    double         iSARBuffer[];
    //--- переменная для хранения хэндла индикатора iSAR
    int    handle;
    //--- переменная для хранения 
    string name=symbol;
    //--- имя индикатора на графике
    string short_name;
    //--- будем хранить количество значений в индикаторе Parabolic SAR
    int    bars_calculated=0;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //--- привязка массива к индикаторному буферу
       SetIndexBuffer(0,iSARBuffer,INDICATOR_DATA);
    //--- установим свойству PLOT_ARROW код символа из набора Wingdings для отображения на графике
       PlotIndexSetInteger(0,PLOT_ARROW,159);
    //--- определимся с символом, на котором строится индикатор
       name=symbol;
    //--- удалим пробелы слева и справа
       StringTrimRight(name);
       StringTrimLeft(name);
    //--- если после этого длина строки name нулевая
       if(StringLen(name)==0)
         {
          //--- возьмем символ с графика, на котором запущен индикатор
          name=_Symbol;
         }
    //--- создадим хэндл индикатора
       if(type==Call_iSAR)
          handle=iSAR(name,period,step,maximum);
       else
         {
          //--- заполним структуру значениями параметров индикатора     
          MqlParam pars[2];
          //--- значение шага
          pars[0].type=TYPE_DOUBLE;
          pars[0].double_value=step;
          //--- предельное значение шага, которое может использоваться при расчетах
          pars[1].type=TYPE_DOUBLE;
          pars[1].double_value=maximum;
          handle=IndicatorCreate(name,period,IND_SAR,2,pars);
         }
    //--- если не удалось создать хэндл
       if(handle==INVALID_HANDLE)
         {
          //--- сообщим о неудаче и выведем номер ошибки
          PrintFormat("Не удалось создать хэндл индикатора iSAR для пары %s/%s, код ошибки %d",
                      name,
                      EnumToString(period),
                      GetLastError());
          //--- работа индикатора завершается досрочно при возврате отрицательного значения
          return(-1);
         }
    //--- покажем на какой паре символ/таймфрейм рассчитан индикатор Parabolic SAR
       short_name=StringFormat("iSAR(%s/%s, %G, %G)",name,EnumToString(period),
                               step,maximum);
       IndicatorSetString(INDICATOR_SHORTNAME,short_name);
    //--- нормальное выполнение инициализации индикатора 
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    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[])
      {
    //--- количество копируемых значений из индикатора iSAR
       int values_to_copy;
    //--- узнаем количество рассчитанных значений в индикаторе
       int calculated=BarsCalculated(handle);
       if(calculated<=0)
         {
          PrintFormat("BarsCalculated() вернул %d, код ошибки %d",calculated,GetLastError());
          return(0);
         }
    //--- если это первый запуск вычислений нашего индикатора или изменилось количество значений в индикаторе iSAR
    //--- или если необходимо рассчитать индикатор для двух или более баров (значит что-то изменилось в истории)
       if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
         {
          //--- если массив iSARBuffer больше, чем значений в индикаторе iSAR на паре symbol/period, то копируем не все 
          //--- в противном случае копировать будем меньше, чем размер индикаторных буферов
          if(calculated>rates_total) values_to_copy=rates_total;
          else                       values_to_copy=calculated;
         }
       else
         {
          //--- значит наш индикатор рассчитывается не в первый раз и с момента последнего вызова OnCalculate())
          //--- для расчета добавилось не более одного бара
          values_to_copy=(rates_total-prev_calculated)+1;
         }
    //--- заполняем массивы значениями из индикатора iSAR
    //--- если FillArrayFromBuffer вернула false, значит данные не готовы - завершаем работу
       if(!FillArrayFromBuffer(iSARBuffer,handle,values_to_copy)) return(0);
    //--- сформируем сообщение
       string comm=StringFormat("%s ==>  Обновлено значений в индикаторе %s: %d",
                                TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
                                short_name,
                                values_to_copy);
    //--- выведем на график служебное сообщение
       Comment(comm);
    //--- запомним количество значений в индикаторе Parabolic SAR
       bars_calculated=calculated;
    //--- вернем значение prev_calculated для следующего вызова
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    //| Заполняем индикаторный буфер из индикатора iSAR                  |
    //+------------------------------------------------------------------+
    bool FillArrayFromBuffer(double &sar_buffer[],  // индикаторный буфер значений Parabolic SAR
                             int ind_handle,        // хэндл индикатора iSAR
                             int amount             // количество копируемых значений
                             )
      {
    //--- сбросим код ошибки
       ResetLastError();
    //--- заполняем часть массива iSARBuffer значениями из индикаторного буфера под индексом 0
       if(CopyBuffer(ind_handle,0,0,amount,sar_buffer)<0)
         {
          //--- если копирование не удалось, сообщим код ошибки
          PrintFormat("Не удалось скопировать данные из индикатора iSAR, код ошибки %d",GetLastError());
          //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным
          return(false);
         }
    //--- все получилось
       return(true);
      }
    //+------------------------------------------------------------------+
    //| Indicator deinitialization function                              |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //--- почистим график при удалении индикатора
       Comment("");
      }
    Взято из справки

    А вообще стало сложнее с индюками работать.
  4. 810
    Комментарии
    17
    Темы
    827
    Репутация Pro
    Аватар для M.B.  
    В начале пути

    4 Медалей
    а есть ли какой-нить советник, или скрипт или хз что там ещё или просто возможность, чтоб в МТ4 выставлять тейк профит не на каком-нить определённом уровне, а на линии...то есть если идёт трендовая линия (косая естественно), то тейк профит скользил бы по линии и фиксировался бы, когда цена её коснулась бы?
  5. 6,556
    Комментарии
    18
    Темы
    6883
    Репутация Pro
    Аватар для greych  
    Старожил

    7 Медалей
    Цитата Сообщение от M.B. Посмотреть сообщение
    а есть ли какой-нить советник, или скрипт или хз что там ещё или просто возможность, чтоб в МТ4 выставлять тейк профит не на каком-нить определённом уровне, а на линии...то есть если идёт трендовая линия (косая естественно), то тейк профит скользил бы по линии и фиксировался бы, когда цена её коснулась бы?
    здесь http://www.procapital.ru/showthread.php?t=11629 точно есть такая функция, ну или найти советник с оной, они наверняка уже есть готовые
  6. 810
    Комментарии
    17
    Темы
    827
    Репутация Pro
    Аватар для M.B.  
    В начале пути

    4 Медалей
    Цитата Сообщение от greych Посмотреть сообщение
    здесь http://www.procapital.ru/showthread.php?t=11629 точно есть такая функция, ну или найти советник с оной, они наверняка уже есть готовые
    да я думал чего попроще...тут и регистрация нужна и потом ещё ответа ждать, т.к. она не совсем бесплатная....я там всё читал про реал счета....а на демо счёте она бесплатная совсем что ли? =)
  7. 6,556
    Комментарии
    18
    Темы
    6883
    Репутация Pro
    Аватар для greych  
    Старожил

    7 Медалей
    Цитата Сообщение от M.B. Посмотреть сообщение
    да я думал чего попроще...тут и регистрация нужна и потом ещё ответа ждать, т.к. она не совсем бесплатная....я там всё читал про реал счета....а на демо счёте она бесплатная совсем что ли? =)
    раньше вроде основные функции бесплатны были, счас не знаю. мне не понравилось присутствием многого лишнего для меня, а так полезная вещь.
    я вот смотрю для конкурса надо вам, а это там нельзя ни в каком виде
  8. 810
    Комментарии
    17
    Темы
    827
    Репутация Pro
    Аватар для M.B.  
    В начале пути

    4 Медалей
    Цитата Сообщение от greych Посмотреть сообщение
    раньше вроде основные функции бесплатны были, счас не знаю. мне не понравилось присутствием многого лишнего для меня, а так полезная вещь.
    я вот смотрю для конкурса надо вам, а это там нельзя ни в каком виде

    чего-то в проекте Валерия Мальцева я не нашёл ничего такого запрещающего
  9. 1,279
    Комментарии
    15
    Темы
    1292
    Репутация Pro
    Аватар для Sevrer  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от M.B. Посмотреть сообщение
    чего-то в проекте Валерия Мальцева я не нашёл ничего такого запрещающего
    В проекте Мальцева запрещено использование экспертов и скриптов для управления ордерами. Т.е. с ордерами работать надо только ручками. А значит тралить тейк так же придется ручками.
  10. 810
    Комментарии
    17
    Темы
    827
    Репутация Pro
    Аватар для M.B.  
    В начале пути

    4 Медалей
    Цитата Сообщение от Sevrer Посмотреть сообщение
    В проекте Мальцева запрещено использование экспертов и скриптов для управления ордерами. Т.е. с ордерами работать надо только ручками. А значит тралить тейк так же придется ручками.
    ок....спасибо за то, что подсказали :bow:

Вверх
РегистрацияX

чтобы писать, читать, комментировать