Советник на основе корреляции.

  • Автор темы Автор темы ZNV
  • Дата начала Дата начала

ZNV

Активный участник
Здравствуйте.

Советник на основе корреляции. Это так сказать черновик, работу буду продолжать.
Выкладываю с целью получить ваши замечания-поправки-дополнения.
Если что то выйдет путнее, буду рад поделиться.

Кросс пара EURJPY. Торговля ведется только по ней.

Имеем две группы пар:
"USDJPY", "GBPJPY", "CHFJPY", "CADJPY", "AUDJPY", "NZDJPY"

"EURUSD", "EURGBP", "EURAUD", "EURCHF", "EURNZD", "EURCAD"

Мониторим положение цены по каждой группе, относительно скользящей по таймфреймам М15 и Н1.
Если в одной группе все нырнули под нее, а в другой над ней - вход.
Если предыдущий ордер убыточный - увеличение лота (пока поставил удвоение).

Коэффициент 50%. Показывает стабильную прибыль. При том что ничего больше не делал. Вот тут, и вынос на обсуждение - посмотрите работу, напишите если считаете, как уменьшить кол-во убыточных ордеров.
  • присвоение каждой паре по каждому ТФ отдельного значения скользящей, ни к чему не привели - убрал.
  • увеличение лота не существенно меняет картину. Но за счет того что непрерывных убыточных позиций не получалось более 5-ти (и это терпимо), это дает возможность намного увеличить прибыль.
Тема лично для меня очень интересна, Есть желание копать.
Похожая тема, на основе которой делал старт - https://forexsystemsru.com/threads/torgovlja-krossami-sila-valjut.88710/

Выбрал одну динамическую пару EURJPY. Если на ней получиться качественный инструмент, можно сделать и для остальных пар.
 

Вложения

  • EURJPYM15.png
    EURJPYM15.png
    45,2 КБ · Просмотры: 118
  • TesterGraph.gif
    TesterGraph.gif
    17,5 КБ · Просмотры: 121
  • 7x8_new.ex4
    7x8_new.ex4
    16,1 КБ · Просмотры: 20
Последнее редактирование:

ZNV

Активный участник
Для тестирования и оптимизации - должны быть добавлены котировки по всем используемым парам по ТФ М15 и Н1.
 

kudinoff

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

Вложения

  • Like
Реакции: ZNV

kudinoff

Почетный гражданин
увеличение лота не существенно меняет картину. Но за счет того что непрерывных убыточных позиций не получалось более 5-ти (и это терпимо), это дает возможность намного увеличить прибыль.
Попробуйте такую схему: если за последние 4 сделки баланс не максимальный - увеличиваем лот, допустим х2. Этим удвоенным работаем, пока баланс не сделает максимум. Можно сделать с забыванием (переходим на стартовый лот, если за последние 4 трейда баланс максимальный), или без (пока не обновится глобальный максимум). Цифра 4 по опыту оптимальная.
Советнику не хватает защиты прибыли, хотя бы банального трала или безубытка.
 
  • Like
Реакции: ZNV

ZNV

Активный участник
Попробуйте такую схему: если за последние 4 сделки баланс не максимальный - увеличиваем лот, допустим х2. Этим удвоенным работаем, пока баланс не сделает максимум. Можно сделать с забыванием (переходим на стартовый лот, если за последние 4 трейда баланс максимальный), или без (пока не обновится глобальный максимум).
Если честно, ничего не понял :)
Объясните попроще, поэтапно...

По моему это избыточное требование, сигналы получаются редкие. Если усреднять сигнал, смотреть какая тенденция преобладает?
Добавил такую опцию в следующий релиз.
Объясните что показывает индикатор, более подробно. Догадаться то одно...

Исправления / дополнения:
  • после убыточного закрытия увеличение ордера х2
  • допустима погрешность / несовпадение в каждой группе ( 6 пар x 4 тф = 24 значения, если выбраны все тф )
  • Стоп Лосс - по предыдущему фракталу, если он на дистанции более среднего значения бара (по хай/лоу)
  • настройка каждого ТФ - вкл / откл
  • добавил трейлинг стоп.
  • сначала ордер переходит в безубыток, а потом если цена уходит на ( средний_Бар*N ) - включается трейлинг.
Ниже вынес настройки. Оптимизация дает хороший результат. Но так же есть и промахи, причины которых мне непонятны.
Принимаются любые предложения.

C-подобный:
Expand Collapse Copy
   input int ma_method           = 1;     // ma_method - 0-3 метод МА
   input int applied_price       = 4;     // applied_price - 0-6 "Применить к" MA
 
   input int MA                  = 5;    // МА
 
   input double start_Lot        = 0.04;  // начальный лот
 
   input int miss                = 1;     // погрешность - допустимо несовпадений в группе 6x4 - 6 пар x 4 тф
   input int Tral                = 2;     // трейлинг-стоп шаг = средний бар (за 24) * N
 
   input bool M5 = true;
   input bool M15 = true;
   input bool H1 = true;
   input bool H4 = true;
 

Вложения

Последнее редактирование:

ZNV

Активный участник
Забыл....

ОПТИМИЗАЦИЯ / ТЕСТИРОВАНИЕ / РАБОТА - ДОЛЖНЫ БЫТЬ НА МИНИМАЛЬНОМ ВЫБРАННОМ ТФ. М5 - ЕСЛИ ОН ВКЛЮЧЕН.


Думаю это логично...
 

kudinoff

Почетный гражданин
Если честно, ничего не понял :)
Объясните попроще, поэтапно...
Код:
Expand Collapse Copy
//====  Расчет мультипликатора лота  =================================================================================
double fLot_Multiple(int magic)
{
  if(Lot_Multiple==True && Lose_Counter > 0)
  {
 
  int startSize = 0;
  double orders[][2];
 
  //----  Учет закрытых ордеров  -------------------------------------------------------------------------------------
  for(int i=0;i<OrdersHistoryTotal();i++)
     {
     if(OrderSelect(i, SELECT_BY_POS ,MODE_HISTORY) == false) continue;
     if(OrderSelect(i, SELECT_BY_POS ,MODE_HISTORY) == true && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)             
       if(OrderType()==OP_BUY || OrderType()==OP_SELL)
       if(OrderCloseTime() > 0)
       {
         startSize+=1;
         ArrayResize(orders, startSize);
         orders[startSize-1][0] = OrderCloseTime();
         orders[startSize-1][1] = OrderProfit()-OrderSwap()-OrderCommission();
       }
                
     }
  ArraySort(orders,WHOLE_ARRAY,0,MODE_ASCEND);
  int ticketsAmount = ArrayRange(orders,0);   
 

  static double maxbal = 0;
  if(AccountBalance()>maxbal) maxbal = AccountBalance(); // если нужен максимальный баланс по итогу или убрать из условий
  if(AccountBalance()<maxbal && ticketsAmount>=4 && (orders[ticketsAmount-1][1]+orders[ticketsAmount-2][1]+orders[ticketsAmount-3][1]+orders[ticketsAmount-4][1] < 0))
  return(Lot_Multiplier);
  }
 
  return(1);
}
Объясните что показывает индикатор, более подробно. Догадаться то одно...

Индикатор считает суммарно разницу между fastMa и slowMA по каждой указанной валюте, потом вычитает из первой валюты вторую.
 

ZNV

Активный участник
Вынужден отказаться. Лучше пусть по копейке капает, чем словить 3-4 стопЛоса а потом не иметь возможности поднять лот.
Но вы мне хорошую идею дали, чем то схожую.
Увеличивать лот после каждых 2-х стопЛоссов а не одного, и держать его 2 тейкПрофита, возможно с последующим медленным спуском...
Хрен знает как код написать, но подумаю))
 

kudinoff

Почетный гражданин
Почему то на истории не работает. В тестере... Он только настоящее время показывает?
Попробуйте этот. Там есть выбор индикатора (индекс, ССИ, РСИ, МАКД, Стох, Моментум).
 

Вложения

  • Like
Реакции: ZNV
Верх