АвторСообщение
постоянный участник




Сообщение: 2237
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 21.02.16 10:30. Заголовок: Template_Expert


Наступил год пятилетнего Юбилея выхода серии статей Игоря по программированию на mql, на мой взгляд очень значимых и
исключительно полезных:

Как создать эксперт, не обладая навыками программирования

Как создать эксперт, не обладая навыками программирования. Часть 2.
Как создать эксперт, не обладая навыками программирования. Часть 3.

Как создать индикатор, не обладая навыками программирования.

Лично мне эти статьи дали возможность приобщиться к интересному миру программирования торговых операций на MQL4.
Спасибо Игорь!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 37 , стр: 1 2 3 All [только новые]


постоянный участник




Сообщение: 2238
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 21.02.16 10:39. Заголовок: Игорь, день добрый! ..


Игорь, день добрый!

Столкнулся с непонятной ситуацией. Встроил в template_expert вызов индикатора Quantum, разрешил открывать много позиций в одном
направлении - обычно пользовался стандартным вариантом с одним входом. У измененной версии заметил одну особенность:
сигналы покупок отрабатывают чаще чем сигналы продаж.

Т.е. я не ожидал от эксперта 100% обработки всех сигналов: на то есть брокер, реквоты и проскальзывания, но смещение в сторону
большего количества покупок все-же заметно.

Текст эксперта в прицепе: https://dropmefiles.com/7reDf





С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2051
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 23.02.16 13:25. Заголовок: Genry пишет: Столкн..


Genry пишет:

 цитата:
Столкнулся с непонятной ситуацией. Встроил в template_expert вызов индикатора Quantum, разрешил открывать много позиций в одном
направлении - обычно пользовался стандартным вариантом с одним входом. У измененной версии заметил одну особенность:
сигналы покупок отрабатывают чаще чем сигналы продаж.


Добрый день.

Вы дали ссылку на ex4-файл. А для того чтобы понять, о чем идет речь, нужен код (файл mq4).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2240
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 23.02.16 13:36. Заголовок: Scriptong пишет: Вы..


Scriptong пишет:

 цитата:
Вы дали ссылку на ex4-файл. А для того чтобы понять, о чем идет речь, нужен код (файл mq4).





С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2055
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 23.02.16 14:28. Заголовок: Genry пишет: У изм..


Genry пишет:

 цитата:
У измененной версии заметил одну особенность:
сигналы покупок отрабатывают чаще чем сигналы продаж.


При проверке текущего сигнала из кода была убрана проверка типа текущего ордера. Так делать нельзя, потому как эксперт не рассчитан на количество ордеров больше 1. В итоге при поиске своих ордеров в функции FindOrders он регистрирует только один из множества существующих ордеров, теряя все остальные. Поэтому и получается такая каша, как показана на рисунке: новый Buy открывается тогда, когда не закрыты все предыдущие Sell.

Ну а по факту проблемы (не обрабатываются сигналы от Quantum), то все просто: текущий период М5, а сигналы берутся с ТФ М1 (параметр tf равен 1).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2243
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 24.02.16 11:03. Заголовок: Scriptong пишет: В ..


Scriptong пишет:

 цитата:
В итоге при поиске своих ордеров в функции FindOrders он регистрирует только один из множества существующих ордеров, теряя все остальные.


Я планировал замену на FindOrders из другой Вашей статьи.

Получился вот такой код: https://dropmefiles.com/tJ6HZ , но опять баи открываются по всем сигналам, а
селлы - только по первому. Тестировал: параметры по-умолчанию, EurUsd, M5 c 01.01.2016

Понаставил в текст отладочных сообщений, а причина все-равно ускользает



Scriptong пишет:

 цитата:
Ну а по факту проблемы (не обрабатываются сигналы от Quantum), то все просто: текущий период М5, а сигналы
берутся с ТФ М1 (параметр tf равен 1).


ЗЫ. Это было бы самое быстрое решение, но не единственная причина .

Чуть позже поиски внесли немного ясности: если значение StopLoss = 0, то селы открываются по всем сигналам, при значении
StopLoss >0 - выставляется только один ордер. На бай это не влияет.



Может проблема возникает при расчете StopLoss последующих ордеров в функции GetLevel ? Если StopLoss =0 она просто возвращает 0, а
если > 0 то что-то не так - пока не разобрался. Я использую расчет только в ATR, смотрю на эту часть GetLevel - все вроде правильно,
.... пока тупик

ЗЫ: проверил StopLoss в пунктах > 0 - такая же проблема как и c ATR - при торговле в селл открывает только один ордер, бай
открывается по сигналам.
И еще есть особенность, возможно одна причина: при работе этого темплейта иногда теряется SL. Т.е. первичный SL устанавливается, потом
подтягивается за ценой, но в какой-то момент оказывается равным 0. Причину так-же установить не смог.

//+-------------------------------------------------------------------------------------+ 
double GetLevel(bool in_points, double value, int atr_period, double price, int koef)
{
if (value == 0) // Если исходная величина равна нулю,
return(0); // ..то ноль и вернем

if (in_points) // Исходная величина задана в пунктах
return(NP(price + koef*value*Point)); // Вернем уровень, который отстоит от
// ..цены на value пунктов в..
// ..направлении koef
return(NP(price + koef*value* // Исходная величина задана в..
iATR(NULL, 0, atr_period, 1))); // ..волатильностях. Поэтому вернем..
// ..уровень, который отстоит от цены
// ..price на value волатильностей в
// ..направлении koef


С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2058
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 25.02.16 22:04. Заголовок: Genry пишет: Получи..


Genry пишет:

 цитата:
Получился вот такой код: https://dropmefiles.com/tJ6HZ , но опять баи открываются по всем сигналам, а
селлы - только по первому.


Одна из причин кроется в коде функции FindOrders. Так, для подсчета количества ордеров заведена отдельная переменная (cnt), которая даже считает ордера. Но вот проблема - ордера записываются в ячейки с номерами, которые не имеют никакого отношения к числу ордеров эксперта. Они привязаны к индексу расположения ордера в списке рабочих ордеров (используется счетчик i). Для тестера в режиме работы без отложенных ордеров это еще будет работать. Во всех остальных случаях - нет.

Хотя основная причина в том, что используется функция ModifyDeal, которой не было в оригинальной версии Template_Expert. Видимо, функция взята из какого-то другого эксперта. Эта функция использует глобальную переменную SL. В эксперте эта переменная не инициализирована, т. е. в ней мусор, который, чаще всего (зависит от конкретного компьютера), равен 0. В итоге функция ModifyDeal для ордеров Sell не может выполниться корректно, не давая открываться второму ордеру Sell.

Также в эксперте, хоть и используется ограничение количества сделок (MaxPosAmount), нигде нет проверки на достижение этого числа. В итоге, если эксперт его достигнет, то произойдет выход за пределы массива. А это фатальная ошибка. Правда, в текущем виде кода терминал ее пропустит, т. к. используется старый MQL4. И вот тогда то мы с Вами будем долго и нудно искать ошибку.

В новом MQL4 (нужно использовать директиву #property strict) этот код даже не скомпилируется, не говоря уже о выполнении.
Кстати, попробуйте запустить индикатор Quantum в этом режиме. Он тоже не будет работать.



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 410
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 24.02.16 14:32. Заголовок: 1


1

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2245
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 25.02.16 10:57. Заголовок: Balbesik пишет: 1 ..


Balbesik пишет:

 цитата:
1

И тебя с прошедшим !

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2249
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 26.02.16 12:39. Заголовок: Спасибо, Игорь! Scr..


Спасибо, Игорь!

Scriptong пишет:

 цитата:
Также в эксперте, хоть и используется ограничение количества сделок (MaxPosAmount), нигде нет проверки на достижение этого числа. В итоге, если эксперт его достигнет, то произойдет выход за пределы массива. А это фатальная ошибка. Правда, в текущем виде кода терминал ее пропустит, т. к. используется старый MQL4. И вот тогда то мы с Вами будем долго и нудно искать ошибку.


Проверка есть, она в модуле Trade:

if (cnt < MaxPosAmount) { // Если можно добавить новую позицию,
if (OpenOrderCorrect(OP_BUY, GetLots(), NP(Ask), sl, tp) != 0) {

Сейчас буду лопатить остальное До присвоения SL значения я еще не дошел - чуть позже планировал присвоить ему значение
уровня ATR, а вот инициализировать его забыл

ЗЫ. Спасибо, Игорь, с этим SL (и i вместо cnt в FindOrders ) я еще долго-бы ковырялся. Теперь работает исправно



С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2254
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 27.02.16 01:05. Заголовок: Scriptong пишет: В ..


Scriptong пишет:

 цитата:
В новом MQL4 (нужно использовать директиву #property strict) этот код даже не скомпилируется, не говоря уже о выполнении. Кстати, попробуйте запустить индикатор Quantum в этом режиме. Он тоже не будет работать.


Спасибо, Игорь! Ну и дела Мне и в голову не приходило что и в нем есть ошибка. Я так понимаю проблема в
определении размерности индекса массива бар, надо изменить строку:

int intLimit = Bars - counted_bars ;

на
int intLimit = Bars - counted_bars - 1;

С уважением! Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 411
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 28.02.16 18:24. Заголовок: Genry пишет: int in..


Genry пишет:

 цитата:
int intLimit = Bars - counted_bars ;

на
int intLimit = Bars - counted_bars - 1;



Ага.

Интересно.

А может - 2.

Это как раз та часть, где "веселуха" начинается
(я как-то на это внимание обращал).
У Игоря "сквозняк" согласованности по всем функциям
достаточно трудно проследить.
Особенно, когда со временем работаешь это видно.

Ну а с #property strict к этому привыкли -
не так сложно привести в порядок.

P.S.
Спасибо за поздравление и тебя с прошедшим.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2064
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 28.02.16 21:08. Заголовок: Balbesik пишет: У И..


Balbesik пишет:

 цитата:
У Игоря "сквозняк" согласованности по всем функциям
достаточно трудно проследить.


Если под "сквозняком" имеется в виду использование значений глобальных переменных программы, то да - этот подход является плохим. От него я ушел с началом эры нового MQL4. Теперь во всех случаях, когда можно обойтись локальными переменными, я это делаю. Если требуется значение переменной, объявленной в другой функции, то оно явно передается в вызываемую функцию по значению или же по ссылке.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2063
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 28.02.16 21:04. Заголовок: Genry пишет: Я так ..


Genry пишет:

 цитата:
Я так понимаю проблема в
определении размерности индекса массива бар, надо изменить строку:


Этот подход при построении индикаторов является немного запутанным. По крайней мере, в моем понимании. Поэтому я один раз разработал специальную функцию и больше не вспоминаю о том, с какого бара нужно начинать расчет:

 цитата:
int GetRecalcIndex(int& total, const int ratesTotal, const int prevCalculated)
{
total = ratesTotal - 1;

if (i_indBarsCount > 0 && i_indBarsCount < total)
total = MathMin(i_indBarsCount, total);

if (prevCalculated < ratesTotal - 1)
{
InitializeBuffers();
return (total);
}

return (MathMin(ratesTotal - prevCalculated, total));
}


Далее во всех функциях оперирую значениями текущего обрабатываемого бара (он имеет индекс от 0 до GetRecalcIndex) и доступным количеством баров (total). Единственное изменение, которое вношу в тело функции GetRecalcIndex - это отступ от левого края истории. Например, если нужно рассчитывать данные индикатора с каким-либо периодом, то в строку:

 цитата:
total = ratesTotal - 1;


добавляется период расчета:

 цитата:
total = ratesTotal - i_period - 1;



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2255
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 28.02.16 21:10. Заголовок: Scriptong пишет: По..


Scriptong пишет:

 цитата:
Поэтому я один раз разработал специальную функцию и больше не вспоминаю о том, с какого бара нужно начинать расчет:




С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 447
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 28.02.16 22:08. Заголовок: Scriptong пишет: По..


Scriptong пишет:

 цитата:
Поэтому я один раз разработал специальную функцию и больше не вспоминаю о том, с какого бара нужно начинать расчет:


Подход классный. Я его взял на вооружение, как только увидел. Спасибо Игорь!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2068
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 29.02.16 19:57. Заголовок: Sergey пишет: Подхо..


Sergey пишет:

 цитата:
Подход классный. Я его взял на вооружение, как только увидел. Спасибо Игорь!


Да, эту функцию с небольшими изменениями можно увидеть в любом моем индикаторе, который написан на новом MQL4.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 412
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 29.02.16 04:29. Заголовок: Scriptong пишет: ....


Scriptong пишет:

 цитата:
.... и больше не вспоминаю о том, с какого бара нужно начинать расчет:



???????????????????????????????????????????????????

Это в ЗигЗаге



давно это было и это не описка, именно так (помню разбирался).

И далее шло

if (i==limit-2)
{

и т.д.



Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2067
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 29.02.16 19:54. Заголовок: Balbesik пишет: Это..


Balbesik пишет:

 цитата:
Это в ЗигЗаге


Я выше написал, что для каждого конкретно индикатора к единице добавляется такое количество баров, которое требуется для корректного расчета первичных данных. Если это константа, то она записывается напрямую (в приведенном примере это 1, а 1 + 1 выходит 2). Когда же на этапе написания кода неизвестен период расчета индикатора, то добавляется соответствующая переменная.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2469
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 21.12.16 11:59. Заголовок: Игорь, день добрый! ..


Игорь, день добрый!
Возник вопрос по МТФ индикатору.

Попался вот такой индикатор http://dropmefiles.com/Otlzb - рисует mtf-конверты на графике цены.
Поставил его посмотреть и увидел что он работает с ошибками: на истории нормально рисует линии старших ТФ, а потом на новых барах
начинает их искажать.
Сам подход создания конверта показался интересным, но не первый раз встречаю индикаторы которые так работают, в связи с чем, не обессудьте , есть три вопроса:

1. какие ошибки в данном индикаторе дают искажение линий старшего ТФ?
2. существует ли типовое (проверенное временем ) решение отображения старших ТФ на текущем ?
3. как перенести такого рода расчет из индикатора в советник? Чтобы получить правильные сигналы при
пересечении ценой текущего ТФ линий конверта старшего ТФ.

Отрисовка конверта в советнике дело уже второе - это вполне возможно графическими объектами.

На скрине отображает данные с Д1 на м5.



С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2473
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 25.12.16 10:50. Заголовок: Genry пишет: На скр..


Genry пишет:

 цитата:
На скрине отображает данные с Д1 на м5.



Почему-то с пятницы картинки не высвечиваются, хотя ссылки присутствуют.

Genry пишет:

 цитата:
1. какие ошибки в данном индикаторе дают искажение линий старшего ТФ?



Вроде нашел некоторое решение первого вопроса:
for(i=0,y=0;i<limit;i++) 
{
if (Time[ i]<TimeArray[y]) y++;
if (iTime(NULL, TimeFrame, y) != g_Check_DG_tf) { // datetime g_Check_DG_tf = 0;
up[ i] = iMAOnArray(res,0,3,0,MODE_EMA,y); Up = up[ i]; // double Up=0.0, Md=0.0, Dn=0.0;
md[ i] = iMA(NULL,TimeFrame,MAPeriod,ma_shift,ma_method,applied_price,y); Md = md[ i];
dn[ i] = iMAOnArray(sup,0,3,0,MODE_EMA,y); Dn = dn[ i];
g_Check_DG_tf = iTime(NULL, TimeFrame, y);

} else {
up[ i]= Up;
md[ i]= Md;
dn[ i]= Dn;
}

Но искажения снова проскакивают - индикатор не держит уровень рассчитанный на начало периода старшего ТФ и начинает
вставлять перерасчет по барам текущего ТФ, а значит это опять не решение


Поэтому по-прежнему остаются все три вопроса

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2404
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 26.12.16 13:51. Заголовок: Genry пишет: 1. как..


Genry пишет:

 цитата:
1. какие ошибки в данном индикаторе дают искажение линий старшего ТФ?


Ошибок столько, что все и не перескажешь
Основные заключаются в принципиально неверном подходе к построению мультипериодного индикатора.
    1. Не учтено, что обновление котировок считается по текущему таймфрейму, а расчет и отображение данных происходит для старшего ТФ.
    2. Использование инкрементного подхода к отрисовке индикатора (в основном цикле нужно использовать декремент). Это, чаще всего, приводит к появлению перерисовки данных индикатора, что и видим в итоге.
    3. При отображении данных на младшем таймфрейме обновление данных старшего таймфрейма должно приводить к изменению данных на нескольких барах младшего ТФ, а не на одном, последнем.


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

Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 2405
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 26.12.16 13:54. Заголовок: Genry пишет: 2. сущ..


Genry пишет:

 цитата:
2. существует ли типовое (проверенное временем ) решение отображения старших ТФ на текущем ?


К сожалению, нет. Универсального рецепта не существует. Для каждой задачи требуется свое решение. Довольно много всего приходится учитывать при разработке мультипериодных версий. С удивлением замечаю, что многим программистам такая задача оказывается не по плечу.

Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 2406
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 26.12.16 14:08. Заголовок: Genry пишет: как пе..


Genry пишет:

 цитата:
как перенести такого рода расчет из индикатора в советник? Чтобы получить правильные сигналы при
пересечении ценой текущего ТФ линий конверта старшего ТФ.


В советнике такой алгоритм будет реализовать намного проще, т. к. там не требуется отображение данных со старшего ТФ на младшем. То есть задача будет сведена к следующему:
1. Расчет данных за последние 3 бара заданного ТФ:

 цитата:
for (int i = 0; i < 3; i++)
{
sup[ i ] = (((iHigh(NULL,TimeFrame,i)+iLow(NULL,TimeFrame,i)+iClose(NULL,TimeFrame,i))*2)/3)-iHigh(NULL,TimeFrame,i);
res[ i ] = (((iHigh(NULL,TimeFrame,i)+iLow(NULL,TimeFrame,i)+iClose(NULL,TimeFrame,i))*2)/3)-iLow(NULL,TimeFrame,i);

}



2. Расчет трех текущих линий:

 цитата:
up = iMAOnArray(res,0,3,0,MODE_EMA,0);
md = iMA(NULL,TimeFrame,MAPeriod,ma_shift,ma_method,applied_price,0);
dn = iMAOnArray(sup,0,3,0,MODE_EMA,0);



Это если нужен расчет для текущего бара, что приведет к изменению показаний при обновлении экстремумов бара старшего ТФ. Для сформированного бара добавим 1, где нужно:

 цитата:
for (int i = 0; i < 3; i++)
{
sup[ i ] = (((iHigh(NULL,TimeFrame,i + 1)+iLow(NULL,TimeFrame,i + 1)+iClose(NULL,TimeFrame,i + 1))*2)/3)-iHigh(NULL,TimeFrame,i + 1);
res[ i ] = (((iHigh(NULL,TimeFrame,i + 1)+iLow(NULL,TimeFrame,i + 1)+iClose(NULL,TimeFrame,i + 1))*2)/3)-iLow(NULL,TimeFrame,i + 1);

}
up = iMAOnArray(res,0,3,0,MODE_EMA,0);
md = iMA(NULL,TimeFrame,MAPeriod,ma_shift,ma_method,applied_price,1);
dn = iMAOnArray(sup,0,3,0,MODE_EMA,0);




Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2475
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 27.12.16 06:47. Заголовок: Scriptong пишет: Ос..


Scriptong пишет:

 цитата:
Основные заключаются в принципиально неверном подходе к построению мультипериодного индикатора...
Довольно много всего приходится учитывать при разработке мультипериодных версий...
В советнике такой алгоритм будет реализовать намного проще, т. к. там не требуется отображение данных со старшего ТФ на младшем...


Спасибо, Игорь!
Буду разбираться. Мне понравилась сама идея такого конверта, хотелось бы увидеть его в правильной реализации.

 цитата:
3. При отображении данных на младшем таймфрейме обновление данных старшего таймфрейма должно приводить к изменению данных на нескольких барах младшего ТФ, а не на одном, последнем.


Я так думаю, что для младшего ТФ должен отображаться конверт первого бара старшего ТФ.
Т.е. мы например ставим индикатор на м5, а настроен он на Д1. У нас в течении дня должен отображаться конверт
который посчитан по результатам вчерашнего дня на Д1.
И с границами конверта для Д1 вчерашнего дня мы сравниваем сегодняшнее положение цены.

Такого результата я пока не получил. Вот последний мой вариант, настроен на Д1, но он перерисовывает последний день
http://dropmefiles.com/jYQaU

Но, возможно, имеет смысл давать два конверта: предыдущий и последний бар старшего ТФ.
Чтобы понять как лучше - надо это сначала правильно нарисовать

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2407
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 27.12.16 19:32. Заголовок: Genry пишет: Я так ..


Genry пишет:

 цитата:
Я так думаю, что для младшего ТФ должен отображаться конверт первого бара старшего ТФ.
Т.е. мы например ставим индикатор на м5, а настроен он на Д1. У нас в течении дня должен отображаться конверт
который посчитан по результатам вчерашнего дня на Д1.
И с границами конверта для Д1 вчерашнего дня мы сравниваем сегодняшнее положение цены.


Соображение правильное. Но в коде нет даже близко такой идеи. Оттого и все проблемы, т. к. конверт текущего дня должен изменяться до тех пор, пока день не будет завершен.

Genry пишет:

 цитата:
Такого результата я пока не получил. Вот последний мой вариант, настроен на Д1, но он перерисовывает последний день
http://dropmefiles.com/jYQaU


Попробую чуть ближе к НГ все это обдумать, там, по идее не так уж много работы, на пару часов. Но сейчас этой пары катастрофически не хватает

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2477
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 27.12.16 19:45. Заголовок: Scriptong пишет: По..


Scriptong пишет:

 цитата:
Попробую чуть ближе к НГ все это обдумать, там, по идее не так уж много работы, на пару часов. Но сейчас этой пары
катастрофически не хватает


Спасибо, Игорь!
Главное решить задачу с полезным результатом, а сроки в таком деле - дело второе.
Я думаю на текущем ТФ надо отображать (иметь такую возможность) показания первого и нулевого бара старшего ТФ.
Это покажет тенденцию и можно будет сравнивать аж 3 пары показателей

Вчерашний день старшего ТФ я получил, но будет лучше оба бара старшего ТФ видеть на текущем дне - анализ
будет полнее, т.к. видно развитие тенденции. При анализе текущего положения цены можно брать то
значение что дает более широкий диапазон. Правда для этой цели можно использовать еще один ТФ, например:
1. торгуем м5
2. границы - вчерашний Д1
3. тенденции Н4.



+H4



С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2411
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 31.12.16 20:44. Заголовок: Scriptong пишет: По..


Scriptong пишет:

 цитата:
Попробую чуть ближе к НГ все это обдумать, там, по идее не так уж много работы, на пару часов. Но сейчас этой пары катастрофически не хватает


Время нашлось совсем уж близко к НГ

Правильная, но не оптимально сделанная, версия здесь. Неоптимальность сразу видна при работе в тестере - достаточно медленно работает.
Если надо будет, то можно существенно оптимизировать расчеты. Просто не стал пока заморачиваться с ними.

Если наложить оригинал и мою версию индикатора, то будут видны различия в показаниях на барах, начиная с баров прошлой недели. Это неправильное обращение к данным оригинального индикатора. В оригинале вообще нет привязки баров текущего ТФ к барам старшего ТФ.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2479
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 01.01.17 04:49. Заголовок: Scriptong пишет: Вр..


Scriptong пишет:

 цитата:
Время нашлось совсем уж близко к НГ



Отлично! Получился подарок под елку! Спасибо, Игорь! С Новым Годом!

Здоровья, успехов и солидного профита в торговле!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2482
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 02.01.17 17:17. Заголовок: Выяснил что первонач..


Выяснил что первоначальная идея расчета принадлежит Лари Уильямсу:
indicator of Larry Williams trading method. Here is formula for D1 Time frame indicator:

PROJECTED HIGH PROJECTED LOW FORMULA: [(High+Low+Close)/3]x2=A
A-High=Project Low
A-Low=Project High

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2415
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 03.01.17 13:09. Заголовок: Genry пишет: PROJEC..


Genry пишет:

 цитата:
PROJECTED HIGH PROJECTED LOW FORMULA: [(High+Low+Close)/3]x2=A


В обсуждаемом коде числа поменяны местами: сначала умножение на 2, а потом деление на 3. Хотя на результат такая замена никоим образом не влияет. Но за то сбивает с толку. Я никак не мог понять, в чем суть сложения параметров свечи с последующим умножением их на 2. А с приведенной формулировкой все становится на свои места.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2483
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 04.01.17 18:25. Заголовок: Scriptong пишет: Не..


Scriptong пишет:

 цитата:
Неоптимальность сразу видна при работе в тестере - достаточно медленно работает.



Игорь, в тестере еще кое-что выскочило. На скрине ТФ м5 и два индикатора. Первый Д1 - сплошные
линии, а второй Н4 - пунктир зеленый и красный. На истории Н4 отрисовал правильно, а потом начал
строить вот такой канал. Д1 вел себя прилично.



С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2419
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 05.01.17 20:40. Заголовок: Genry пишет: Игорь,..


Genry пишет:

 цитата:
Игорь, в тестере еще кое-что выскочило. На скрине ТФ м5 и два индикатора. Первый Д1 - сплошные
линии, а второй Н4 - пунктир зеленый и красный. На истории Н4 отрисовал правильно, а потом начал
строить вот такой канал. Д1 вел себя прилично.


Для использования мультипериодных индикаторов в тестере необходимо выбирать тип программы "Индикатор". Добавлять мультипериодные индикаторы к окну визуализатора нельзя, т. к. прикрепленный индикатор оказывается вне тестируемого окружения.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2484
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 04.01.17 18:26. Заголовок: В предыдущем примере..


И в личку пришло сообщение:

 цитата:
индикатор от Скриптонга очень интересный, но к сожалению граница канала уходит от цены( (нижний скрин)



В предыдущем примере тестировался Д1, а Н4 добавлялся на график. Если их поменять местами, то картина будет такая:





С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2485
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 05.01.17 12:03. Заголовок: Genry пишет: И в ли..


Genry пишет:

 цитата:
И в личку пришло сообщение:
индикатор от Скриптонга очень интересный, но к сожалению граница канала уходит от цены( (верхний скрин)



PivotEnvelope на USDCAD_m5_до_перезагрузки


... после перезагрузки





С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2420
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 05.01.17 20:45. Заголовок: Genry пишет: PivotE..


Genry пишет:

 цитата:
PivotEnvelope на USDCAD_m5_до_перезагрузки


Не загружена дневная история, подкачка начата, но не завершена. Далее индикатор не может определить, что данные по дневному ТФ подгружены и можно по ним обновиться. В MQL4 нет для этого инструментария.

Genry пишет:

 цитата:
... после перезагрузки


Индикатор переинициализирован и обработал подкачанные данные по дневному ТФ.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2486
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 05.01.17 23:58. Заголовок: Scriptong пишет: Не..


Scriptong пишет:

 цитата:
Не загружена дневная история, подкачка начата, но не завершена. Далее индикатор не может определить, что данные по
дневному ТФ подгружены и можно по ним обновиться. В MQL4 нет для этого инструментария.



Спасибо, Игорь!
Сейчас набираю статистику по работе индикатора. Сегодня при смене дня посмотрю как он отработает.

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2498
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 15.02.17 18:18. Заголовок: Genry пишет: Спасиб..


Genry пишет:

 цитата:
Спасибо, Игорь! Сейчас набираю статистику по работе индикатора. Сегодня при смене дня посмотрю как он отработает.



Вверху - исходный сет моего коллеги для советника на Квантуме без PivotEnvelopes. Ниже - тот-же сет, но в советнике есть РЕ.
Совсем внизу тот0же сет, но ТФ не м5, а М1.



С уважением! Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 37 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 17
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет