Обсуждение статьи "Создаем кроссплатформенный советник-сеточник (Окончание): диверсификация как способ повышения прибыльности"

 

Опубликована статья Создаем кроссплатформенный советник-сеточник (Окончание): диверсификация как способ повышения прибыльности:

В прошлых статьях данной серии мы пытались разными способами создать более-менее прибыльный советник-сеточник. Теперь же мы попробуем увеличить прибыльность торгового советника с помощью диверсификации. Нашей целью является всеми желанные 100% прибыли в год при 20% максимальной просадки по балансу.

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

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

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

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

Автор: Roman Klymenko

 

ПРОблема сеток в том что оптмимзатор подбирает настройки так чтоб к неблаоприятному графику попдойти  минимальным лотом. В жизни все происходит не так. Сначала на среднем рынке накапливаются позиции, потом приходит не надолго совсем неблаоприятный участок и здравствуй Маржин Колл. 

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

 
Попробовал запустить по паре EURUSD. на М15 не совершил ни одной сделки в тестере за 2 года истории. В журнале никаких ошибок и предупреждений нет. Настроек куча. Сложно понять с первого раза какие за что отвечают и почему ничего не работает.
 
Не запускается советник, сам улыбается а сделки не открывает. Может подскажете как запустить, или описание настроек, сэты дадите?
 
Оптимизация за год с количеством сделок в районе 50-ти - это подгонка под историю.
[Удален]  
itanprom:
Не запускается советник, сам улыбается а сделки не открывает. Может подскажете как запустить, или описание настроек, сэты дадите?

нужно вписать пару - что бы улыбался и открывал позиции 

Снимок

и их в настройках аж 11 пар 

 

Может ли кто-нибудь предоставить набор настроек? Я запускаю этот советник и он даже не открывает нормальные сделки... Я бы очень хотел попробовать.


Спасибо, сэр.

 
Liu Jeff:

Может ли кто-нибудь предоставить набор настроек? Я запускаю этот советник, а он даже не открывает нормальные сделки... Я очень хочу попробовать.


Спасибо, сэр.

Мне кажется, что я не могу установить параметры, он всегда говорит, что таймер не установлен, может ли кто-нибудь помочь?

 

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

Тут писали про малое количество сделок и подгонку под историю — я оптимизировал вашего робота на таймфрейме М1, что давало от 4 тысяч сделок за 3 года, лучшие экземпляры давали достаточно стабильные результаты. 

Совершенно неудобно работать с абсолютным количеством денег как целями советника, было бы в тысячу раз лучше, если бы вы в качестве целей выбрали задавать количество пунктов, а помимо статичного лота, как вариант — процент от максимально допустимого лота. Иначе даже просто перейти от одного бюджета в тестере к другому это уже большая проблема, надо заново запускать оптимизацию.

Кстати, где-то писалось про постепенное увеличение лота — об этом я в коде ничего не нашел, возможно залита не последняя версия.

Меня также очень смутила стратегия входа по MA, где как правило рассматривается либо повышение, либо уменьшение значения МА. В коде это выглядит так:

if (buf0[0] > buf0[6]) {
   //--- МА растет
} else if (buf0[0] < buf0[6]) {
   //--- МА падает
}

Почему с текущим баром сравнивается значение именно седьмого бара? Где логика? А если это флет и между 1 и 7 баром МА то росла, то падала? Ощущение, что вы не очень заморачивались на этом моменте, возможно побыстрее хотели дописать статью. На мой взгляд, здесь необходимо рассматривать стабильный рост несколько баров подряд, чтобы было подтверждение. Я написал код, чтобы ловить подтверждаемые развороты или стабильный рост/падение значений массива на протяжении нескольких баров, делюсь с вами:

//+------------------------------------------------------------------+
//| Ловим разворот индикатора                                        |
//+------------------------------------------------------------------+
bool getReverse(double & object [], string direction, int repeatsIn, int repeatsOut) {
   bool reverseCorrect = true;
   
   if (direction == "up") {
      if (repeatsOut > 0) {
         for(int i = 0; i <= (repeatsOut - 1); i++) {
            if (!(object[i] > object[i+1])) reverseCorrect = false;
         }
      }
      
      if (repeatsIn > 0) {
         for(int i = repeatsIn; i <= (repeatsIn + repeatsOut - 1); i++) {
            if (!(object[i] < object[i+1])) reverseCorrect = false;
         }
      }   
   } else {
      if (repeatsOut > 0) {
         for(int i = 0; i <= (repeatsOut - 1); i++) {
            if (!(object[i] < object[i+1])) reverseCorrect = false;
         }
      }
      
      if (repeatsIn > 0) {
         for(int i = repeatsIn; i <= (repeatsIn + repeatsOut - 1); i++) {
            if (!(object[i] > object[i+1])) reverseCorrect = false;
         }
      }
   }
      
   return reverseCorrect;
}

Используем так:

getReverse(MA1Val, "up", 0, 7);

В данном примере функция вернет true, если на протяжении 7 баров подряд значение MA1 росло. Если заменить 0 на, например, 3, то будет будет искаться паттерн, при котором MA сначала падала 3 бара подряд, а потом 7 баров подряд росла.

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

Успехов!

 
В коде нет процедуры выставления счетов, только процедура выравнивания, множество повторяющихся параметров и процедур, бесполезные ошибки и создание объектов, это самый мусорный код, который я когда-либо видел!
 

gsc:
代码里没有开单程序,只有平单程序,大量重复的参数和程序,毫无用处的错误判断和创建物件,这是我见过的最垃圾的


Можете ли вы помочь написать ea спасибо