Добрый день! Нужна помощь в реализации автоматического торгового алгоритма. Суть простая, вход в предполагаемый импульс, отработка, выход. Хотелось бы посмотреть, какой процент прибыльных сделок будет давать индикатор Trend direction and force — JMA smoothed на дистанции.
Пример настроек:
— Торговое время(ч), начало торговли советником и конец торговли советником
— Настройки индикатора
— Объем в первой сделке
— Режим мартингейл после убыточной сделки, через коэффициент. Если устанавливается «1» то активный,
если устанавливается «0» то не активный
— Стоп лосс
— Тейк профит
— Б/У, при достижении указанного значения(плюс тик в сторону профита), стоп переводится в безубыток учитывая спред
— Спред
— Проскальзывание
Индикатор:
Trend direction and force — JMA smoothed.mq5 (0 Kb)
Комментарии (22)
Инд. не загружен...!
20 Marik007 Сообщений: 426 - Forexman
www.mql5.com/ru/code/21871
Редактирован: 27 мая 2024, 20:22
5 ZERNO Автор Сообщений: 56 - ZERNO
35 AM2 Сообщений: 16665 - Андрей
Красная линия — сел до серой.
Перелом красной вверх — бай до перелома линии вниз.
Перелом зеленой вниз — сел до перелома вверх.
Перелом — это не обязательно рост вверх, а на следующей свече падение вниз.
Можно использовать замедление роста-падения с заданным процентом замедления. Редактирован: 27 мая 2024, 21:25
8 kvashnin007 Сообщений: 757 - Андрей
5 ZERNO Автор Сообщений: 56 - ZERNO
Здесь сЦуть в чем?
Кэшируем основную сделку. Т.е. не зарабатываем, но и не теряем. Спред и комиссию при TF М15 и выше можем считать досадным недоразумением. Индикатор (цена) вновь развернулся в направление основной сделки. фиксируем профит от доп. сделки, а основная как-бы продолжает движение вниз, только с более лучшей цены. Мы ничего не теряем. Даже, если доп. профит будет минусовой, он компенсируется профитом основной сделки.
Кроме того, таким же образом можно поступать в «серой зоне».
При переходе индикатора в серую зону, просто кэшируем основную сделку.
А при выходе из этой зоны, просто закрываем противоположную. Она то даст прибыль. В противном случае просто съест накопленную прибыль. Т.е. убыток.
Можно побаловать с периодами. Интересные варианты получаются. Например TrendPeriod=2.
Можно взять тот же индюк, но Forse.
Два индюка на разных TF.
Понимаю. Все это потом. Просто мысли сейчас. И их надо записать.
Склероз, понимаешь ли.
8 kvashnin007 Сообщений: 757 - Андрей
20 Boris54 Сообщений: 827 - ПенSионер
Сами индюки по ссылке: www.opentraders.ru/downloads/3848/
8 kvashnin007 Сообщений: 757 - Андрей
20 Boris54 Сообщений: 827 - ПенSионер
www.opentraders.ru/downloads/3848/ Редактирован: 28 мая 2024, 10:47
8 kvashnin007 Сообщений: 757 - Андрей
А так если кому интересно то на 4ку этого типа индюков море, читайте, выбирайте, облегчайте, крутите, применяйте на свое усмотрение. Ссылка: forex-station.com/trend-direction-force-index-indicators-mt4-t8438707.html
Ребята, в целом спасибо за участие, но дайте получить для начала базовый вариант советника. Ситуация похожа на деление шкуры неубитого медведя. Плюс я как автор идеи начинаю уходить в сторону от своей концепции, сторонние советы порою бывают лишними. Я без негатива, просто если кому то не в терпеж и имеются свои дополнения, делайте новый пост на данную тему и творите на свой вкус советник. Всё что выше предложено в добавку к посту, имеет естественно место быть, но это уже и так в моих планах прокручивалось. Потом всё прикинем, не суетитесь раньше времени.
Всем добра!
5 ZERNO Автор Сообщений: 56 - ZERNO
35 AM2 Сообщений: 16665 - Андрей
5 ZERNO Автор Сообщений: 56 - ZERNO
5 ZERNO Автор Сообщений: 56 - ZERNO
35 AM2 Сообщений: 16665 - Андрей
Ладно ребята, всем успехов!
Редактирован: 29 мая 2024, 11:49
5 ZERNO Автор Сообщений: 56 - ZERNO
Он истинен только для ордеров одного направления. Если советник просто перевёртыш, функция будет работать корректно. Опять же, безубыток будет равен цене открытия ордера и расчет не нужен. Правда, без учета поборов брокера.
Предлагаю универсальную функцию на все случаи жизни. Еще не известно куда нас приведут наши доработки.
Кроме того, такой вариант практически на 100% (косвенно) учитывает поборы брокера, если есть разнонаправленные ордера.
Сюда же можно добавить расчет БУ отдельно для ордеров Buy, отдельно для Sell.
Легко. Добавив две переменные.
Просто поменяйте функции и будет вам счастье. Надеюсь.
Всем удачи.
8 kvashnin007 Сообщений: 757 - Андрей
<code> //+------------------------------------------------------------------+ //| KAE Impuls.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 clrCoral #property indicator_color2 clrCornflowerBlue #property indicator_color3 Red #property indicator_color4 Blue extern int Per_ATR = 3; extern int Per_MA = 3; extern ENUM_MA_METHOD Ma_Type = MODE_SMMA; extern ENUM_APPLIED_PRICE PRICE = PRICE_CLOSE; extern double Level_Up = 16.7; extern double Level_Dn = 16.7; //--- extern bool alertsOn = false; extern bool alertsOnCurrent = true; extern bool alertsMessage = true; extern bool alertsSound = false; extern bool alertsEmail = false; //--- double AboveBuff[]; double ShortBuff[]; double LongBuffe[]; double BelowBuff[]; // --- int init() { SetIndexBuffer(0, AboveBuff); SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer(1, BelowBuff); SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer(2, ShortBuff); SetIndexStyle(2, DRAW_ARROW, EMPTY, 1); SetIndexArrow(2, 108); SetIndexBuffer(3, LongBuffe); SetIndexStyle(3, DRAW_ARROW, EMPTY, 1); SetIndexArrow(3, 108); SetIndexLabel(0, "Вверх"); SetIndexLabel(1, "Вниз"); SetIndexLabel(2, NULL); SetIndexLabel(3, NULL); SetLevelStyle(STYLE_DOT, 0, SteelBlue); IndicatorShortName(" KAE Impuls "); return (0); } // --- void deinit() { Comment(""); } // --- void start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return; if(counted_bars>0) counted_bars--; int limit=MathMin(Bars-counted_bars,Bars-1); for (int i = limit; i >=0; i--) { double Main =iMA(NULL,0,Per_MA,0,Ma_Type,PRICE,i);// !!! +1 double Minr = 0.2 * iATR(NULL,PERIOD_CURRENT,Per_ATR,i); if (Minr!=0) { AboveBuff[i] = 3.0 * (High[i] - Main) / Minr; BelowBuff[i] = 3.0 * (Low[i] - Main) / Minr; } if(AboveBuff[i] + BelowBuff[i]>=0) { AboveBuff[i] = AboveBuff[i] + BelowBuff[i]; BelowBuff[i] = 0; } if(AboveBuff[i] + BelowBuff[i]<0) { BelowBuff[i] = AboveBuff[i] + BelowBuff[i]; AboveBuff[i] = 0; } ShortBuff[i] = EMPTY_VALUE; LongBuffe[i] = EMPTY_VALUE; if (AboveBuff[i] > Level_Up && Close[i] > Open[i]) ShortBuff[i] = Level_Up; if (BelowBuff[i] < -Level_Dn && Close[i] < Open[i]) LongBuffe[i] = -(Level_Dn); } manageAlerts(); return; } //+------------------------------------------------------------------- //| //+------------------------------------------------------------------- void manageAlerts() { if (alertsOn) { if (alertsOnCurrent) int whichBar = 0; else whichBar = 1; if (ShortBuff[whichBar] != EMPTY_VALUE || LongBuffe[whichBar] != EMPTY_VALUE) { if (ShortBuff[whichBar] != EMPTY_VALUE) doAlert(whichBar,"down"); if (LongBuffe[whichBar] != EMPTY_VALUE) doAlert(whichBar,"up"); } } } // --- void doAlert(int forBar, string doWhat) { static string previousAlert="nothing"; static datetime previousTime; string message; if (previousAlert != doWhat || previousTime != Time[forBar]) { previousAlert = doWhat; previousTime = Time[forBar]; message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," SimilarFxMNT signal ",doWhat); if (alertsMessage) Alert(message); if (alertsEmail) SendMail (StringConcatenate(Symbol()," SimilarFxMNT "),message); if (alertsSound) PlaySound("alert2.wav"); } } // ------------------------------------------------------------------------------------------------------------------ </code>Если проявится интерес, можно будет просить Андрея перевести на mql5. Редактирован: 30 мая 2024, 21:16
8 kvashnin007 Сообщений: 757 - Андрей
Кажется, не тот вариант дал. Давно это было.
Попробуй этот:
<code> //+------------------------------------------------------------------+ //| KAE Impuls v.2.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 clrCoral #property indicator_color2 clrCornflowerBlue #property indicator_color3 Red #property indicator_color4 Blue extern int Per_ATR = 9; extern int Per_MA = 5; extern ENUM_MA_METHOD Ma_Type = MODE_SMMA; extern ENUM_APPLIED_PRICE PRICE = PRICE_CLOSE; extern double Level_Up = 16.7; extern double Level_Dn = 16.7; //--- extern bool alertsOn = false; extern bool alertsOnCurrent = true; extern bool alertsMessage = true; extern bool alertsSound = false; extern bool alertsEmail = false; //--- double AboveBuff[]; double ShortBuff[]; double LongBuffe[]; double BelowBuff[]; // --- int init() { SetIndexBuffer(0, AboveBuff); SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer(1, BelowBuff); SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer(2, ShortBuff); SetIndexStyle(2, DRAW_ARROW, EMPTY, 1); SetIndexArrow(2, 108); SetIndexBuffer(3, LongBuffe); SetIndexStyle(3, DRAW_ARROW, EMPTY, 1); SetIndexArrow(3, 108); SetIndexLabel(0, "Вверх"); SetIndexLabel(1, "Вниз"); SetIndexLabel(2, NULL); SetIndexLabel(3, NULL); SetLevelStyle(STYLE_DOT, 0, SteelBlue); IndicatorShortName(" KAE Impuls v.2 "); return (0); } // --- void deinit() { Comment(""); } // --- void start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return; if(counted_bars>0) counted_bars--; int limit=MathMin(Bars-counted_bars,Bars-1); for (int i = limit; i >=0; i--) { double Main =iMA(NULL,0,Per_MA,0,Ma_Type,PRICE,i);// !!! +1 double Minr = 0.2 * iATR(NULL,PERIOD_CURRENT,Per_ATR,i); if (Minr!=0) { AboveBuff[i] = 3.0 * (High[i] - Main) / Minr; BelowBuff[i] = 3.0 * (Low[i] - Main) / Minr; } if(AboveBuff[i] + BelowBuff[i]>=0) { AboveBuff[i] = AboveBuff[i] - BelowBuff[i]; BelowBuff[i] = 0; } if(AboveBuff[i] + BelowBuff[i]<0) { BelowBuff[i] = -AboveBuff[i] + BelowBuff[i]; AboveBuff[i] = 0; } ShortBuff[i] = EMPTY_VALUE; LongBuffe[i] = EMPTY_VALUE; if (AboveBuff[i] > Level_Up && Close[i] > Open[i]) ShortBuff[i] = Level_Up; if (BelowBuff[i] < -Level_Dn && Close[i] < Open[i]) LongBuffe[i] = -(Level_Dn); } manageAlerts(); return; } //+------------------------------------------------------------------- //| //+------------------------------------------------------------------- void manageAlerts() { if (alertsOn) { if (alertsOnCurrent) int whichBar = 0; else whichBar = 1; if (ShortBuff[whichBar] != EMPTY_VALUE || LongBuffe[whichBar] != EMPTY_VALUE) { if (ShortBuff[whichBar] != EMPTY_VALUE) doAlert(whichBar,"down"); if (LongBuffe[whichBar] != EMPTY_VALUE) doAlert(whichBar,"up"); } } } // --- void doAlert(int forBar, string doWhat) { static string previousAlert="nothing"; static datetime previousTime; string message; if (previousAlert != doWhat || previousTime != Time[forBar]) { previousAlert = doWhat; previousTime = Time[forBar]; message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," IMPULS signal ",doWhat); if (alertsMessage) Alert(message); if (alertsEmail) SendMail (StringConcatenate(Symbol()," IMPULS "),message); if (alertsSound) PlaySound("alert2.wav"); } } // ------------------------------------------------------------------------------------------------------------------ </code>Редактирован: 30 мая 2024, 21:35
8 kvashnin007 Сообщений: 757 - Андрей
Замечания сделал в виде комментариев в коде. Так удобнее править-отвечать.
Сигнальный блок надо сильно дорабатывать.
С наскока не вышло. Сказывается незнание mql5.
Посмотрите, кто попродвинутее. Или к Андрею может пробиться.
Даю код с замечаниями. В один файл не поместился. Два склеить, думаю, проблем не составит.
8 kvashnin007 Сообщений: 757 - Андрей
Смотрите, комментируйте, исправляйте.
8 kvashnin007 Сообщений: 757 - Андрей
Ввел внешнюю переменную VariantOpen.
Если VariantOpen=1, то это вариант АМ2. Если 2-4, то это мои извращения. Хотя это не последнее слово. Только надо разобраться с показаниями индикатора. Массив tr это что такое? Какому массиву он соответствует в индикаторе?
double val[],valc[],levup[],levdn[];
В mql4 просто указываешь номер массива, с которого снимаешь пальчики, а здесь как?
Ладно буду изучать матчасть.
К нашему баранчику. Как всегда даю две части для склейки. Сохраните как версию 2. Погоняйте. Должно быть получше, чем на скрине: zakaz.opentraders.ru/uploads/images/2/9/e/4/638/big/2b963a13c1.png.
Удачи.
Часть1.
8 kvashnin007 Сообщений: 757 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий