Не Грааль, просто обычненький такой - Баблокос!!! - страница 236

 

kot287:

Не 16 многовато!

для 4х пар всего 8:

 1  ++++  ++--  +++-  ++-+  

 1  +-++  +---   +-+-    +--+

остальные 8 - тупо зеркалка:

2   ----  --++   ---+   --+-

2  -+--  -+++  -+-+   -++- 

Правильно понимаю строим 8 спредов из 4 пар

1 2 3 4
1 2 -3 -4 -4
1 2 3 -4 2
1 2 -3 4 4
1 -2 3 4 6
1 -2 -3 -4 -8
1 -2 3 -4 -2
1 -2 -3 4 0
1 2 3 4 10

И таким образом раскладываем 35 сочетаний из 7 по 4  

 
sbmill:

Правильно понимаю строим 8 спредов из 4 пар

1234
12-3-4-4
123-42
12-344
1-2346
1-2-3-4-8
1-23-4-2
1-2-340
123410

И таким образом раскладываем 35 сочетаний из 7 по 4  

 

 Нет,имелось ввиду теоретическое кол-во вариантов для перебора направлений.На практике же немного иначе,из 7 по 4 =105 и если мат.метод не зависит от порядка задания входных ФИ - из трех: EGAN,EAGN,ENGA можно взять один любой.В итоге по всем 35!
Файлы:
 
 

Всем привет!

Джокер можно общий вопрос.

Сначала выбираются инструменты и по ним строится и анализируется спред и его эквити (я думаю, что ты используешь этот вариант) или всетаки строятся множество спредов и потом анализируются их эквити, а подходящие идут в работу?

 
Talex:

Сначала выбираются инструменты и по ним строится и анализируется спред и его эквити (я думаю, что ты используешь этот вариант) или всетаки строятся множество спредов и потом анализируются их эквити, а подходящие идут в работу?

В чем разница между этими методами?
 
lob32371:
В чем разница между этими методами?

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

 
Talex:

Всем привет!

Джокер можно общий вопрос.

Сначала выбираются инструменты и по ним строится и анализируется спред и его эквити (я думаю, что ты используешь этот вариант) или всетаки строятся множество спредов и потом анализируются их эквити, а подходящие идут в работу?


Строится множество спредов и весь набор  анализируются. Лучшие по системе уходят в работу.


Пара комментариев к картинке:

Все спреды после нормирования размещаются в одной полуплоскости ( положительной ). Те кто нормировались в отрицательной зоне - переворачиваются:

Точка начала движения спредов у всех одинаковая ( т.е. ноль ). Как бы вы не старались получить рыночно нейтральные спреды, у Вас это не получится. Рынок всегда движется. Спред всего лишь позволяет убрать непредсказуемые колебания рынка и уменьшить просадку торговых операций.

I - Высота середины канала нормирования относительно нуля характеризует силу движения спреда ( слабые отбрасываются ). Мы же зарабатывать собираемся а не бамбук курить месяцами? ))

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

III - зона принятия решения ( вот тут я намеренно ничего рассказывать не буду ).


Помоему я уже все что можно рассказал и показал.

( я кст раскрутил и систему Александра, но ее использовать ни в коем случае не буду. Он работает внутри канала, а это бомба... )

Всем у кого остались теоретические вопросы, просьба сначала изучить огромный вклад в теорию господина hrenfx, а именно его наработки в recycle2


Дерзайте...

 

Джокер, благодарю за ответ.

P.S. В ветке действительно многое выложено, осталось только самому все обдумать/проверить/понять, мне кажется только ленивый не найдет здесь что-нибудь для себя. 

 
kot287:
 Нет,имелось ввиду теоретическое кол-во вариантов для перебора направлений.На практике же немного иначе,из 7 по 4 =105 и если мат.метод не зависит от порядка задания входных ФИ - из трех: EGAN,EAGN,ENGA можно взять один любой.В итоге по всем 35!

... Чет вы господа в начале теории встряли. Держите либу:

GetSpreadsCount - возвращает количество возможных спредов для спреда указанной длины ( кол-ва инструментов )

GetSpreadByIndex ( string Symbols, int SpreadLength, int SpreadIndex ) - возвращает спред по его индексу ( где индекс лежит в диапазоне от 1 до GetSpreadsCount )

Перебирая в цикле GetSpreadByIndex получите все возможные спреды без повторений.

Чтобы мозг не взрывали, комбинаторика спредов вычисляется через двоичную систему исчисления.

Успехов...

Файлы:
 

А я сделал перебором, не так красиво, но работает...

struct smassiv2 {
   string m[];           // обертка для 2-х мерного массива
};

//+----------------------------------------------------------------------------------+
//| GetAllCombinationsSpread                                                         |
//| Функция находит все сочетания спредов                                            |
//| (in) instr[] - массив инструментов из которых составляем спред                   |
//| (in) ns - число инструментов в спреде                                            |
//| (in/out) spread[] - массив спредов                                               |
//| (out) - количество найденных спредов                                             |
//+----------------------------------------------------------------------------------+
int GetAllCombinationsSpread(string &instr[],int ns,smassiv2 &spread[]) {
   int i,j,g,k,ncomb,count,n[];
//+------------------------------------
   count=ArraySize(instr);
   ncomb=Combination(count,ns);
   ArrayResize(spread,ncomb);
   for(i=0;i<ncomb;i++) {
      ArrayResize(spread[i].m,ns);
   }
   ns=ArraySize(spread[0].m);
   ArrayResize(n,ns);
   ArrayInitialize(n,(count-1));
   for(i=1;i<ns;i++) {
      n[i]=n[i-1]-1;
   }
   for(i=0;i<ncomb;i++) {
      if(n[ns-1]<0) {
         k=1;
         for(j=(ns-2);j>=0;j--) {
            n[j]--;
            if(n[j]>=k) {
               for(g=(j+1);g<ns;g++) {
                  n[g]=n[g-1]-1;
               }
               break;
            }
            k++;
         }
      } 
      for(j=0;j<ns;j++) {
         spread[i].m[j]=instr[n[j]];
      }
      n[ns-1]--;
   }
   return(ncomb);
}
//+----------------------------------------------------------------------------------+
//+----------------------------------------------------------------------------------+
//| Combination(int m,int n)                                                         |
//| Функция находит количество сочетаний, составленные из m элементов по n элементов |
//| (in) m - число элементов всего                                                   |
//| (in) n - число элементов в сочетании                                             |
//| (out) - число комбинаций                                                         |
//+----------------------------------------------------------------------------------+
int Combination(int m,int n) {
//Print(__FUNCTION__);
   if(m<n) return(0);
   if((n==0)||(n==m))
      return(1);
   else
      return(Combination(m-1,n-1)+Combination(m-1,n));
}
//+----------------------------------------------------------------------------------+
Причина обращения: