Мантергейт 5. Скучный мартингейл.

Ну что же, пока Саксотай бухает, а Савинский наблюдает за мониторингом, выложу последнюю версию Мантергейта, как и обещал в 54-м посте. На мониторящемся счёте, которому уже, как и самому запуску, больше двух недель, работает именно эта версия. Во вложении файл настроек с этой версии.

Она повторяет предыдущую с один небольшим, но важным изменением: неосновные компенсационные позиции теперь открываются не только на переломах (изменениях направления) кривой индикатора "30 МА-шек", а ещё и на трендовых участках. Зачем пропускать хорошие трендовые движения, и почему бы не использовать их для отбития набегающего убытка, дожидаясь, возможно, ещё нескорого перелома, с намоткой убытков от основных позиций? Такая позиция откроется только, если между 0-м (текущим) и 1-м барами и между 1-м и 2-м барами разница в одинаково направленных значениях индикатора "30 МА-шек" будет равна или превысит значение в пунктах настройки Минимальная разница значений между барами, благодаря которой можно отсеять действительно сильные трендовые движения от слабых, на которых открываться нежелательно.

Открытие неосновных компенсационных позиций на переломах более приоритетно, чем на трендовых участках. При открытии на переломах порогов (минимальных разниц значений) не существует, кривая МА считается изменившей направление, даже если показания индикатора со смежных баров отличаются на один пункт.

Таким образом, мы имеем намного более частое открытие компенсационных позиций, а значит, оперативный убыток отбивается быстрее. В общем, получился некий скальперский "пулемёт", что вполне в моём стиле торговли. Я построил именно то, что и хотел.

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

Вложения

Большое спасибо за ваш труд! Судя по результатам мониторинга, советник заслуживает пристального внимания.

Я скачал версию из предыдущего поста, применил к ней настройки из .set файла оттуда же, провёл тестирование на USDJPY H1 с начальным депозитом 6000 у.е. и получил вот такие результаты: -https://ru.files.fm/u/8dwg6c8eez
Прикрепить файлы к посту не смог, форум выдаёт ошибку.

Пожалуйста, подскажите, что я делаю не так. Хотелось бы разобраться.
 
Последнее редактирование:
Попробую вот так вставить скриншот:

screenshot.png
 
Да, действительно, удивительно. Все условия прогона воспроизведены Вами правильно, кроме ни на что не влияющей разницы в спреде в 1 п. Могу объяснить такое существенное расхождение Вашего и моего результатов (прикрепляю; обратите внимание, что, несмотря на существенную просадку по балансу, месяц мы закрыли с чистоганом 816 единиц, что не так уж плохо; можно было бы забить на недобор, стопорнуть сова и выводить деньги) только известным качеством метаквотсовских котировок, которыми пользуется в том числе и брокер РобоФорекс. У Альпов своя база данных котировок, и я пользуюсь исключительно ею. Заметьте, насколько лучше альповские котировки в части количества смоделированных тиков. Ваши котировки просто "дырявые".
 

Вложения

  • САВИНСКИЙ.PNG
    САВИНСКИЙ.PNG
    38,1 КБ · Просмотры: 35
C-подобный:
double ATR = MathMin(iCustom(_Symbol,PERIOD_M15,"ATR",TrJuniorATR,0,1),iCustom(_Symbol,PERIOD_M15,"ATR",TrSeniorATR,0,1));

@ ИванМН​

У Вас в 412 строке указан индикатор "ATR". Это какой-то другой индикатор или же стандартный?
 
C-подобный:
double ATR = MathMin(iCustom(_Symbol,PERIOD_M15,"ATR",TrJuniorATR,0,1),iCustom(_Symbol,PERIOD_M15,"ATR",TrSeniorATR,0,1));

@ ИванМН​

У Вас в 412 строке указан индикатор "ATR". Это какой-то другой индикатор или же стандартный?
Кэш, Вы наверняка замечали, что в комплекте МТ4 некоторые индикаторы "зашиты" в терминал, а некоторые являются обычными кодами, расположенными в соответствующей папке. Первые более скоростные, но недоступны для правки, вторые же можно править, как заблагорассудится. Несколько индикаторов, в том числе и ATR, представлены в обоих вариантах. Я предпочёл в этом советнике именно второй вариант ATR, т.к. он выдаёт значения с тем же количеством знаков после запятой, что и в цене пары на графике, в первом же варианте это число всегда равно 4-м, что, в случае с пятизначными парами, приведёт к потере точности. Вот и весь расчёт.
 
C-подобный:
            CompTicket = CompPosStatus=  0;

В строке 229 содержится ошибка. Прокомментируйте.
 
В чём именно ошибка, и почему Вы так решили?
В блоке, содержащем эту строку, происходит анализ итогов только что закрывшейся компенсационной позиции, по окончании которого номер ("тикет") этой позиции и переменная-флаг CompPosStatus обнуляются одной строкой. Что здесь не так, по Вашему мнению?
 
В чём именно ошибка, и почему Вы так решили?
... Что здесь не так, по Вашему мнению?
Извиняюсь, не понял сразу предназначение этого кода. Все так.
У меня новый вопрос.
C-подобный:
void OnTimer()
{
   for (char i = char(GlobalVariablesTotal() - 1); i >= 0; i--) double GVG = GlobalVariableGet(GlobalVariableName(i));
    GlobalVariablesFlush();
    if (!ChartSaveTemplate(0,"Экран Мантергейта")) Print("Не удалось сохранить шаблон графика, ошибка ",_LastError);
    if (Delay > 0 && ReScanServers() != -1) Print("Серверы пересканированы");
}

В функции OnTimer() все время происходит запрос Глобальных Переменных - зачем это сделано?
И еще. Зачем постоянно сохранять Template?
 
Обращение ко глобальным переменным раз в 15 минут происходит, для того чтобы у них постоянно обновлялась дата последнего обращения. Если этого не делать, то некоторые редкообновляемые или необновляемые глобальные переменные, например Restart, через месяц будут автоматически удалены терминалом, чего допускать нельзя, т.к. это приведёт к тому, что советник не сможет в случае слёта по форс-мажору подхватить свои позиции после перезапуска и штатно продолжить работу. В общем, если Вы совершенно уверены в том что запуск советника продлится менее месяца, этот блок можно закомментировать.
Для чего постоянно сохранять шаблон? Для того чтобы в случае упомянутого форс-мажора быстро, одним кликом восстановить на графике все графические объекты и, собственно, сам советник. Если очень режет слух, можете закомментировать и это.
 
Благодарю за подробный комментарий. Есть несколько мыслей.
Обращение ко глобальным переменным раз в 15 минут происходит, для того чтобы у них постоянно обновлялась дата последнего обращения.
Наверное имеет смысл оформить это в отдельную функцию, например RefreshGlobalVariables() и вызывать ее из функции OnTick на каждом новом баре, например M15.
А то OnTimer() работает и в выходные тоже.
Для чего постоянно сохранять шаблон? Для того чтобы в случае упомянутого форс-мажора быстро, одним кликом восстановить на графике все графические объекты и, собственно, сам советник.
По моему мнению шаблон нужно обновлять только если произошли изменения на графике. Например открылись/закрылись ордера. Т.е. это тоже можно оформить в виде отдельной функции UpdateTemplate() и вызывать когда произошли изменения на графике.
Ордера то будут открываться не часто.
 
Не спорю. Можно и по-Вашему реализовать. Хотите - делайте, ничего не имею против. Можете свою версию выложить здесь.
Хотя, по существу, эти два момента имеют второстепенное значение для работы советника, не вижу большой нужды обращать свои интеллектуальные усилия на перестройку того, что и так нормально работает.
 
@ИванМН
Прокомментируйте пожалуйста работу Глобальной Переменной "100_Restart?". Она в эксперте не создается, но у нее запрашивают значение. Откуда она берется?
 
@@ИванМН
И еще у меня вопрос возник. В строке 294 проверяется существование файла "Проверка" и чуть ниже он удаляется. Но он не создается экспертом. Тогда логичный вопрос - откуда он берется? Прокомментируйте пожалуйста.
 
Она в эксперте не создается
Ну, здрасьте, пожалуйста. А в 597-й строке что, по-Вашему происходит? Я аж испугался, вот это "косячище" с моей стороны! И как я ранее его не заметил!
Она, как и некоторые другие, создаётся только при торговле, не в тестере. В тестере-то она зачем? Там слётов не бывает.
В строке 294 проверяется существование файла "Проверка"
На всё, что связано с настройками Принимать внешние (высокоприоритетные) сигналы и Транслировать сигналы Копировщику (в файл), не обращайте внимания. Просто раз и навсегда поставьте их в false. Первая из них уже давно на выброс, это рудимент моего долгого пути к источнику хоть немного надёжных сигналов для компенсационных позиций - просто пока лень вычищать, потом сделаю. Вторую я применяю для своих целей, с алгоритмом советника обе они никак не связаны и не влияют на него.
 
Она, как и некоторые другие, создаётся только при торговле, не в тестере.
Прокомментируйте пожалуйста более подробно работу переменной Restart и как она взаимодействует с Глобальной Переменной "100_Restart?". Я так понимаю, что переменная Restart осуществляет сброс всех Глобальных Переменных в текущее (исходное) состояние. А управляет ею Глобальная Переменная "100_Restart?" извне. Когда необходимо в терминале изменяется состояние Глобальной Переменной "100_Restart?" с true на false, что и дает сигнал на переинициализацию всех Глобальных Переменных. Я прав?
 
Кэш, возьму на себя смелость порекомендовать Вам переместить фокус своего внимания с моментов, которые не имеют отношения к алгоритму советника, давно проверены в работе и играют второстепенную, обслуживающую роль. Вы не на том сосредоточены. Предлагаю Вам подумать (и, возможно, попробовать реализовать в меру своих навыков), что можно улучшить в самом алгоритме, правилах открытия-закрытия позиций: может быть, поискать индикатор(ы) поточнее, тейк-профиты рассчитать потоньше, какие-нибудь фишки с открытием компенсационных позиций придумать... Вот тут есть где размахнуться. Что Вам до сугубо технических деталей, от которых не зависит ничего, связанного со статистикой и итогами работы советника, никак в толк не возьму?

Переменная Restart - это просто флаг того, что советник ранее уже был запущен в работу на счёте. Она сохраняется в глобальной переменной 100_Restart. Если советник запускается впервые, ей присваивается true, сохраняется в глобалках, чтобы после слёта и восстановления советник мог проинициализироваться из глобалок. Никаких сбросов никуда она не осуществляет, и значение её один раз меняется с false на true и далее не изменяется.
 
Могу объяснить такое существенное расхождение Вашего и моего результатов (прикрепляю; обратите внимание, что, несмотря на существенную просадку по балансу, месяц мы закрыли с чистоганом 816 единиц, что не так уж плохо; можно было бы забить на недобор, стопорнуть сова и выводить деньги) только известным качеством метаквотсовских котировок, которыми пользуется в том числе и брокер РобоФорекс. У Альпов своя база данных котировок, и я пользуюсь исключительно ею.
Благодарю за разъяснение. Дабы исключить в будущем подобные вопросы, с завтрашнего дня поставлю советник на демо-счёт.
Понаблюдаю за его работой 3-4 месяца.
 
@ИванМН
строка 275
C-подобный:
if (Misfit < 0 && CompPosManual != 0 && CompPosManual > 2 && Compensate(TC,_Symbol,false,true))//3 параметр здесь игнорир.
Прокомментируйте пожалуйста код. Не совсем понятно использование здесь переменной CompPosManual.
 
Благодарю за разъяснение. Дабы исключить в будущем подобные вопросы, с завтрашнего дня поставлю советник на демо-счёт.
Понаблюдаю за его работой 3-4 месяца.
Очень хорошо. Только не забудьте тщательно и придирчиво, как и присуще скрягам :-), прооптимизировать советник. Имейте в виду, что выложенные мной настройки - не более чем отправная точка при запуске оптимизации! Глубину оптимизации рекомендую не более полугода - более "старый" рынок уже неактуален, пары постоянно меняют поведение. Если будут свои соображения по оптимизации - буду рад увидеть здесь (и, возможно, что-то почерпнуть), если будут вопросы - обсудить. Это же пожелание касается и прочих пользователей.
Не совсем понятно использование здесь переменной CompPosManual.
Всё, что связано с ручным открытием компенсационных позиций, - тоже на выброс.
 

Посмотрели (470) Посмотреть

Назад
Верх