Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нужно выделить блок и нажать shift+tab
Добавьте в учебник в раздел
Справочник MQL5 / Технические индикаторы / iMA конкретный пример после описания:
applied_price
[in] Используемая цена. Может быть любой из ценовых констант ENUM_APPLIED_PRICE или хендлом другого индикатора.
как использовать хендл другого индикатора? что это даст? или можно усреднять только значения стандартный тех.индикаторов? а если есть необходимость нарисовать пользовательский индикатор в indicator_separate_window и в этом же окне нарисовать скользящую среднюю по этому индикатору, iMA() это может?Имею смутные подозрения, что с помощью iMA() можно добиться результата iMAOnArray(), но даже не представляю как, возможно я ошибаюсь
ЗЫ: Может я и многого хочу от МТ5, но на МТ4 встроенная ф-ция iMAOnArray() была теперь она отсутствует, написать пользовательскую ф-цию для расчета среднего значения не составляет труда, но хотелось бы иметь штатные ф-ции для работы с массивами, потратил больше время на поиски информации об iMAOnArray(), чем потребовалось времени на написание собственной ф-ции
Добавьте в учебник в раздел
Справочник MQL5 / Технические индикаторы / iMA конкретный пример после описания:
как использовать хендл другого индикатора? что это даст? или можно усреднять только значения стандартный тех.индикаторов? а если есть необходимость нарисовать пользовательский индикатор в indicator_separate_window и в этом же окне нарисовать скользящую среднюю по этому индикатору, iMA() это может?Имею смутные подозрения, что с помощью iMA() можно добиться результата iMAOnArray(), но даже не представляю как, возможно я ошибаюсь
Жмем на линк и попадаем в раздел Ценовые константы, где ниже идет пример:
Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается перечислением ENUM_APPLIED_PRICE, то в качестве входного ценового ряда можно указывать хэндл любого индикатора (встроенного в терминал или написанного пользователем). В этом случае для расчетов будут использованы значения нулевого буфера индикатора. Это позволяет легко строить значения одного индикатора по значениям другого индикатора. Хэндл пользовательского индикатора создается вызовом функции iCustom().
Пример:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
//--- input parameters
input int RSIperiod=14; // период для вычисления RSI
input int Smooth=8; // период сглаживания RSI
input ENUM_MA_METHOD meth=MODE_SMMA; // метод сглаживания
//---- plot RSI
#property indicator_label1 "RSI"
#property indicator_type1 DRAW_LINE
#property indicator_color1 Red
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//---- plot RSI_Smoothed
#property indicator_label2 "RSI_Smoothed"
#property indicator_type2 DRAW_LINE
#property indicator_color2 Navy
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- indicator buffers
double RSIBuffer[]; // здесь мы будем хранить значения RSI
double RSI_SmoothedBuffer[]; // здесь будут сглаженные значения RSI
int RSIhandle; // дескриптор на индикатор RSI
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
IndicatorSetInteger(INDICATOR_DIGITS,2);
//---
RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//---
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[]
)
{
//--- сбросим в ноль значение последней ошибки
ResetLastError();
//--- получим данные индикатора RSI в массив RSIBuffer[]
int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
if(copied<=0)
{
Print("Не удалось скопировать значения индикатора RSI. Error = ",
GetLastError(),", copied = ",copied);
return(0);
}
//--- создадим индикатор средней по значениям индикатора RSI
int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
if(copied<=0)
{
Print("Не удалось скопировать сглаженный индикатор RSI. Error = ",
GetLastError(),", copied =",copied);
return(0);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
Вы просто не дочитали один абзац
Активно использую штатный трэйлинг стоп. В связи с этим пара пожеланий.
1) Добавить возможность выбрать в меню Столбцы "Уровень трэйлинг стопа". Это, насколько я понимаю, не сложно.
2) Добавить значение TS как свойство позиции с возможностью (именно по выбору пользователя) транслировать/не транслировать уровень TS для конкретной позиции на терминал. Понимаю, что это значительно серьёзнее, чем пункт 1), а реализация TS полностью на стороне сервера серьёзно повышает нагрузку на сервер.
Для чего лично мне был бы полезен пункт 2):
- к одному счету подключено несколько терминалов (в идеале - через разные серверы и провайдеров, например, дома и на работе);
- на одном из терминалов вручную открывается позиция и задаётся уровень TS;
- при установке уровня TS на другом терминале TS на первом остаётся неизменным, т.к. сейчас трэйлинг стоп реализован на стороне клиента. Вот это и хотелось бы изменить, причём по желанию клиента.
Жмем на линк и попадаем в раздел Ценовые константы, где ниже идет пример:
Вы просто не дочитали один абзац
Жмем на линк и попадаем в раздел Ценовые константы, где ниже идет пример:
Вы просто не дочитали один абзац
дочитал абзац, но в примере используются только стандартные тех.индикаторы, вопрос про пользовательские индикаторы и ф-цию iMAOnArray()
-хотелось бы видеть можно ли использовать скользящие средние для сглаживания данных пользовательского индикатора
- думаю не помешали бы ссылки на устаревшие ф-ции, чтобы не искать по форуму, в справке МТ4 был раздел
Справочник MQL4 - Устаревшие функции
Примеры действительно есть, но нередко их интуитивно не найдешь, может можно в подобных случаях просто сделать ссылку "пример" - было бы очень удобно, IMHO конечно.
дочитал абзац, но в примере используются только стандартные тех.индикаторы, вопрос про пользовательские индикаторы и ф-цию iMAOnArray()
-хотелось бы видеть можно ли использовать скользящие средние для сглаживания данных пользовательского индикатора
Приводил выше :
Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается перечислением ENUM_APPLIED_PRICE, то в качестве входного ценового ряда можно указывать хэндл любого индикатора (встроенного в терминал или написанного пользователем).
Читайте также статьи:
Если сообщество заинтересует, то можно рассмотреть изменение существующего варианта тестирования и оптимизации. У меня, например, возникает необходимость получать данные тестирования/оптимизации не на одном периоде истории, а сразу на нескольких (скажем, для оценки равномерности работы эксперта). Конечно, можно поочерёдно провести тестирвание/оптимизацию по всем периодам. Но если один период т/о занимает от 0.5 до 1 часа, а вам надо 10--то гораздо удобнее запустить сразу все 10 периодов (например, на ночь) и получить все результаты позднее. Я в настоящее время в экперте в качестве входного параметра указываю период работы типа "Дата от", "Дата до", а на внешней вкладке тестера указываю общий период оптимизации (Даты от/до - один из параметров оптимизации). Но в этом случае время оптимизации каждого прогона по сути равно времени прогона общего большого преиода оптимизации (что на вкладке тестера--ведь тики-то идут постоянно - проверено практически). Вот если бы можно было в тестере указать сразу 2 периода: общий большой и малый внутри него, то проблема была бы решена.
Есть функция ChartIndicatorAdd() добавления индикатора на график. Сделайте, пожалуйста, функцию удаления индикатора с графика. А то получилось как с ядерной бомбой: бомбу придумали, а антибомбу нет.