iCustom для Symphonie_Trendline_Indicator_v3.0.mq4
Показано с 1 по 7 из 7

Тема: iCustom для Symphonie_Trendline_Indicator_v3.0.mq4

  1. #1
    Новичок Аватар для CeBePHb1Y
    Регистрация
    17.03.2013
    Сообщений
    16
    Promo (¢)
    135
    Благодарности
    Получено: 2
    Отправлено: 1

    iCustom для Symphonie_Trendline_Indicator_v3.0.mq4

    Помогите не могу правильно передать параметры в функцию iCustom, чтобы получить значение индикатора Symphonie_Trendline_Indicator_v3.0.mq4
    пишу вот так:
    Код:
    z=iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0",63,18,0,1);
    но z почему то всегда = 0. думаю что то с параметрами, подскажите что не так? вот код Symphonie_Trendline_Indicator_v3.0.mq4:
    Код:
    //+------------------------------------------------------------------------+
    //|                                 Symphonie_Trendline_Indicator_v3.0.mq4 |
    //|Based on basic Trendline by MetaTrader_Experts_and_Indicators           |
    //+------------------------------------------------------------------------+
    #property copyright "Symphonie Trader System"
    #property link      "MetaTrader_Experts_and_Indicators"
    
    #property indicator_chart_window
    #property indicator_buffers 4
    #property indicator_color1 DodgerBlue
    #property indicator_color2 Red
    
    extern int CCIPeriod=63;
    extern int ATRPeriod=18;
    double TrendUp[];
    double TrendDown[];
    int st = 0;
    //extern int SlowerEMA = 6;
    
    
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function|
    //+------------------------------------------------------------------+
    int init()
     {
    //---- indicators
    
      SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
      SetIndexBuffer(0, TrendUp);
      SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
      SetIndexBuffer(1, TrendDown);
    
      /*SetIndexStyle(0, DRAW_ARROW, EMPTY);
      SetIndexArrow(0, 159);
      SetIndexBuffer(0, TrendUp);
      SetIndexStyle(1, DRAW_ARROW, EMPTY);
      SetIndexArrow(1, 159);
      SetIndexBuffer(1, TrendDown);*/
    
      /*for(int i = 0; i < Bars; i++) {
         TrendUp[i] = NULL;
         TrendDown[i] = NULL;
      }*/
    //----
      return(0);
     }
    //+------------------------------------------------------------------+
    //| Custor indicator deinitialization function|
    //+------------------------------------------------------------------+
    int deinit()
     {
    //----
      /*for(int i = 0; i < Bars; i++) {
         TrendUp[i] = NULL;
         TrendDown[i] = NULL;
      }*/
    //----
      return(0);
     }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function|
    //+------------------------------------------------------------------+
    int start()
     {
    
      int limit, i, counter;
      double Range, AvgRange, cciTrendNow, cciTrendPrevious, var;
    
      int counted_bars = IndicatorCounted();
    //---- check for possible errors
      if(counted_bars < 0) return(-1);
    //---- last counted bar will be recounted
      if(counted_bars > 0) counted_bars--;
    
      limit=Bars-counted_bars;
    
      for(i = limit; i >= 0; i--) {
         cciTrendNow = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i);
         cciTrendPrevious = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i+1);
    
         //st = st * 100;
    
    
         counter = i;
         Range = 0;
         AvgRange = 0;
         for (counter = i; counter >= i-9; counter--) {
            AvgRange = AvgRange + MathAbs(High[counter]-Low[counter]);
         }
         Range = AvgRange/10;
         if (cciTrendNow >= st && cciTrendPrevious < st) {
            TrendUp[i+1] = TrendDown[i+1];
         }
    
         if (cciTrendNow <= st && cciTrendPrevious > st) {
            TrendDown[i+1] = TrendUp[i+1];
         }
    
         if (cciTrendNow >= st) {
            TrendUp[i] = Low[i] - iATR(NULL, 0, ATRPeriod, i);
            if (TrendUp[i] < TrendUp[i+1]) {
               TrendUp[i] = TrendUp[i+1];
            }
         }
         else if (cciTrendNow <= st) {
            TrendDown[i] = High[i] + iATR(NULL, 0, ATRPeriod, i);
            if (TrendDown[i] > TrendDown[i+1]) {
               TrendDown[i] = TrendDown[i+1];
            }
         }
      }
    
    //----
    
    //----
      return(0);
     }
    
    //+------------------------------------------------------------------+

    Вы не можете благодарить!

  2. #2
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77
    Нужно указывать не значения, а имена переменных. Вместо 63 и 18 должны быть из названия как в оригинальном индюке. Ещё почитайте про ИКастом в справке.

    Вы не можете благодарить!

  3. #3
    Новичок Аватар для CeBePHb1Y
    Регистрация
    17.03.2013
    Сообщений
    16
    Promo (¢)
    135
    Благодарности
    Получено: 2
    Отправлено: 1
    я читал, но понял так как понял, и не работает. как правильно сделать? откуда взять параметры и как их написать?

    Вы не можете благодарить!

  4. #4
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77
    Цитата Сообщение от CeBePHb1Y Посмотреть сообщение
    я читал, но понял так как понял, и не работает. как правильно сделать? откуда взять параметры и как их написать?
    Читаем внимательно и подключаем метод научного тыка.
    Ещё раз.

    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Нужно указывать не значения, а имена переменных.
    Цитата Сообщение от CeBePHb1Y Посмотреть сообщение
    extern int CCIPeriod=63;
    extern int ATRPeriod=18;
    вместо

    Цитата Сообщение от CeBePHb1Y Посмотреть сообщение
    63,18

    Вы не можете благодарить!

  5. #5
    Новичок Аватар для SilverKZ
    Регистрация
    19.11.2012
    Сообщений
    204
    Promo (¢)
    3,898
    Благодарности
    Получено: 138
    Отправлено: 13
    В индикаторе «Symphonie_Trendline_Indicator_v3.0.mq4» для отображения линии используется 2 буфера, поэтому необходимо запрашивать значения двух буферов:

    z1 = iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0 ",63,18,0,1);
    z2 = iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0 ",63,18,1,1);

    При этом одна переменная будет иметь EMPTY_VALUE, т.е. пустое значение, а другая значение индикатора iCustom.

    В советниках обрабатываю так:

    if (z1!=EMPTY_VALUE && ……)
    {
    ……
    }
    if (z2!=EMPTY_VALUE && ……)
    {
    ……
    }

    В индикаторах так:

    PHP код:
    //|------------------------------------------------------------------|
    //|                                               Indicator Arrow.mq4|
    //|                                    Copyright © 2013, Mr.SilverKZ |
    //|                                                 SilverKZ@mail.kz |
    //+------------------------------------------------------------------+
    #property copyright "SilverKZ"
    #property link "SilverKZ@mail.kz"

    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 Blue
    #property indicator_color2 Red

    double buf_1[];
    double buf_2[];
    //+------------------------------------------------------------------+
    //| Функция инициализации, запускается один раз                      |
    //+------------------------------------------------------------------+
    int init() 
      {
       
    SetIndexBuffer(0,buf_1);
       
    SetIndexBuffer(1,buf_2);

       
    SetIndexStyle (0,DRAW_LINESTYLE_SOLID2);
       
    SetIndexStyle (1,DRAW_LINESTYLE_SOLID2);

       
    SetIndexEmptyValue(0,0.0);
       
    SetIndexEmptyValue(1,0.0);
       
       return(
    0);
      }
    //+------------------------------------------------------------------+
    //| Основная Функция, запускается на каждом тике                     |
    //+------------------------------------------------------------------+
    int start() 
      {
       if (
    Bars <= 63) return(0);
       
    int ExtCountedBars IndicatorCounted();
       if (
    ExtCountedBars 0) return(-1);
       if (
    ExtCountedBars 0ExtCountedBars--;
       for (
    int i=Bars-ExtCountedBars-1i>=0i--)
         { 
          
    double buf1 iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0",63,18,0,i);
          
    double buf2 iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0",63,18,1,i);
          if (
    buf1!=EMPTY_VALUEbuf_1[i] = buf1;
          if (
    buf2!=EMPTY_VALUEbuf_2[i] = buf2;
         }
       return(
    0);
      }
    //---- end 
    Это ваш индикатор через iCustom
    5555.gif

    Вы не можете благодарить!

  6. #6
    Новичок Аватар для CeBePHb1Y
    Регистрация
    17.03.2013
    Сообщений
    16
    Promo (¢)
    135
    Благодарности
    Получено: 2
    Отправлено: 1
    SilverKZ,
    вот спасибо, разжевал и в рот положил, только я поздно заметил, сам уже разобраться успел) плюсую за отзывчивость)

    Вы не можете благодарить!
    Последний раз редактировалось qwezz; 01.04.2013 в 00:10.

  7. #7
    Новичок
    Регистрация
    11.06.2014
    Сообщений
    64
    Promo (¢)
    16
    Благодарности
    Получено: 9
    Отправлено: 7
    Всем привет , помогите исправить советник .
    Сова мультивалютная
    Задача: сова открывает много зделок , нужно чтобы по одному сигналу открывалась одна зделка , а также добавьте возможность торговать фикс лотом
    Заранее спасибо

    Вы не можете благодарить!

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •