Скачать MetaTrader 5

Помогите передать данные из индикатора!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Evgeniy Zhdan
6948
Evgeniy Zhdan  

Уважаемые товарищи! Помиогите передать данные из индикатора дивергенции FX5_MACD_Divergence_V1.1 в совтеник, чтобы можно было использовать дивергенцию как сигнал на открытие ордера. Конечно, этот сигнал будет не основным.

Через icustom не получается, буферы, рисующие стрелки дивергенции с каждым тиком передают максимальное число в метаэдиторе: - 2013.11.16 09:45:32 2012.02.17 02:45 BakX EURUSD,M15: diverbuy = 2147483647

и это же число и на селл-дивергенцию. Причем с каждым тиком. Уже второй день экспериментирую, ничего не получается. Очень прошу помощи!

Индикатор прилагаю

Файлы:
Alexey Subbotin
4998
Alexey Subbotin  
Показывайте кусок кода советника, где вызываете индикатор, а то отправят в клуб экстрасенсов
Evgeniy Zhdan
6948
Evgeniy Zhdan  

Вот кусок кода:

// Получаем данные из MACD_Divergence_V1.1

diverbuy = iCustom(Symbol(),0,"MACD_Divergence_V1.1",0,1);

diversell = iCustom(Symbol(),0,"MACD_Divergence_V1.1",1,1);

Evgeniy Zhdan
6948
Evgeniy Zhdan  

потом просто проверяю какие значения дает, любой из них:

if (diverbuy !=0)

{

Print ("diverbuy = ", diverbuy);

}

и на каждом тике

2013.11.16 09:45:32 2012.02.17 02:45 BakX EURUSD,M15: diverbuy = 2147483647

Vladimir Gomonov
8317
Vladimir Gomonov  
remon:

потом просто проверяю какие значения дает, любой из них:

if (diverbuy !=0)

{

Print ("diverbuy = ", diverbuy);

}

и на каждом тике

2013.11.16 09:45:32 2012.02.17 02:45 BakX EURUSD,M15: diverbuy = 2147483647


какого типа у вас diverbuy и diversell ? int ? вот то-то и оно. должон быть double.

Evgeniy Zhdan
6948
Evgeniy Zhdan  
MetaDriver:

какого типа у вас diverbuy и diversell ? int ? вот то-то и оно. должон быть double.


double sl,tp,sar,pos,bbhigh,bblow,forexglaz,diverbuy,diversell,fxbuy,fxsell;

Они объявлены как double

Vladyslav Goshkov
2151
Vladyslav Goshkov  
remon:

Вот кусок кода:

// Получаем данные из MACD_Divergence_V1.1

diverbuy = iCustom(Symbol(),0,"MACD_Divergence_V1.1",0,1);

diversell = iCustom(Symbol(),0,"MACD_Divergence_V1.1",1,1);


Вы хоть смотрели как нужно вызывать индикатор через iCustom() ? где список передаваемых параметров ? https://docs.mql4.com/ru/indicators/icustom

//+------------------------------------------------------------------+
//|                                     FX5_MACD_Divergence_V1.1.mq4 |
//|                                                              FX5 |
//|                                                    hazem@uk2.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, FX5"
#property link      "hazem@uk2.net"
//----
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Magenta
#property indicator_color4 Blue
//----
#define arrowsDisplacement 0.0001
//---- input parameters
extern string separator1 = "*** MACD Settings ***";
extern int    fastEMA = 12;
extern int    slowEMA = 26;
extern int    signalSMA = 9;
extern string separator2 = "*** Indicator Settings ***";
extern bool   drawIndicatorTrendLines = true;
extern bool   drawPriceTrendLines = true;
extern bool   displayAlert = true;
//---- buffers
double bullishDivergence[];
double bearishDivergence[];
double macd[];
double signal[];
//----
static datetime lastAlertTime;
static string   indicatorName;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()

Иначе можно экспериментировать до окончания времен ;)))).

Evgeniy Zhdan
6948
Evgeniy Zhdan  
VladislavVG:


Вы хоть смотрели как нужно вызывать индикатор через iCustom() ? где список передаваемых параметров ? https://docs.mql4.com/ru/indicators/icustom

Иначе можно экспериментировать до окончания времен ;)))).


Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.

Я делал с параметрами и без. Результат ОДИНАКОВ! Попробуйте сами, это займет не более 5 минут. Заодно может быть какие-то ценные мысли появятся.

Mislaid
612
Mislaid  
remon:

Вот кусок кода:

// Получаем данные из MACD_Divergence_V1.1

diverbuy = iCustom(Symbol(),0,"MACD_Divergence_V1.1",0,1);

diversell = iCustom(Symbol(),0,"MACD_Divergence_V1.1",1,1);

Читайте документацию

Справочник MQL4 - Технические индикаторы - iCustom

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Расчет указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\experts\indicators.
Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
name - Имя пользовательского индикатора.
... - Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.
mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Пример:
  double val=iCustom(NULL, 0, "SampleInd",13,1,0);
В вашем индикаторе внешние параметры:

//---- input parameters
extern string separator1 = "*** MACD Settings ***";
extern int fastEMA = 12;
extern int slowEMA = 26;
extern int signalSMA = 9;
extern string separator2 = "*** Indicator Settings ***";
extern bool drawIndicatorTrendLines = true;
extern bool drawPriceTrendLines = true;
extern bool displayAlert = true;

И где они в вызове iCustom?

Более того, индикатор рисует стрелки на барах с индексом, большим 1. Поэтому, даже если вы правильно укажете внешние параметры, на баре с индексом 1 всегда будет неопределенное значение. Смотрите этот кусок кода

void CalculateIndicator(int countedBars)
  {
   for(int i = Bars - countedBars; i >= 0; i--)
     {
       CalculateMACD(i);
       CatchBullishDivergence(i + 2);
       CatchBearishDivergence(i + 2);
     }              
  }
Evgeniy Zhdan
6948
Evgeniy Zhdan  
А какие тогда в моем случае индексы буфера? Этот индикатор использует 4 буфера. 2 и 3 - рисует линии а не стрелки. Остается 0 и 1 - стрелки
Vladyslav Goshkov
2151
Vladyslav Goshkov  
remon:


Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.

Я делал с параметрами и без. Результат ОДИНАКОВ! Попробуйте сами, это займет не более 5 минут. Заодно может быть какие-то ценные мысли появятся.


Тяжко Вам, наверное, при таком уровне понимания тех документации ;).. "при необходимости" обозначает, что если параметры есть, то их необходимо указывать )))))))))))))))))).
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий