Скачать MetaTrader 5

Механическая Торговая Система "Вилка Чувашова"

27 декабря 2010, 10:16
Genkov
17
6 203

"Нас интересует последние значения для построения линий тренда"
Т. Демарк

Введение

Станислав Чувашов предложил методику своей разработки по торговле на Forex при помощи построения паттерна "Вилка Чувашова". В этой методике подход к анализу состояния рынка перекликается с подходом Т. Демарка к построению линий тренда для последнего ближайшего отрезка времени.


1. Метод построения линий паттерна "Вилка Чувашова"

Для построения "Вилки Чувашова" используется индикатор фракталов. На графике цен (смотри рис ниже) через два соседних фрактала 1 и 2 строим основную трендовую линию. Основную трендовую линию вверх строим по нижним фракталам, основную трендовую линию вниз строим по верхним фракталам.


Рисунок 1. Построение "Вилки Чувашова"

Ждем, когда сформируется такой же фрактал 3 после пробоя основной трендовой линии в противоположную сторону тренда. Ответвленная линия, построенная через 2 и 3 фракталы в составе с основной трендовой линией, образуют паттерн "Вилка Чувашова" (ВЧ). Так ее назвал автор Станислав Чувашов.

Основное требование к паттерну ВЧ заключается в том, чтобы ответвленная линия вилки была направлена в сторону тренда. Когда пробиваются ответвленные линии, возникают сигналы: для продажи при тренде вверх и для покупки при тренде вниз. Стратегию и методику торгов от автора можно посмотреть и послушать, скачав видео урок по Вилке Чувашова.

Ниже приведена последовательность формирования паттернов "Вилки Чувашова" на примере 4-х последовательных дней пары EURUSD на таймфрейме H1.


Рисунок 2. Возникновение паттерна "Вилка Чувашова"

На рис. 2 показано возникновение паттерн "Вилка Чувашова" (ВЧ) на восходящем тренде, предвещая окончание тренда или перехода его во флет. МТС открыла позицию SELL.


Рисунок 3. Новый паттерн ВЧ

Спустя 6 баров (часов) образовался новый паттерн ВЧ с более широкой вилкой (рис. 3), подтверждающий предыдущий паттерн о развороте тренда или перехода тренда во флет.

МТС закрыла предыдущую позицию SELL по Take Profit, и открыла позицию SELL снова по условиям паттерна ВЧ.


Рисунок 4. Подтверждение паттерна ВЧ

Рис. 4 показывает, что тренд, развернувшись 11 октября, пошел вниз, что подтверждает в начале 12 октября паттерн ВЧ, направленный вниз.

В середине дня наметился новый разворот тренда, т.к. цена направилась в сторону ответвленной линии ВЧ. После пересечения ответвленной линии можно закрывать имеющуюся позицию SELL, и открывать позицию BUY.


Рисунок 5. Разворот тренда

Как видно из рис. 5, оставшуюся часть дня 12 октября и начало дня 13 октября, тренд продолжал двигаться вверх. Ближе к середине дня образовался паттерн ВЧ, направленный вверх. В середине дня 13 октября снова наметился разворот тренда вниз. После сформировавшихся сигналов МТС закроет позицию BUY и откроет позицию SELL.

Приведенную выше последовательность формирования паттернов можно проследить на тестере стратегий в визуальном режиме лучше на медленной скорости, протестировав прикрепленный файл в качестве эксперта Vilka_Ch_Demo20.mq4.


Рисунок 6. Торговые сигналы

Рисунок 6 дает некоторые пояснения по сигналам открытия и закрытия позиций.


2. Некоторые особенности предлагаемого кода "Вилка Чувашова" в MQL4

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

Обратите внимание на то, что некоторые переменные внесены в главную функцию программы Start(), поскольку эти переменные должны обнуляться при каждом тике.

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

for (i=M;i<=N;i++)
    {//цикл
    if(High[i]>High[i+1] && High[i]>High[i+2] && High[i]>High[i-1] && High[i]>High[i-2])
     {//фрактал
      VFN++;           // счетчик найденного фрактала.
      // ------------------------------------------------------------+
      if(VFN==1)       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        {// f1
           Vnf1=i;        // запоминаем номер Max бара найденного фрактала.
           VMF1=High[i];  // запоминаем Max значение 1-ого найденного фрактала.
           tim1=iTime(NULL,0,i);        // запоминаем время 1-ой опорной точки.
         }//-f1
    // --------------------------------------------------------------+
    if(VFN==2)        // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      {// f2
          VMF2=High[i];    // запоминаем Max значение 2-ого найденного фрактала.
          if(VMF2>VMF1)    // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              Vnf2=i;      // запоминаем номер Max бара найденного фрактала.
              tim2=iTime(NULL,0,i);      // запомним время 2-ой опорной точки.
            }
       }//-f2
    // --------------------------------------------------------------+
    if(VFN==3)       // если 3-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     {//f3
          VMF3=High[i];    // запоминаем Max значение 3-ого найденного фрактала.
          if(VMF3>VMF2)    // если Max значение 3-го фрактала больше 2-го,
           {
             Vnf3=i;       // запоминаем номер Max бара 3-го фрактала.
             tim3=iTime(NULL,0,i);       // запоминаем время 3-ей опорной точки.
           }
     }//-f3
// ------------------------------------------------------------------+
   if(VFN==3) break; // найдены все три фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    }//-фрактал                      
   }//-цикл 

В приведенном выше цикле мы нашли три фрактала, расположенных заданным образом, т.е. 1-й фрактал ниже 2-го фрактала, и 2-ой фрактал ниже 3-го фрактала. 3-й и 2-ой фракталы являются опорными точками для построения Основой трендовой линии и они являются базовыми для построения.

А вот 3-й фрактал (его значение) может оказаться ниже проекции основной трендовой линии на вертикале 1-го фрактала:


Рисунок 7. Уточнение положения реперной точки

Поэтому вводится ряд операторов, уточняющих положение 3-ей реперной точки в соответствии с требованиями к построению паттерна.

// ------------------------------------------------------------------+
   if(VMF3>VMF2 && VMF2>VMF1)
    {  
    // Определим  - находится ли ответвлённая (2) трендовая линия ВЫШЕ проекции, ОСНОВНОЙ(1)
    // трендовой линии? Для этого вычислим значение цены проекции ОСНОВНОЙ(1) трендовой линии
    // на вертикале Max значения 1-го фрактала:
    V_down1=((VMF3-VMF2)/(Vnf3-Vnf2));      // скорости падения ОСНОВНОЙ(1) трендовой линии за 1 бар.
    PricePrL1_1f=VMF2-(Vnf2-Vnf1)*V_down1;  // цена проекции ОСНОВНОЙ(1) трендовой линии на вертикале 1-го фрактала.
    // теперь сравним цену значения 1-го фрактала с ценой проекции ОСНОВНОЙ(1) трендовой линии
    // на вертикале Max значения 1-го фрактала, и если Max цена 1-го фрактала Выше цены проекции
    // ОСНОВНОЙ(1) трендовой линии на этом же фрактале, условия построения Вилки Чувашова выполнены.     
    if(VMF1>PricePrL1_1f) // если сформировался паттерн для открытия поз Buy
     {     
     V_down2=((VMF2-VMF1)/(Vnf2-Vnf1));  // скорости падения ответвленной трендовой линии за 1 бар.     
     PricePrL2_1b=VMF1-Vnf1*V_down2;     // цена проекции Ответвлённой(2) трендовой линии на текущем 1-ом БАРЕ.
     PricePrL1_1b=VMF2-Vnf1*V_down1;     // цена проекции ОСНОВНОЙ(1) трендовой линии на текущем 1-ом БАРЕ
     // запоминаем, что сформировался паттерн для открытия поз Buy
     patternBuy = true; patternSell = false;   // сформировался паттерн для открытия поз Buy
     // наносим значки и линии "Вилки Чувашова"
     DelLine(); CreateLine(); CreateArrow();   // наносим значки и линии, удалив предыдущие 
     }
    }
// ==================================================================+    

Если Max цена 1-го фрактала выше цены проекции ОСНОВНОЙ(1) трендовой линии на этом же фрактале, условия построения Вилки Чувашова выполнены.

Таким образом, определился паттерн "Вилка Чувашова" - наносим на график значки и линии паттерна.

Теперь надо определиться с условиями и параметрами открываемой позиции BUY.

// ==================================================================+    
//                    Открытие позиций BUY                           +
// ==================================================================+
   if(OrdersTotal()<1) // играем в одну(или 2..3..и т.д.) позицию  
    {  //откр поз
// ------------------------------------------------------------------+
   if(patternBuy==true)
    { //patternBuy

Лучше если размах цен за последние 25 баров будет составлять не менее 50 пунктов.

Введем дополнительные условия, например, скользящая средняя периода 150 за последние 24 или 48 часов (баров) будет направлена вниз и цена будет отстоять от этого индикатора на 89 пунктов ниже (уровень Fibo89s).

 // 1-ое доп.усл - размах цен за последние 25 баров не менее 50 пунктов.
if((High[iHighest(Symbol(),Period(),MODE_HIGH,25,0)]-Low[iLowest(Symbol(),Period(),MODE_LOW,25,0)])>=50*Point)
  {// размах цен
   // 2-ое доп.усл. например, если цена находится ниже 89 pip под уровнем Ma144 (MA среднее 12 в квадрате) 
  if(Bid<Ma144_1-89*Point &&       // цена находится ниже Fibo89s   
     (Ma144_1-Ma144_48)<0)         // наклон Ma144 отрицательный
   {//2-ое доп.усл. 

Основным условием открытия позиции является пересечение ценой ответвленной линии паттерна.

Например, оно может быть таким:

if((High[1]>PricePrL2_1b ||                     // Max свечи выше ответвленной проекции 1-го Бара
    Close[1]>PricePrL2_1b ||                    // любая свеча закрылась выше проекции 1-го Бара
    (Open[1]<Close[1] && Close[1]>PricePrL2_1b) ||   // белая свеча  пересекла проекцию 1-го Бара
    Bid>PricePrL2_1b) && Bid<PricePrL2_1b+3*Point)   // не выше 3 pip от цены проекции 1-го Бара
   {

Далее определяемся с параметрами Stop Loss и Take Profit. Устанавливаем Stop Loss, равное минимальному значению цены на отрезке от "0" бара до бара 2-го фрактала т.е. на Low уровне первого фрактала. Устанавливаем Take Profit на уровне 0,6 от размаха цен.

Поскольку в этой стратегии применяется отслеживание по нижним фракталам восходящего тренда, то Take Profit установим больше двух минимальных размахов цен, например 100 - 200 пунктов.

  {// открытие поз Buy.
   // Вычислим Stop Loss как Min значение цены на отрезке от "0" бара до бара 2-го фрактала.
  SL_B=(Bid-Low[iLowest(Symbol(),Period(),MODE_LOW,Vnf2,0)])/Point;
  if(SL_B<StopLevel) SL_B=Bid-(StopLevel+2)*Point; // если SL_B окажется меньше StopLevel
  TP_B=120;
  Print("  OP_BUY вилка Чувашова","  VMF1 = ",VMF1," < ",PricePrH1_1f);
  Op_Buy_Ch();
  return;
  }//- открытие поз Buy. 

Поиск последних трех следующих друг за другом фракталов, лежащих на восходящем тренде, определяем по нижним фракталам, и весь процесс для построения паттерна, направленного вверх производим, применяя логику построения паттерна на нисходящем тренде.

//+=======================================================================+
//                   переходим к ОТСЛЕЖИВАНИЮ открытых позиций            +
//+=======================================================================+
for (i=OrdersTotal()-1; i>=0; i--)        // цикл выбора ордеров  BUY 
   {//цикл выбора поз. Buy
  if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {Print("Ошибка выбора ордера = ", GetLastError()); }
   if(OrderType()==OP_BUY )                // если открыт ордер в покупку
    { //2-тип_Buy

Если была открыта позиция BUY и сформировался паттерн, направленный вверх, это значит, что цена развернулась и пошла вниз. Надо закрывать позицию BUY.

//+=======================================================================+
//|  Условия для закрытия позиций BUY                                     +
//+=======================================================================+
   if(patternSell==true)         //  появился паттерн для открытия поз.Sell
    { 
    Print(" закрытие поз BUY - т.к. сформировался противоположный паттерн");
    Close_B_Ch();         // закрываем поз. SELL
    return; 
    }
//+=======================================================================+

Переходим к модификации открытой позиции BUY.

Процесс модификации разбит на 3-и этапа. На первом этапе подтягиваем Stop Loss поближе к "безубытку". На втором этапе при достижении ценой положительного профита, равного или большего размера Stop Loss, передвигаем Stop Loss на уровень открытия позиции.

// ---- 1-ый этап ------------------------------------------ 1-ый этап ---+
    // Первый этап модификации заключается в том, при достижении ценой профита 
    // равного величины Stop Loss, переставляем SL_B на величину 1/2 от Stop Loss
    // т.е. ближе к уровню открытия позиции. (+StopLevel)
   if((Bid-OrderOpenPrice())>SL_B*Point        // если разность между ценой и величиной открытия >SL_B
       && OrderStopLoss()<OrderOpenPrice())    // и если Stop Loss ниже открытия позиции.
    {// модиф-1
     OrderModify(OrderTicket(),                // # ордера. 
     OrderOpenPrice(),                         // цена открытия. 
     OrderStopLoss()+(SL_B/2)*Point,           // Новое значение Stop Loss.
     OrderTakeProfit()+1*Point,                // Новое значение Take Profit.
     0,                                        // Время истечения отложенного ордера.
     Red);                                     // Цвет значков (черточек) модификации.
     return;
    }//-модиф-1
// --- end 1-ый этап -----------------------------------------------------+
// ---- 2-ый этап ------------------------------------------ 2-ый этап ---+
    // Второй этап модификации заключается в том, при повторном достижении ценой профита 
    // равного величины Stop Loss, переставляем SL_B на уровень 
    // без убытка т.е. на уровень открытия поз.(+StopLevel). 
   if((Bid-OrderOpenPrice())>SL_B*Point        // если разность между ценой и величиной открытия позици >SL_B
       && OrderStopLoss()<OrderOpenPrice())    // и если Stop Loss ниже открытия позиции
    {// модиф-1
     OrderModify(OrderTicket(),                // # ордера. 
     OrderOpenPrice(),                         // цена открытия. 
     OrderStopLoss()+(SL_B+StopLevel)*Point,   // Новое значение Stop Loss. 
     OrderTakeProfit()+1*Point,                // Новое значение Take Profit.
     0,                                        // Время истечения отложенного ордера.
     Magenta);                                 // Цвет значков (черточек) модификации.
     return;
    }//-модиф-1
// --- end 2-ой этап -----------------------------------------------------+

При достижении ценой величины профита, большего чем 1.5 размера Stop Loss, подтянем SL_B на ближайший нижний фрактал, который должен быть выше предыдущего Stop Loss и далее по повышающимся нижним фракталам восходящего тренда.

// ---- 3-ой этап --------------------------------------- 3-ой этап ------+
   //  При достижении ценой величины профита большего размера Stop Loss, чем в 1.5 раза
   //  подтянем SL_B на ближайший нижний фрактал, который должен быть выше предыдущего Stop Loss
   if((Bid-OrderOpenPrice())>=(SL_B+SL_B/2)*Point  // если разность между ценой и величиной открытия >SL_B+SL_B/2
       && OrderStopLoss()>=OrderOpenPrice())       // и если Stop Loss уже на уровне безубытка. 
    {// модиф2
     // передвигаем SL_B на уровень ближайшего нижнего фрактала,
     // для этого найдем ближайший нижний фрактал:
    for (k=3;k<=24;k++)
     {//цикл-М
     if(Low[k]<Low[k+1] && Low[k]<Low[k+2] && Low[k]<Low[k-1] && Low[k]<Low[k-2])
      { // фрактал Low
      VlFl_L=Low[k];             // Min значение ближайшего фрактала
     if(VlFl_L>OrderStopLoss())  // фрактал, который должен быть выше предыдущего Stop Loss
      {// фрактал выше SL_B
      tim1_L=iTime(NULL,0,k);    // Время этого фрактала
         ///  string Time1_L=TimeToStr(tim1_L,TIME_DATE|TIME_MINUTES); 
         ///  Print("  Модиф-2 ====== ","  Фрактал = ","Frak"+k,VlFl_L,"  время = ",Time1_L);           
      // переносим Stop Loss на уровень Min значения сформированного нижнего фрактала 
      OrderModify(OrderTicket(),            // # ордера 
      OrderOpenPrice(),                     // цена открытия 
      VlFl_L+2*Point,                       // Новое значение Stop Loss. // в безубытке
      OrderTakeProfit()+1*Point,            // Новое значение Take Profit.
      0,                                    // Время истечения отложенного ордера.
      Aqua);                                // Цвет стрелок модификации Stop Loss и/или Take Profit
      if(VlFl_L!=0)  break;                 // если фрактал найден - выходим из цикла
      return;
// --- end 3-й этап ------------------------------------------------------+


Заключение

Краткий вывод таков, что при тестировании у разных брокеров представленная пробная МТС дает примерно одинаковые положительные результаты.

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

Рекомендации можно посмотреть в бесплатных 17-ти уроках Станислава Чувашова.

Пояснения к прикрепленным файлам:

  • Vilka_Ch_Demo20.mq4 – демонстрационная версия
  • Vilka_Ch_ExpertH1_v1.mq4 – МТС "Вилка Чувашова"
  • Vilka_Ch_MTC_v1.mq4 – МТС "Вилка Чувашова" без комментариев в тексте программы
Прикрепленные файлы |
Vilka_Ch_Demo20.mq4 (32.98 KB)
Vilka_Ch_MTC_v1.mq4 (16.46 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (17)
Alexandr
Alexandr | 1 мар 2011 в 01:09
как бе параметры надо подбирать
MQL4 Comments
MQL4 Comments | 12 мар 2011 в 11:28

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


P.S. Огромная просьба более не вікладівать єтот мусор.

Genkov
Genkov | 22 мар 2011 в 19:37
morearti:

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


P.S. Огромная просьба более не вікладівать єтот мусор.


Наверное Вы правы. Методика нахождения реперных точек у Демарка несколько другая.

В связи с этим у меня к Вам большая просьба - посмотреть индикатор http://articles.mql4.com/ru/articles/1507, опубликованный на этом же форуме. Как по Вашему мнению, так ли я понял принцип формации и выбор свечей для реперных точек по Демарку? Буду Вам искренне признателен за замечания и критику. Геннадий.

Иван Корнилов
Иван Корнилов | 10 июн 2011 в 16:26
надо было назвать статью Магическая Торговая Система "Вилка Чувашова" ))
MQL4 Comments
MQL4 Comments | 9 июл 2011 в 13:36

Недавно и Вилка и Треугольник Чувашова прекрасно отработали на евре - предлагаю к рассмотрению Вилку Чувашова:

Тут у меня есть некоторые дополнения к Вилке Чувашова и своё видение Вилки в рынке...

Как видно из картинки - все линии я рисую по кончикам фракталов, а не по теням свечей, как у С.Чувашова.

Эта маленькая хитрость отсеивает большинство мелких шумов на рынке.

Синяя линия - 1-й тренд.

Красная линия - 2-й тренд и она же - 1-й звоночек ослабления бычьего тренда, после которого жду касания цены Синей линии.

Это произошло на следующей свече после 5-го фрактала вверх - закрыл позу вверх, и наблюдаю, что дальше...

Уже следующая свеча (свеча А) пробивает линию поддержки обоих трендов и даёт нам фрактал вниз для построения ВЧ.

Однако свеча А не удовлетворяет классику пробоя линий поддержки(сопротивления) - её тело не вышло полностью за пределы

синей линии - рынок продолжил неуверенный подъём и самые верхние две свечи дают нам свечную комбинацию "Харами",

подтверждающую перекупленность, разворот бычьего тренда - это 2-й звоночек - продаём минимальным лотом на открытии свечи В.

Свеча В пробивает синюю линию всем своим телом и тенями - это соответствует классике пробоя - доливаем позу ещё одним минимальным лотом.

На свече С получаем второй фрактал вниз (после построения Вилки Чувашова) - он и будет нам опорным для построения линий поддержки

тренда вниз, если таковой начнётся (что и произошло в данном случае). От кончика любого из 6-ти верхних фракталов, выдохшегося тренда вверх, тянем линию к опорному фракталу - получаем будующие линии поддержки, из них, последняя (фрактал №6 на опорный фрактал) - самая экстримальная :)

Далее свеча Д пробивает Вилку Чувашова и линию поддержки 2-го тренда, но не всем телом - ждём подтверждения пробоя.

Это случилось на свече Е - на её закрытии (1.4482) доливаем уже открытую позу вниз удвоением.

На свече G сформировалась свечная комбинация "Голова-Плечи" (интервал свеч между F и G), и к тому же с понижением правого плеча

- это усиливает всё вышесказанное и доливаем позу вниз ещё одним удвоением (если позволяет капитал :)

Вроде бы всё - ан нет !

Этот разворот бычьего тренда прекрасно отработал и Треугольник Чувашова ...

Удачной всем торговли !

Оригинал текста: http://fx-technics.ucoz.ru/forum/2-1-1#1

Работа по Накоплению/Распределению и что из этого можно сделать Работа по Накоплению/Распределению и что из этого можно сделать

Индикатор Накопления/Распределения A/D имеет одно интересное свойство - пробитие трендовой линии, построенной на графике данного индикатора с определённой долей вероятности говорит нам о скором пробое линии тренда на графике цены. Данная статья будет полезна и интересна людям, только начинающим программировать на MQL4, поэтому я постарался изложить всё в наиболее доступной для понимания форме и использовать самые простые конструкции построения кода.

Повышаем качество кода при помощи Unit Test Повышаем качество кода при помощи Unit Test

Даже в простых программах зачастую находятся ошибки, которые кажутся невероятными. "Как я такое написал?" - первое, что приходит в голову, когда мы обнаруживаем такую ошибку. Второй вопрос - "Как этого избежать?" - приходит гораздо реже. Нельзя написать 100%-ный безошибочный код, особенно в больших проектах, но можно использовать технологии для их своевременного обнаружения. Статья рассказывает о том, как можно повысить качество MQL4 кода, применяя распространенную методику модульного тестирования (Unit Testing).

К вопросу о методах технического анализа и прогнозирования рынков К вопросу о методах технического анализа и прогнозирования рынков

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

Механическая торговая система "Треугольник Чувашова" Механическая торговая система "Треугольник Чувашова"

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