Aleh7999

 
Уровень 15

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2090



РЕКОМЕНДУЮ



Помощь в написании советника (похожесть Key Extreme) для MT4 ищу поручителя

Что похожее уже создавал AM2 "советник по индикатору ТМА" zakaz.opentraders.ru/42709.html, но возникла идея возможно не новая:
использовать 2 индикатора:
1. TMA_Centered_H1_V2_VS (открытого кода не нашёл)
2. TMA+CG mladen NRP TEAMTRADER2 buy sell (открытый код есть)

Сигналом открытия (выставления рыночного ордера) будет появление ромба (красный либо синий) при пересечении границы коридора (границы коридора выделены желтым цветом).
Сигналом закрытия сделки и началом второй сделки противоположного направления, опять же появление ромба (красный либо синий) при пересечении противоположной границы коридора.
В случае если при выставления рыночного ордера рынок идет против тренда будут появляться новые сигналы (ромбы) выше либо ниже зоны канала, в этом случае при новом сигнале увеличиваем лотность по мартину (но только если сигнал выше либо ниже зоны канала!!!) на рис. это BUY1, BUY2, BUY3, BUY4.

Прилагаю скрин возможной работы совы и 2 индикатора.

TMA_Centered_H1_V2_VS.ex4 (20 Kb)
TMA+CG mladen NRP TEAMTRADER2 buy sell.mq4 (19 Kb)
  • 0
  • Просмотров: 21719
  • 11 января 2020, 14:13
  • Aleh7999
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
[Indicator] Find PriceAction Pattern
Следующая запись в группе  
Небольшая доработка советника
10 января 2020
11 января 2020

Комментарии (53)

+
0
судя по входам на скрине у вас одни убытки :) 
avatar

  34  AM2 Сообщений: 15898 - Андрей

  • 14 января 2020, 21:14
+
0
Упс… *cry* 
Я облажался расставляя Sell и Buy. Немного позже выложу реальный тест по данной стратегии выставляя рыночные ордера руками.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 15 января 2020, 08:30
+
0
буду поручителем
avatar

  21  tal2000 Сообщений: 59

  • 16 января 2020, 17:36
+
0
когда обновится тз, назначу дату
avatar

  34  AM2 Сообщений: 15898 - Андрей

  • 16 января 2020, 17:41
+
0
Доработка ТЗ для МТ4 от поручителя

Индикаторы TMA_Centered_H1_V2_VS и TMA+CG mladen NRP TEAMTRADER2 buy sell

Входные параметры
Профит = 1000 пипс (если 0 то без него)
Профит1 = 300 пипс (если цена закроется на дистанции для закрытия)
Ширина ТМА = 150 пипс (TMA_Centered )
Стоплосс = 500 пипс (если 0 то без него)
Дистанция для открытия = 100 пипсов по пятизнаку
Дистанция для закрытия = 10 пипсов по пятизнаку

Вход
1) Свеча закрылась за границей канала
2 а) есть сигнал (ромб от TMA+CG или стрелка от TMA_Centered)
б) цена ушла внутрь канала TMA_Centered не больше дистанции для открытия
3) При закрытии обратных ордеров (если были покупки и были закрыты по условиям, открыть 1 продажу и наоборот)

Выход
1 а) Свеча закрылась на расстоянии не более Дистанции для закрытияу противоположной границы и у ордера есть Профит1.
б) Исключение если ширина канала TMA_Centered не более Ширина ТМА и есть обратный сигнал
2) Есть обратный сигнал


avatar

  11  merlin77 Сообщений: 23 - Михаил

  • 19 января 2020, 14:24
+
0
на 31-е
avatar

  34  AM2 Сообщений: 15898 - Андрей

  • 19 января 2020, 18:51
+
0
Андрей не торопись. Заканчиваю тест. Есть недочеты. Готовлю финальный вариант ТЗ.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 19 января 2020, 19:16
+
0
Подведу итог для ТЗ. В качестве тестера использовал TSTester 2.45 для ручной торговли если кто не знаком.
Период брал со 02.12.2019 по 02.01.2020 пара GBPUSD.



Во время тестирования был выявлен ряд недочетов, а именно если брать историю за этот период и проводить
ручную торговлю по предполагаемому алгоритму, который я описывал в начале поста, то мы получим две разные
картинки т.е. два разных варианта начала и окончания сделок.
(рис.1 сделки обозначены по уже готовой истории)

Стрелками обозначил варианты входа
(рис.2 сделки выполненные вручную)

Т.к. индикатор TMA_Centered_H1_V2_VS перерисовывается, канал изменяется и при ручном выставлении ордеров первоначально выставленные
сделки за границей канала по окончанию торговли оказываются внутри канала. На истории мы бы в данные сделки не
входили.
Следующим недочетом является индикатор TMA+CG который также перерисовывается,
появляются иногда множество ложных сигналов (ромбов) которые потом пропадают, советник будет отрывать увеличенные лоты
если будем работать по мартину.
В ручном тесте в начале я не использовал при открытии следующих сделок расстояние которое хотел бы применить
как ограничение при увеличении лотности. Если бы оно применялось можно было уменьшить в 2-3 раза количество лотов и просадку.


Вход:

Сигналом открытия (выставления рыночного ордера) будет:
а) Свеча закрылась за границей канала TMA_Centered_H1_V2_VS — это самое важное условие!!!
б) есть сигнал (ромб от TMA+CG (красный либо синий) причем сигнал может появиться при формировании новой свечи
уже внутри канала. В этом случае условия открытия так же верно.
в) В случае если при выставления рыночного ордера рынок идет не в нашу сторону
будут появляться новые сигналы (ромбы) выше либо ниже зоны канала и выше или ниже нашей цены,
в этом случае при новом сигнале увеличиваем лотность по мартину (но только если сигнал выше либо ниже зоны канала!!!)
и не меньше чем на заданном в настройках расстоянии от предыдущей цены в пунктах!!!.
К последнему (в) пункту объясню причину ограничения на открытие новых увеличенных ордеров:
т.к. индикатор TMA+CG перерисовывается, появляются иногда множество ложных сигналов (ромбов) которые потом пропадают
(советник будет отрывать увеличенные лоты). Если не ограничить открытие другим важным параметром можем получить
большой набор лотности.
Я выбрал параметр в виде расстояния между открытием ордеров в пунктах.
Данный параметр хотел бы отдельно вынести в окно настройки.

Выход:

Сигналом закрытия сделки и началом второй сделки противоположного направления,
появление ромба (красный либо синий) при пересечении противоположной границы коридора.:
а)Свеча закрылась за границей канала TMA_Centered_H1_V2_VS
б) есть сигнал (ромб от TMA+CG (красный либо синий)
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 19 января 2020, 20:54
+
0
и не меньше чем на заданном в настройках расстоянии от предыдущей цены в пунктах!!!. Про это забудте(подобные советники Андрей не пишет) иначе не перепишет.Только зря прождёте.

Либо заказывайте сеточник: от первого сигнала строится сетка в заданном направлении, с заданным шагом и увеличением лота, пожеланию, если надо(такое он вам точно напишет).

Но не как ни по сигналам на заданном растоянии.Сколько народу здесь уже подобное заказывало ни кому не написал.Хотя может для вас сделает исключение.
Редактирован: 20 января 2020, 10:35
avatar

  19  alex30774 Сообщений: 716

  • 20 января 2020, 10:10
+
0
С таким алгоритмом советники в сети есть.
Советую не лепить советник на 2х рисовальщиках.
Подберите другие индикаторы и все будет работать без мартина.
Зачем вам нужна очередная мартышка?
(хотя это просто личное мнение)
avatar

  10  waterfall Сообщений: 80

  • 20 января 2020, 11:57
+
0
Не буду спорить с выше изложенными комментариями.
Возможно изобретаю очередной велосипед.
Вообще меня заинтересовала разрекламированная система Key Extreme 4. Состою в складчине, но пока не назначена дата сбора. В ветке форума было указано, что там используются индикаторы на которые я просил написать сову. Что меня подкупило, что в Key Extreme 4 Абсолютно все индикаторы системы НЕ перерисовываются и дают ранние сигналы на вход и выход из сделки.
Но моё личное мнение, что система рабочая и я бы хотел иметь такую сову в работе, но только если она будет ограничена вышеизложенными требованиями. Иначе да мы получим очередную мартышку.
Как я писал в самом первом посте подобное Андрей уже писал, но данный вариант совы должен был улучшить предыдущую Андрееву работу.
Пускай Андрей уже решает, имеет ли место быть данной сове.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 20 января 2020, 13:44
+
0
Мое личное мнение…
Не покупайте то что нельзя протестировать на истории.
(в крайнем случае на демо)
avatar

  10  waterfall Сообщений: 80

  • 20 января 2020, 14:49
+
0
Там сумма с человека 525 рос. руб. Думаю за неё можно посмотреть и либо разочароваться либо найти полезное.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 20 января 2020, 14:56
+
0
Каждый решает сам от ситуации… я просто к тому что денег не хватит тестировать на реале.
avatar

  10  waterfall Сообщений: 80

  • 20 января 2020, 15:00
+
+1
avatar

  34  AM2 Сообщений: 15898 - Андрей

  • 20 января 2020, 21:44
+
0
Андрей как всегда спасибо! *good* 
Поставил на тест все той же пара GBPUSD. Период брал со 02.12.2019 по 02.01.2020.
Сразу вопрос: В настройках сигналом на закрытие будет величина в профите, а не по факту пересечения противоположной границы канала TMA_Centered_H1_V2_VS?
Вопрос задал т.к. в настройках 2 величины CloseSig и TakeProfit
И обратив внимание, что при закрытии сделки не открывается одновременно противоположная.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 20 января 2020, 22:22
+
0
В середине графика видно что есть сделка в покупку после продаж.
Я прошелся в тестере по фунтДолару, нужно параметры подбирать, потому как если на евро есть конкретика то по фунту почти нет адекватонй ситуации. Смотрел с ноября по текущее.
Условия входа только при выходе цены за границы. Все по ТЗ.
Спасибо Андрей
Редактирован: 20 января 2020, 23:22
avatar

  11  merlin77 Сообщений: 23 - Михаил

  • 20 января 2020, 23:20
+
0
EurUsd

отчет с ноября yadi.sk/i/jsYvVeDLTJZLTg
GpbUsd

отчет с ноября yadi.sk/i/CdriEaA1Mj3TEg
avatar

  11  merlin77 Сообщений: 23 - Михаил

  • 21 января 2020, 01:39
+
0
Стоит внимания?)
avatar

  9  maksGruv Сообщений: 340

  • 21 января 2020, 12:31
+
0
В принципе работает, но есть просадки. И я бы не рекомендовал его на GpbUsd
Редактирован: 23 января 2020, 02:02
avatar

  11  merlin77 Сообщений: 23 - Михаил

  • 23 января 2020, 02:02
+
0
Eur/usd и Xau/usd?
avatar

  9  maksGruv Сообщений: 340

  • 23 января 2020, 11:26
+
0
График смотреть бесполезно т.к. уже все перерисовано начиная от канала и кончая ромбами.
Конкретная ситуация открытия ордеров индикаторами существует только в момент торгов.
avatar

  10  waterfall Сообщений: 80

  • 21 января 2020, 15:18
+
0
avatar

  34  AM2 Сообщений: 15898 - Андрей

  • 21 января 2020, 18:19
+
0
Действительно гридер, а не усреднитель, а раньше токого Андрей не писал.Или у меня не правильное понятие о гридерах.
avatar

  19  alex30774 Сообщений: 716

  • 21 января 2020, 19:19
+
+1
Поставил на тест вторую версию все на той же пара GBPUSD. Период брал со 02.12.2019 по 02.01.2020.
Почему все ещё беру этот период и пару, т.к. есть наглядное пособие (рис.2) для себя как сова должна себя вести. Единственно ограничил открытие следующих сделок расстоянием не менее 300 пунктов.
Все кажется хорошо тест пока не завершён, но появился момент где сова должна была открыть сделку, т.к. были удовлетворены все условия, но открытия не было. Все заинтересованные может кто сможет разобрать причину прошу подключиться. Сам я не смог понять.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 21 января 2020, 20:44
+
0
спред на данном участке мог быть другим. учет bid и ask не позволял открыть ордер или закрыть по условию ТС/ТЗ.
Если это тестер то не видно из-за чего не произошло закрытие или открытие. В режиме реального времени поставь на тф М1 и логи вкладки эксперт скинь сюда, что бы видеть что и почему)
Редактирован: 22 января 2020, 11:54
avatar

  9  maksGruv Сообщений: 340

  • 22 января 2020, 11:53
+
0
Всем привет. Оставлю момент где сова не открывает сделку на уже тестах в реальном времени.
Возник следующий недочет и это моя вина при написании ТЗ. Объясню: в тестах проскакивают моменты когда закрываются сделки при удовлетворении всех условий, но при этом общий профит отрицательный. Скрин прилагаю. И причина — не было указано последнее условие для закрытия сделки: профит должен быть > 0. Конкретную цифру профита для данной совы я думаю нет смысла ставить, т.к. получение может занять достаточно длинный период (я пока рассматриваю период Н1).
Прошу Андрея поправить или добавить данное условие в код. Все заинтересованные поддержите!!!
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 23 января 2020, 23:04
+
0
Если не ошибаюсь сравни
64 строку
if(TakeProfit>=0)

