Добрый день!
Сегодня решил попробовать использовать iCustom для определения торговых условий в тестовом советнике (открывает и закрывает позицию при пересечении средней). Недавно сам сделал индикатор, который выдаёт сигналы 1 и -1 (пересечение средней). К сожалению при отсутствии ошибок советник не желает воспринимать iCustom. Хотя сам индикатор, открытый в отдельном окне в инструменте, продолжает показывать сигналы.
Если кто-то имел дело с iCustom, пожалуйста, подскажите - в чём моя ошибка? Заранее благодарен за помощь. (EMA_I - то, что я указываю в качестве сигнала индикатора)
Попробуйте так...double EMA_I = iCustom(NULL,0,"MA_1",0,0);
... сейчас попробую.... спасибо)
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);
double EMA_I = iCustom(NULL,0,"MA_1.mq4",0,0); - не введены параметры пользовательского индикатора (у машки, как правило, даже в пользовательском в индюке внешний параметр - период сглаживания)
ну и название будет "MA_1"
хотя зачем так сложно? double EMA_I=iMA(...); - смотрите документацию MQL4 (в левом верхнем углу найдете ссылку)
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);
double EMA_I = iCustom(NULL,0,"MA_1.mq4",0,0); - не введены параметры пользовательского индикатора (у машки, как правило, даже в пользовательском в индюке внешний параметр - период сглаживания)
ну и название будет "MA_1"
хотя зачем так сложно? double EMA_I=iMA(...); - смотрите документацию MQL4 (в левом верхнем углу найдете ссылку)
Все варианты перепробовал. Последний : double EMA_I = iCustom(NULL,0,"MA_1",24,0,0) Всё равно не работает - не открывает позицию. Значение EMA_I всегда равно 0.
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
хотя зачем так сложно? double EMA_I=iMA(...); - смотрите документацию MQL4 (в левом верхнем углу найдете ссылку)
Вот код самого индикатора:
//+------------------------------------------------------------------+
//| MA_1.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
extern int Per=24;
int History=5000;
double MA_1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,MA_1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3,Blue);
return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i,Counted_bars;
double My_24EMA;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
if (i>History-1)
i=History-1;
while (i>=0)
{
MA_1[i+1]=0;
My_24EMA=iMA(NULL,0,Per,0,MODE_EMA,PRICE_CLOSE,i+1);
if (Close[i+1]>My_24EMA && Close[i+2]<My_24EMA)
{
MA_1[i+1]=1;
}
if (Close[i+1]<My_24EMA && Close[i+2]>My_24EMA)
{
MA_1[i+1]=-1;
}
i--;
}
return;
}
//+------------------------------------------------------------------+
я понимаю, что проще double EMA_I=iMA(...); но, я просто тестирую сам принцип использования iCustom ...ведь индикатор может быть другим и посложней
Нулевой Бар всегда равен нулю
Нулевой Бар всегда равен нулю
я поставил
Print("EMA_I рано",EMA_I);
.... EMA_I выдаёт одно и тоже 10-значное число!
ddouble EMA_I = iCustom(NULL,0,"MA_1.mq4",24,0,0);
Print("Значение индикатора = ",EMA_I);ouble EMA_I = iCustom(NULL,0,"MA_1.mq4",24,0,0);
Print("Значение индикатора = ",EMA_I);
я поставил
Print("EMA_I рано",EMA_I);
.... EMA_I выдаёт одно и тоже 10-значное число!
ddouble EMA_I = iCustom(NULL,0,"MA_1.mq4",24,0,0);
Print("Значение индикатора = ",EMA_I);ouble EMA_I = iCustom(NULL,0,"MA_1.mq4",24,0,0);
Print("Значение индикатора = ",EMA_I);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Сегодня решил попробовать использовать iCustom для определения торговых условий в тестовом советнике (открывает и закрывает позицию при пересечении средней). Недавно сам сделал индикатор, который выдаёт сигналы 1 и -1 (пересечение средней). К сожалению при отсутствии ошибок советник не желает воспринимать iCustom. Хотя сам индикатор, открытый в отдельном окне в инструменте, продолжает показывать сигналы.
Если кто-то имел дело с iCustom, пожалуйста, подскажите - в чём моя ошибка? Заранее благодарен за помощь. (EMA_I - то, что я указываю в качестве сигнала индикатора)