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

currencystrengthmeter.mq5

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

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

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

О программе

CurrencyStrengthMeter — это пользовательский индикатор для платформы MetaTrader 5, который ранжирует 8 основных валют (USD, EUR, GBP, JPY, CHF, AUD, CAD, NZD) по относительной силе и отображает результаты в виде живой панели с горизонтальными полосами на графике. Сила каждой валюты вычисляется на основе среднего процентного изменения всех доступных валютных пар между этими валютами за заданный период и количество баров истории. Индикатор поддерживает гибкую настройку таймфрейма расчёта, глубины анализа (количество баров назад), а также визуальные параметры панели: позицию, размеры, цвета сильных и слабых валют и размер шрифта. При активации опции пересчёт выполняется только при появлении нового бара, что снижает нагрузку на терминал при каждом тике.

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

НастройкаОписание
Timeframe Used to Measure Change (InpCalcTimeframe) Таймфрейм расчёта — Таймфрейм, используемый для измерения изменения цены при расчёте силы валюты.
Lookback (bars back to compare against) (InpLookbackBars) Глубина анализа (баров) — Количество баров назад, используемых для сравнения при расчёте изменения цены.
Recalculate Only on a New Chart Bar (InpUpdateOnNewBarOnly) Пересчёт только на новом баре — Переключатель: пересчитывать показатели только при появлении нового бара на графике.
Panel Corner (InpPanelCorner) Угол панели — Угол графика, в котором размещается панель.
Panel X Distance (pixels) (InpPanelXDistance) Расстояние по X (пикс.) — Горизонтальное расстояние от угла панели до края графика в пикселях.
Panel Y Distance (pixels) (InpPanelYDistance) Расстояние по Y (пикс.) — Вертикальное расстояние от угла панели до края графика в пикселях.
Max Bar Width (pixels, strongest currency) (InpBarMaxWidth) Макс. ширина полосы — Максимальная ширина полосы в пикселях, соответствующая самой сильной валюте.
Bar Height (pixels) (InpBarHeight) Высота полосы — Высота полосы в пикселях для отображения каждой валюты в панели.
Font Size (InpFontSize) Размер шрифта — Размер шрифта текста в панели.
Bar Color — Above-Average Strength (InpStrongColor) Цвет сильной валюты — Цвет полосы для валют с силой выше среднего.
Bar Color — Below-Average Strength (InpWeakColor) Цвет слабой валюты — Цвет полосы для валют со силой ниже среднего.
Text Color (InpPanelTextColor) Цвет текста панели — Цвет текста в панели.
Panel Background Color (InpPanelBgColor) Цвет фона панели — Цвет фона панели.
Получить полный код

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

#property version   "1.00"
#property description "Ranks the 8 major currencies by relative strength, derived from the "
#property description "average percentage change of every available cross pair, and displays "
#property description "them as a live ranked bar panel on the chart."
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
#property strict

input group "=== Strength Calculation ==="
input ENUM_TIMEFRAMES InpCalcTimeframe    = PERIOD_H1;  // Timeframe Used to Measure Change
input int              InpLookbackBars    = 24;          // Lookback (bars back to compare against)
input bool              InpUpdateOnNewBarOnly = true;    // Recalculate Only on a New Chart Bar

input group "=== Panel Layout ==="
input ENUM_BASE_CORNER InpPanelCorner    = CORNER_LEFT_UPPER; // Panel Corner
input int               InpPanelXDistance = 12;   // Panel X Distance (pixels)
input int               InpPanelYDistance = 18;   // Panel Y Distance (pixels)
input int               InpBarMaxWidth    = 100;  // Max Bar Width (pixels, strongest currency)
input int               InpBarHeight      = 14;   // Bar Height (pixels)
input int               InpFontSize       = 8;    // Font Size

input group "=== Panel Colors ==="
input color  InpStrongColor  = clrLime;        // Bar Color — Above-Average Strength
input color  InpWeakColor    = clrRed;         // Bar Color — Below-Average Strength
input color  InpPanelTextColor = clrWhite;     // Text Color
input color  InpPanelBgColor   = C'20,20,20';  // Panel Background Color

#define CURRENCY_COUNT 8
string g_Currencies[CURRENCY_COUNT] = {"USD", "EUR", "GBP", "JPY", "CHF", "AUD", "CAD", "NZD"};

string g_Prefix = "CSM_";

string g_PairName[CURRENCY_COUNT * (CURRENCY_COUNT - 1) / 2];
int    g_PairBaseIdx[CURRENCY_COUNT * (CURRENCY_COUNT - 1) / 2];
int    g_PairQuoteIdx[CURRENCY_COUNT * (CURRENCY_COUNT - 1) / 2];
int    g_PairCount = 0;

double   g_Strength[CURRENCY_COUNT];
datetime g_LastBarTime = 0;

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

void OnDeinit(const int reason)
  {

   ObjectsDeleteAll(0, g_Prefix);
   ChartRedraw(0);
  }

int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
      // код доступен только после оплаты
   }

void BuildPairList()
  {
   g_PairCount = 0;

   for(int i = 0; i < CURRENCY_COUNT; i++)
     {
      for(int j = i + 1; j < CURRENCY_COUNT; j++)
        {
         string pairForward = g_Currencies[i] + g_Currencies[j];
         string pairReverse = g_Currencies[j] + g_Currencies[i];
         string chosen = "";

         if(SymbolInfoInteger(pairForward, SYMBOL_EXIST))
            chosen = pairForward;
         else
            if(SymbolInfoInteger(pairReverse, SYMBOL_EXIST))
               chosen = pairReverse;

         if(chosen == "")
            continue; // this cross is simply not offered by the broker, skip it

         SymbolSelect(chosen, true); // make sure it's in Market Watch so history loads

         g_PairName[g_PairCount]     = chosen;
         g_PairBaseIdx[g_PairCount]  = i;
         g_PairQuoteIdx[g_PairCount] = j;
         g_PairCount++;
        }
     }
  }

void CalculateStrength()
  {
   double sumScore[CURRENCY_COUNT];
   int    countScore[CURRENCY_COUNT];
   ArrayInitialize(sumScore, 0.0);
   ArrayInitialize(countScore, 0);

   for(int p = 0; p < g_PairCount; p++)
     {
      double closeNow  = iClose(g_PairName[p], InpCalcTimeframe, 0);
      double closeBack = iClose(g_PairName[p], InpCalcTimeframe, InpLookbackBars);

      if(closeNow <= 0.0 || closeBack <= 0.0)
         continue; // history not ready yet for this symbol, skip this refresh

      double pctChange = (closeNow - closeBack) / closeBack * 100.0;

      int baseIdx  = g_PairBaseIdx[p];
      int quoteIdx = g_PairQuoteIdx[p];

      sumScore[baseIdx]  += pctChange;
      countScore[baseIdx]++;
      sumScore[quoteIdx] -= pctChange;
      countScore[quoteIdx]++;
     }

   for(int c = 0; c < CURRENCY_COUNT; c++)
      g_Strength[c] = (countScor

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

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

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

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

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

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

Стоимость полного кода
766,10₽ ≈ $9.36