73 строка идентична
202 строка и 213 строка идентична.
Андрей вроде правильно?
avatar

  9  maksGruv Сообщений: 340

  • 24 января 2020, 11:12
+
0
Нужно было дождаться индикаторы без перерисовки, и по ним уже заказывать.
avatar

  18  EdvardNN Сообщений: 42

  • 24 января 2020, 12:43
+
0
А такие вообще существуют?))*drinks* 
avatar

  9  maksGruv Сообщений: 340

  • 24 января 2020, 14:06
+
0
Существуют.Индикаторы по цене открытия, но они запаздывают.Индикаторы бывают двух типов: либо рисующие, либо запаздывающие.
Потому что не цена идёт за показаниями индикатора, а индикатор показывает опираясь на изменения цены.
avatar

  19  alex30774 Сообщений: 716

  • 24 января 2020, 14:19
+
0
Я ребята не силен в коде, поэтому могу только показать результат теста. В данном случае профит отрицательный. Прогоните тесты, я думаю у вас тоже покажет на определенных участках при закрытии -.
По поводу индикаторов без перерисовки, уже говорил в складчине (кому интересно forum-treiderov.com/index.php?threads/r-indikatory-key-extreme-4.18767/) Надеюсь это не против правил.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 24 января 2020, 12:55
+
0
Я покупал эту KX4. Перерисовываются «мама-не-горюй».
Но я не об этом. Сам стараюсь «вымучать» что-то рабочее из этого.
И хотел предложить (если не поздно конечно писать в этой ветке) следующее.
А что если торговать только по тренду?
Например добавить индикатор DUTY ARROW
и получается примерно вот так:

Редактирован: 22 марта 2020, 00:14
avatar

  7  feofangrek Сообщений: 32

  • 22 марта 2020, 00:10
+
0
Я так же купил в складчину KX4. Остался полностью недоволен. Поэтому сразу отказался от данного индикатора и остаюсь на ТМА.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 24 марта 2020, 08:48
+
0
А есть возможность сделать так, чтоб этот советник торговал только по тренду? Бог с ним, с индикатором DUTY ARROW. Можно просто по облакам TMA_Centered_H1_V2_VS
Голубое облако — торгуем только лонг, красное — шорт. Во всяком случае вручную у меня хорошо получается. Единственный момент — когда флэт и облака не видно какого цвета. Но наверное можно поставить какой-то фильтр, чтоб в это время вообще не торговать, а то неизвестно же, какой цвет появится дальше. Сделок будет значительно меньше, но и точность будет значительно выше.
Редактирован: 24 марта 2020, 10:21
avatar

  7  feofangrek Сообщений: 32

  • 24 марта 2020, 10:04
+
0
А то, что индикаторы не перирисовываются это вам продавец сказал, которму надо вам систему втюхать.Он же постоянно прыгает с графика на график, что бы зрители не определили рисуют индикаторы или нет.
avatar

  19  alex30774 Сообщений: 716

  • 24 января 2020, 14:02
+
0
У меня что то наоборот открыл ставки. Как первый раз прописывал ты в ТЗ.
avatar

  8  Slepnewlgmailcom Сообщений: 37

  • 30 января 2020, 19:36
+
0
Будем подводить итоги в конце следующего месяца. Пока работает на демо счете по 15 парам с разными таймфреймами. Могу сказать, что не жалею что была написана данная сова. Работает медленно но верно. Есть задумки как в ней увеличить профит, но задумка совсем не стандартная.
Редактирован: 30 января 2020, 22:42
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 30 января 2020, 22:42
+
0
Я тестирую на реале на всех парах на разных таймфреймам. Выложу потом результаты. Пока корректирую настройки в процессе торговли.
avatar

  8  Slepnewlgmailcom Сообщений: 37

  • 31 января 2020, 20:05
+
0
Для реала ты рановато запустил. Вчерашний день 31.01. показал насколько может быть агрессивный рынок!
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 1 февраля 2020, 10:19
+
0
Да я уже понял. Просадка сильная, есть моменты для размышления по стратегии.
avatar

  8  Slepnewlgmailcom Сообщений: 37

  • 2 февраля 2020, 10:38
+
0
Всем привет. Да 31 числа было жестким. Если бы торговал на кровные валерьянки бы не хватило дома. Сегодня день порадовал. Профит такой же сумасшедший как и просадка 31 числа.
Но я не тому. У меня возник вопрос по запаздыванию закрытия сделок. Вроде бы все условия соблюдёны, но сова упорно держит сделки. Прилагаю 2 скрина (обратите внимание на время в левом углу).


avatar

  15  Aleh7999 Автор Сообщений: 81

  • 3 февраля 2020, 18:19
+
0
У меня кровные отбились и принесли не плохой профит. Но стратегию тестировать надо ещё. Есть не дочёты. Как что расскажу.
avatar

  8  Slepnewlgmailcom Сообщений: 37

  • 7 февраля 2020, 17:02
+
0
Профит и я хороший получил, правда на демке. Какие ты выявил недочеты? Я кроме запаздывания закрытия сделок и иногда закрытия с отрицательным профитом пока других зацепок не нашел.
avatar

  15  Aleh7999 Автор Сообщений: 81

  • 7 февраля 2020, 19:37
+
0
можно в него добавить стоповый ордер с его тралом?
и тогда меньше усреднений понадобится, и просадок
avatar

  5  nixepace Сообщений: 41 - ОН

  • 28 апреля 2020, 03:51
+
0
А можно сделать так, что бы советник начинал открывать сделки начиная с третего сигнала, а два предущих игнорировал.К примеру первая сделка на покупку открывается после двух синих ромбиков.
P.S.Это не тех.задание, я пока просто интерисуюсь.
Редактирован: 25 июня 2020, 10:21
avatar

  19  alex30774 Сообщений: 716

  • 25 июня 2020, 10:20
+
0
сделки будут очень редкими и не факт, что на тренде спасет.
avatar

  7  feofangrek Сообщений: 32

  • 25 июня 2020, 10:24
+
0
Меня больше интерисует вопрос можно ли это реализовать программно(этот вопрос в первую очередь адресован программистам).
avatar

  19  alex30774 Сообщений: 716

  • 25 июня 2020, 10:27
+
0

может с таким набором «канделябров» продуктивней будет поработать? М30 как раз для евры. Если уж Key Extreme сопственного производства понадобилась:D 
avatar

  8  Genri Сообщений: 378

  • 25 июня 2020, 11:29
+
0
Для душевного удовольствия и полноты ощущений добавили бы открытие ордера не только по закрытию свечи внутрь канала, а и при условии, когда цена вернулась вовнутрь выше-ниже цены открытия предыдущей свечи. За углом Вас ждет нежданчик.
avatar

  7  kvashnin007 Сообщений: 544 - Андрей

  • 6 мая 2022, 21:50
+
0
Не люблю индюшатину, но этот ТМА вроде не рисует.

#property indicator_chart_window
#property indicator_buffers 5
//------
#property indicator_color1  clrLightSteelBlue  //clrDarkTurquoise
#property indicator_color2  clrDarkOrange  //clrRed
#property indicator_color3  clrDeepSkyBlue  //clrLimeGreen
#property indicator_color4  clrBlue
#property indicator_color5  clrRed
//------
#property indicator_width4  2
#property indicator_width5  2
//------
#property indicator_style1  STYLE_DOT

extern string TimeFrame         = "Current TimeFrame";
extern int    HalfLength        = 24;  //56;
extern ENUM_APPLIED_PRICE Price = PRICE_CLOSE;
extern double Deviation         = 1.32;
input double  DevATR            = 2.687;     
extern int    BARTYPE           = 0;
extern int    ArrUP             = 108,
              ArrDN             = 108;
extern bool   alertsOn          = false;
extern int    SIGNALBAR         = 1;
extern bool   alertsOnHighLow   = true;
extern bool   alertsMessage     = true;
extern bool   alertsSound       = true;
extern bool   alertsEmail       = false;
extern bool   alertsMobile      = false;
extern string soundFile         = "alert.wav";   

