← К каталогу
Исходный код · ID 1429

WmiFor

wmifor30_v1.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

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

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

Дополнительно индикатор может отображать торговые сигналы с указанием уровней Take Profit и Stop Loss, а также выводить текстовые подсказки прямо на графике. Встроенная система диагностики позволяет записывать данные расчётов в лог-файл для отладки.

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

Настройки программы

НастройкаОписание
?????????????? ???? ? ??????? ????? (IsTopCorner) Верхний угол — Переключатель размещения информационных меток в верхнем или нижнем углу графика.
???????? ????????? ??????? ? ????? (??? ???????? ?????????? ????????) [1..] (OffsetInBars) Смещение в барах — Количество баров смещения от текущего момента, определяющее точку начала анализа ценовых данных.
??????????? ?? ?????? ??????? (IsOffsetStartFixed) Начальная граница зафиксирована — Переключатель фиксации начальной границы анализируемого сегмента. При активации начальная граница не сдвигается автоматически при поступлении новых баров.
?????????? ?? ????? ??????? (IsOffsetEndFixed) Конечная граница зафиксирована — Переключатель фиксации конечной границы анализируемого сегмента. При активации конечная граница не сдвигается автоматически при поступлении новых баров.
?????? ??????? ? ?????, ??????? ?????? ?? ??????? [3..] (PastInBars) Прошлое в барах — Количество баров прошлого периода, используемого для формирования анализируемого ценового сегмента.
???????? ???????? ? ????? ????-????? [0..] (VarShiftInBars) Сдвиг вариации в барах — Диапазон сдвига в барах, в пределах которого индикатор ищет вариации паттернов при сравнении с текущим сегментом.
?? ??????? ????? ?????? ?????? ??????? [1..] (ForecastInBars) Прогноз в барах — Количество баров, на которые индикатор строит прогнозное смещение. Определяет горизонт прогнозирования ценовых данных.
??????????? ??????? ???????? ? ???? [1..] (MaxAgeInDays) Максимальный возраст в днях — Максимальный возраст в днях исторических данных, которые индикатор рассматривает при поиске подходящих паттернов.
???????????? ??????????? ? ?????? ????????? ? ????????? [0..100] (MaxVarInPercents) Максимальная вариация в процентах — Максимально допустимое отклонение в процентах между найденными паттернами, используемое для фильтации неподходящих альтернатив.
???????????? ????? ????????? ????????? [1..] (MaxAlts) Максимальное количество альтернатив — Максимальное количество альтернативных найденных паттернов, которые индикатор сохраняет для сравнения и прогноза.
?????????? ?? ??????? ??????? (ShowPastAverage) Показать среднее прошлого — Переключатель отображения линии средней цены за прошлый анализируемый период на графике.
?????????? ?? ??????? ??????? (ShowForecastAverage) Показать среднее прогноза — Переключатель отображения средней линии прогнозной облачной зоны на графике.
?????????? ?? ??????????? ??????? ??????? (?????? ???????) (ShowBestPattern) Показать лучший паттерн — Переключатель отображения визуализации наилучшего найденного паттерна на графике, включая уровни открытия, закрытия, максимума и минимума.
?????????? ?? ???????? ????? (ShowTip) Показать подсказки — Переключатель отображения текстовых торговых подсказок и сигналов прямо на графике.
???? ??????? ??????? (IndicatorPastAverageColor) Цвет средней цены прошлого — Цвет линии средней цены за прошлый анализируемый период.
???? ?????? ??????? ????????? (IndicatorCloudColor) Цвет прогнозного облака — Цвет прогнозной облачной зоны, отображающей диапазон возможных значений цены в прогнозном периоде.
???? ?????? ???????? ??????? (IndicatorBestPatternColor) Цвет лучшего паттерна — Цвет отображения визуального представления наилучшего найденного ценового паттерна на графике.
???? ???????????? ?????-?????? ??????? (IndicatorVLinesColor) Цвет вертикальных линий — Цвет вертикальных линий, обозначающих границы анализируемого сегмента на графике.
???? ?????? ???.????? (IndicatorTextColor) Цвет текста — Цвет текстовых подписей и информационных меток, выводимых на график.
???? TakeProfit (IndicatorTakeProfitColor) Цвет уровней Take Profit — Цвет горизонтальных линий Take Profit и Stop Loss, отображаемых на графике при наличии торгового сигнала.
?????? ???.????? ?????????? ?? ?????? ??????? ??????? (XCorner) Позиция X угла — Горизонтальное расстояние в пикселях от выбранного угла графика до размещения информационных меток.
?????? ???.????? ?????????? ?? ??????? ??????? ??????? (YCorner) Позиция Y угла — Вертикальное расстояние в пикселях от выбранного угла графика до размещения информационных меток.
Получить полный код

Поиск по коду файла

#property indicator_chart_window
#property indicator_buffers 8

#property indicator_style1 STYLE_DOT
#property indicator_width1 1
#property indicator_color1 Sienna

#property indicator_style2 STYLE_DOT
#property indicator_width2 1
#property indicator_color2 Sienna

#property indicator_style3 STYLE_SOLID
#property indicator_width3 2
#property indicator_color3 Sienna

#property indicator_style4 STYLE_SOLID
#property indicator_width4 2
#property indicator_color4 DarkKhaki

#property indicator_style5 STYLE_SOLID
#property indicator_width5 3
#property indicator_color5 DodgerBlue

#property indicator_style6 STYLE_SOLID
#property indicator_width6 3
#property indicator_color6 DodgerBlue

#property indicator_style7 STYLE_SOLID
#property indicator_width7 1
#property indicator_color7 DodgerBlue

#property indicator_style8 STYLE_SOLID
#property indicator_width8 1
#property indicator_color8 DodgerBlue

#include <stdlib.mqh>
#include <stderror.mqh>

extern bool IsTopCorner = true; // ?????????????? ???? ? ??????? ?????
extern int OffsetInBars = 1; // ???????? ????????? ??????? ? ????? (??? ???????? ?????????? ????????) [1..]
extern bool IsOffsetStartFixed = false; // ??????????? ?? ?????? ???????
extern bool IsOffsetEndFixed = false; // ?????????? ?? ????? ???????
extern int PastInBars = 12; // ?????? ??????? ? ?????, ??????? ?????? ?? ??????? [3..]
extern int VarShiftInBars = 4; // ???????? ???????? ? ????? ????-????? [0..]
extern int ForecastInBars = 4; // ?? ??????? ????? ?????? ?????? ??????? [1..]
extern int MaxAgeInDays = 365; // ??????????? ??????? ???????? ? ???? [1..]
extern double MaxVarInPercents = 95; // ???????????? ??????????? ? ?????? ????????? ? ????????? [0..100]
extern int MaxAlts = 10; // ???????????? ????? ????????? ????????? [1..]
extern bool ShowPastAverage = true; // ?????????? ?? ??????? ???????
extern bool ShowForecastAverage = true; // ?????????? ?? ??????? ???????
extern bool ShowBestPattern = true; // ?????????? ?? ??????????? ??????? ??????? (?????? ???????)
extern bool ShowTip = true; // ?????????? ?? ???????? ?????
extern color IndicatorPastAverageColor = White; // ???? ??????? ???????
extern color IndicatorCloudColor = White; // ???? ?????? ??????? ?????????
extern color IndicatorBestPatternColor = White; // ???? ?????? ???????? ???????
extern color IndicatorVLinesColor = Aqua; // ???? ???????????? ?????-?????? ???????
extern color IndicatorTextColor = White; // ???? ?????? ???.?????
extern color IndicatorTakeProfitColor = Aqua; // ???? TakeProfit
extern int XCorner = 5; // ?????? ???.????? ?????????? ?? ?????? ??????? ???????
extern int YCorner = 15; // ?????? ???.????? ?????????? ?? ??????? ??????? ???????

string IndicatorName = "WmiFor";
string IndicatorVersion = "3.0";
string IndicatorAuthor = "(w***b*@hotmail.com)";
bool Debug = true;
datetime OffsetStart, OffsetEnd;
bool IsRedraw;
datetime LastRedraw;
double PastAverage[];
double ForecastCloudHigh[];
double ForecastCloudLow[];
double ForecastCloudAverage[];
double ForecastBestPatternOpen[];
double ForecastBestPatternClose[];
double ForecastBestPatternHigh[];
double ForecastBestPatternLow[];

int init()
{
      // код доступен только после оплаты
   }

int deinit()
{
   RemoveOurObjects();

   return (0);
}

int start()
{
      // код доступен только после оплаты
   }

bool IsNewBar()
{
   static datetime prevTime = 0;

   datetime currentTime = iTime(NULL, 0, 0);
   if (prevTime == currentTime)
   {
      return (false);
   }

   prevTime = currentTime;
   return (true);
}

void RemoveOurObjects()
{
   for (int index = 0; index < ObjectsTotal(); index++)
   {
      if (StringFind(ObjectName(index), IndicatorName) == 0)
      {
         ObjectDelete(ObjectName(index));
         index--;
      }
   }
}

void ChangeOffset(int newOffset)
{
   OffsetInBars = newOffset;
   for (int indexIndicator = 0; indexIndicator < 6; indexIndicator++)
   {
      SetIndexShift(indexIndicator, ForecastInBars - OffsetInBars);
   } 
}

double Distance(double value1, double value2)
{
   double value = MathAbs(value1 - value2);
   return (value);
}

double DTWDistance(double& s[], double& t[]) 
{
   int slenght = ArraySize(s);
   int tlenght = ArraySize(t);
   double dtw[100][100];
   int i, j;

   dtw[0, 0] = 0.0;
   for (j = 1; j <= tlenght; j++)
   {
      dtw[0, j] = 1000000.0;
   }

   for (i = 1; i <= slenght; i++)
   {
      dtw[i, 0] = 1000000.0;
   }

   for (i = 1; i <= slenght; i++)
   {
      for (j = 1; j <= tlenght; j++)
      {
         dtw[i, j] = Distance(s[i], t[j]) + MathMin(dtw[i - 1, j], MathMin(dtw[i, j - 1], dtw[i - 1, j - 1]));
      }
   }

   return (dtw[slenght, tlenght]);
}

void ReCalculate()
{
   datetime currentTime = TimeCurrent();
   if ((currentTime - LastRedraw) < 1)
   {
      return;
   }

   LastRedraw = currentTime;
   IsRedraw = false;

   if (Bars < 100)
   {
      return;
   }

   int handleLog;
   if (Debug)
   {
      handleLog = FileOpen(IndicatorName + ".log", FILE_WRITE);
      if (handleLog < 1)
      {
         Print ("handleLog = ", handleLog, ", error = ", GetLastError());
      }
   }

   datetime xtime = iTime(NULL, 0, OffsetInBars);
   datetime minDate = xtime - (MaxAgeInDays * 60 * 60 * 24);
   int baseHour = TimeHour(xtime);
   int baseMinute = TimeMinute(xtime);
   double x[];   
   ArrayResize(x, PastInBars);
   double x0 = iClose(NULL, 0, OffsetInBars);

   if (Debug)
   {
      FileWrite(handleLog, "xtime", TimeToStr(xtime));
      FileWrite(handleLog, "minDate", TimeToStr(minDate));
      FileWrite(handleLog, "baseHour", baseHour);
      FileWrite(handleLog, "baseMinute", baseMinute);  
      FileWrite(handleLog, "x0", x0);
   }

   for (int indexBar = OffsetInBars; indexBar < (OffsetInBars + PastInBars); indexBar++)
   {
      x[indexBar - OffsetInBars] = x0 - iClose(NULL, 0, indexBar);
      if (Debug)
      {
         FileWrite(handleLog, "x", indexBar - OffsetInBars, x[indexBar - OffsetInBars]);
      }
   }

   int foundAlts = 0;
   int iAlt[];
   ArrayResize(iAlt, MaxAlts);
   double dAlt[];
   ArrayResize(dAlt, MaxAlts);

   int patternscount = 0;

   for (int indexShift = ForecastInBars + OffsetInBars + 1; indexShift < Bars; indexShift++)
   {
      datetime ytimebase = iTime(NULL, 0, indexShift);

      if (ytimebase < minDate)
      {
         break;
      }

      if ((indexShift + PastInBars + VarShiftInBars) >= Bars)
      {
     

Показано первые 50% кода (символов: 15829)

Открыть по тарифу

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

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 582,90₽ ≈ $19.35