double tmBuffer[];
double upBuffer[];
double dnBuffer[];
double wuBuffer[];
double wdBuffer[];
double upArrow[];
double dnArrow[];
string IndicatorFileName;
bool   calculatingTma = false;
bool   returningBars  = false;
int    timeFrame;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   timeFrame  = stringToTimeFrame(TimeFrame);
   HalfLength = MathMax(HalfLength,1);
   IndicatorBuffers(7);
         SetIndexBuffer(0,tmBuffer);  SetIndexDrawBegin(0,HalfLength);  SetIndexStyle(0,DRAW_LINE);
         SetIndexBuffer(1,upBuffer);  SetIndexDrawBegin(1,HalfLength);  SetIndexStyle(1,DRAW_LINE);
         SetIndexBuffer(2,dnBuffer);  SetIndexDrawBegin(2,HalfLength);  SetIndexStyle(2,DRAW_LINE);
         SetIndexBuffer(3,upArrow);   SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,ArrUP);
         SetIndexBuffer(4,dnArrow);   SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,ArrDN);
         SetIndexBuffer(5,wuBuffer);  SetIndexStyle(5,DRAW_NONE);
         SetIndexBuffer(6,wdBuffer);  SetIndexStyle(6,DRAW_NONE);
         
   SetIndexLabel(0,stringToTimeFrame(TimeFrame)+": TMA+CG NRP ["+(string)HalfLength+"]");
   SetIndexLabel(1,stringToTimeFrame(TimeFrame)+": Band UPPER");
   SetIndexLabel(2,stringToTimeFrame(TimeFrame)+": Band LOWER");
   SetIndexLabel(3,stringToTimeFrame(TimeFrame)+": ArrowUP");  
   SetIndexLabel(4,stringToTimeFrame(TimeFrame)+": ArrowDN");
     
   IndicatorShortName(stringToTimeFrame(TimeFrame)+": TMA+CG NRP ["+(string)HalfLength+"]");
   
         if (TimeFrame=="calculateTma")  { calculatingTma=true; return(0); }
         if (TimeFrame=="returnBars")    { returningBars=true;  return(0); }
   IndicatorFileName = WindowExpertName();

   return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit=MathMin(Bars-1,Bars-counted_bars+HalfLength);

           if (returningBars)  { tmBuffer[0] = limit; return(0); }
           if (calculatingTma) { calculateTma(limit); return(0); }
           if (timeFrame > _Period) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,IndicatorFileName,"returnBars",0,0)*timeFrame/_Period));
   
 	for(i = limit; i >= 0; i--)
     {
      int      shift1 = iBarShift(NULL,timeFrame,Time[i]);
      datetime time1  = iTime    (NULL,timeFrame,shift1);
      
         tmBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,Deviation,0,shift1);
         upBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,Deviation,1,shift1);
         dnBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,Deviation,2,shift1);

         upArrow[i] = EMPTY_VALUE;
         dnArrow[i] = EMPTY_VALUE;
       
       if(BARTYPE==0)
         {              
         if ( Close[i+1]<dnBuffer[i+1] && Close[i+1]<Open[i+1] && Close[i]>Open[i]) 
           upArrow[i] = Close[i];
         if (Close[i+1]>upBuffer[i+1] && Close[i+1]>Open[i+1] && Close[i]<Open[i]) 
           dnArrow[i] = Close[i];
         }
       if(BARTYPE==1)
         {              
         if ( Close[i+1]<dnBuffer[i+1] && Close[i+1]<Open[i+1] && Close[i]<Open[i]+iATR(NULL,0,5,i)* DevATR) 
           upArrow[i] = Close[i];
         if (Close[i+1]>upBuffer[i+1] && Close[i+1]> Open[i+1] && Close[i]>Open[i]-iATR(NULL,0,5,i)* DevATR) 
           dnArrow[i] = Close[i];
         }
       if(BARTYPE==2)
         {              
         if ( Low[i+1]<dnBuffer[i+1] && Open[i+1]>dnBuffer[i+1] && Close[i]<Close[i+1]-iATR(NULL,0,5,i)* DevATR) 
           upArrow[i] = Close[i+1];
         if (High[i+1]>upBuffer[i+1] && Open[i+1]<upBuffer[i+1] && Close[i]>Close[i+1]+iATR(NULL,0,5,i)*DevATR) 
           dnArrow[i] = Close[i+1];
         }  

         if (timeFrame <= _Period || shift1==iBarShift(NULL,timeFrame,Time[i-1])) continue;

         for(int n = 1; i+n < Bars && Time[i+n] >= time1; n++) continue;
         double factor = 1.0 / n;
         
         for(int k = 1; k < n; k++)
            {
            tmBuffer[i+k] = k*factor*tmBuffer[i+n] + (1.0-k*factor)*tmBuffer[i];
            upBuffer[i+k] = k*factor*upBuffer[i+n] + (1.0-k*factor)*upBuffer[i];
            dnBuffer[i+k] = k*factor*dnBuffer[i+n] + (1.0-k*factor)*dnBuffer[i];
            }               
     }
   if (alertsOn)
     {
      if (alertsOnHighLow)       
        {
        if ((Low[SIGNALBAR]  < dnBuffer[SIGNALBAR] && Low[SIGNALBAR+1]  > dnBuffer[SIGNALBAR+1]) || upArrow[SIGNALBAR]!=EMPTY_VALUE) 
          doAlert("LOW пробил Нижнюю Полосу  =  BUY");  //penetrated lower bar");
        if ((High[SIGNALBAR] > upBuffer[SIGNALBAR] && High[SIGNALBAR+1] < upBuffer[SIGNALBAR+1]) || dnArrow[SIGNALBAR]!=EMPTY_VALUE) 
          doAlert("HIGH пробил Верхнюю Полосу  =  SELL");  //penetrated upper bar");
        }
      else
        {
        if (Close[SIGNALBAR] < dnBuffer[SIGNALBAR] && Close[SIGNALBAR+1] > dnBuffer[SIGNALBAR+1]) 
          doAlert("CLOSE ниже Нижней Полосы  =  BUY");  //penetrated lower bar");
        if (Close[SIGNALBAR] > upBuffer[SIGNALBAR] && Close[SIGNALBAR+1] < upBuffer[SIGNALBAR+1]) 
          doAlert("CLOSE выше Верхней Полосы  =  SELL");  //penetrated upper bar");
        }
     } 
   return(0);
}
avatar

  7  kvashnin007 Сообщений: 544 - Андрей

  • 6 мая 2022, 21:56
+
0
P.S.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void calculateTma(int limit)
{
   int i,j,k;
   double FullLength = 2.0*HalfLength+1.0;
   
   for (i=limit; i>=0; i--)
     {
     double sum  = (HalfLength+1)*iMA(NULL,0,1,0,MODE_SMA,Price,i);
     double sumw = (HalfLength+1);
     
     for(j=1, k=HalfLength; j<=HalfLength; j++, k--)
       {
       sum  += k*iMA(NULL,0,1,0,MODE_SMA,Price,i+j);
       sumw += k;
       }
     tmBuffer[i] = sum/sumw;
            
       double diff = iMA(NULL,0,1,0,MODE_SMA,Price,i)-tmBuffer[i];
       
       if (i> (Bars-HalfLength-1)) 
         continue;
       if (i==(Bars-HalfLength-1))
         {
         upBuffer[i] = tmBuffer[i];
         dnBuffer[i] = tmBuffer[i];
         if (diff>=0)
           {
           wuBuffer[i] = MathPow(diff,2);
           wdBuffer[i] = 0;
           }
         else
           {               
           wdBuffer[i] = MathPow(diff,2);
           wuBuffer[i] = 0;
           }                  
         continue;
         }
         if(diff>=0)
           {
           wuBuffer[i] = (wuBuffer[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength;
           wdBuffer[i] =  wdBuffer[i+1]*(FullLength-1)/FullLength;
           }
         else
           {
           wdBuffer[i] = (wdBuffer[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength;
           wuBuffer[i] =  wuBuffer[i+1]*(FullLength-1)/FullLength;
           }
         upBuffer[i] = tmBuffer[i] + Deviation*MathSqrt(wuBuffer[i]);
         dnBuffer[i] = tmBuffer[i] - Deviation*MathSqrt(wdBuffer[i]);
     }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void doAlert(string doWhat)
{
   static string   previousAlert="";
   static datetime previousTime;
   string message;
   
   if (previousAlert!=doWhat || previousTime!=Time[0]) 
     {
     previousAlert = doWhat;
     previousTime  = Time[0];

     message= StringConcatenate(_Symbol," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," TMA+CG:  ",doWhat);
     
     if (alertsMessage) 
       Alert(message);
     if (alertsEmail)   
       SendMail(StringConcatenate(_Symbol," TMA+CG "),message);
     if (alertsMobile)  
       SendNotification(_Symbol+" TMA+CG "+ message);
     if (alertsSound)   
       PlaySound(soundFile);  //"alert2.wav");
     }
}
//----------------------------------------------------------------
int stringToTimeFrame(string tfs)
{
   for(int l = StringLen(tfs)-1; l >= 0; l--)
     {
      int charr = StringGetChar(tfs,l);
      
      if((charr > 96 && charr < 123) || (charr > 223 && charr < 256))
         tfs = StringSetChar(tfs, 1, charr - 32);
      else 
        if(charr > -33 && charr < 0)
          tfs = StringSetChar(tfs, 1, charr + 224);
     }
   int tf=0;
         if (tfs=="M1" || tfs=="1")     tf=PERIOD_M1;
         if (tfs=="M5" || tfs=="5")     tf=PERIOD_M5;
         if (tfs=="M15"|| tfs=="15")    tf=PERIOD_M15;
         if (tfs=="M30"|| tfs=="30")    tf=PERIOD_M30;
         if (tfs=="H1" || tfs=="60")    tf=PERIOD_H1;
         if (tfs=="H4" || tfs=="240")   tf=PERIOD_H4;
         if (tfs=="D1" || tfs=="1440")  tf=PERIOD_D1;
         if (tfs=="W1" || tfs=="10080") tf=PERIOD_W1;
         if (tfs=="MN" || tfs=="43200") tf=PERIOD_MN1;
         if (tf==0 || tf<_Period)      tf=_Period;
   return(tf);
}
//----------------------------------------------------------------


avatar

  7  kvashnin007 Сообщений: 544 - Андрей

  • 6 мая 2022, 21:59
+
0
P.S.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void calculateTma(int limit)
{
   int i,j,k;
   double FullLength = 2.0*HalfLength+1.0;
   
   for (i=limit; i>=0; i--)
     {
     double sum  = (HalfLength+1)*iMA(NULL,0,1,0,MODE_SMA,Price,i);
     double sumw = (HalfLength+1);
     
     for(j=1, k=HalfLength; j<=HalfLength; j++, k--)
       {
       sum  += k*iMA(NULL,0,1,0,MODE_SMA,Price,i+j);
       sumw += k;
       }
     tmBuffer[i] = sum/sumw;
            
       double diff = iMA(NULL,0,1,0,MODE_SMA,Price,i)-tmBuffer[i];
       
       if (i> (Bars-HalfLength-1)) 
         continue;
       if (i==(Bars-HalfLength-1))
         {
         upBuffer[i] = tmBuffer[i];
         dnBuffer[i] = tmBuffer[i];
         if (diff>=0)
           {
           wuBuffer[i] = MathPow(diff,2);
           wdBuffer[i] = 0;
           }
         else
           {               
           wdBuffer[i] = MathPow(diff,2);
           wuBuffer[i] = 0;
           }                  
         continue;
         }
         if(diff>=0)
           {
           wuBuffer[i] = (wuBuffer[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength;
           wdBuffer[i] =  wdBuffer[i+1]*(FullLength-1)/FullLength;
           }
         else
           {
           wdBuffer[i] = (wdBuffer[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength;
           wuBuffer[i] =  wuBuffer[i+1]*(FullLength-1)/FullLength;
           }
         upBuffer[i] = tmBuffer[i] + Deviation*MathSqrt(wuBuffer[i]);
         dnBuffer[i] = tmBuffer[i] - Deviation*MathSqrt(wdBuffer[i]);
     }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void doAlert(string doWhat)
{
   static string   previousAlert="";
   static datetime previousTime;
   string message;
   
   if (previousAlert!=doWhat || previousTime!=Time[0]) 
     {
     previousAlert = doWhat;
     previousTime  = Time[0];

     message= StringConcatenate(_Symbol," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," TMA+CG:  ",doWhat);
     
     if (alertsMessage) 
       Alert(message);
     if (alertsEmail)   
       SendMail(StringConcatenate(_Symbol," TMA+CG "),message);
     if (alertsMobile)  
       SendNotification(_Symbol+" TMA+CG "+ message);
     if (alertsSound)   
       PlaySound(soundFile);  //"alert2.wav");
     }
}
//----------------------------------------------------------------
int stringToTimeFrame(string tfs)
{
   for(int l = StringLen(tfs)-1; l >= 0; l--)
     {
      int charr = StringGetChar(tfs,l);
      
      if((charr > 96 && charr < 123) || (charr > 223 && charr < 256))
         tfs = StringSetChar(tfs, 1, charr - 32);
      else 
        if(charr > -33 && charr < 0)
          tfs = StringSetChar(tfs, 1, charr + 224);
     }
   int tf=0;
         if (tfs=="M1" || tfs=="1")     tf=PERIOD_M1;
         if (tfs=="M5" || tfs=="5")     tf=PERIOD_M5;
         if (tfs=="M15"|| tfs=="15")    tf=PERIOD_M15;
         if (tfs=="M30"|| tfs=="30")    tf=PERIOD_M30;
         if (tfs=="H1" || tfs=="60")    tf=PERIOD_H1;
         if (tfs=="H4" || tfs=="240")   tf=PERIOD_H4;
         if (tfs=="D1" || tfs=="1440")  tf=PERIOD_D1;
         if (tfs=="W1" || tfs=="10080") tf=PERIOD_W1;
         if (tfs=="MN" || tfs=="43200") tf=PERIOD_MN1;
         if (tf==0 || tf<_Period)      tf=_Period;
   return(tf);
}
//----------------------------------------------------------------
avatar

  7  kvashnin007 Сообщений: 544 - Андрей

  • 6 мая 2022, 22:00

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари