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

Global Macro Soros

global macro soros.mq5
Вы автор или правообладатель?

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

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

О программе

«Global Macro Soros» — это пользовательский индикатор для MetaTrader 5, отображающий аналитическую оценку макро-тренда (Macro Bias Score) в отдельном окне графика. Индикатор сравнивает быстрые и медленные скользящие средние на трёх таймфреймах (H4, D1, W1) и формирует суммарный баланс от -3 до +3.

На основе соотношения быстрой и медленной скользящей средней на каждом таймфрейме определяется направление тренда (UP, DOWN или FLAT), а их сумма отображается в виде цветного гистограммного графика. Положительные значения указывают на бычий макро-байас, отрицательные — на медвежий.

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

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

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

НастройкаОписание
InpFastMA Период быстрой скользящей средней, используемой для определения направления тренда на каждом макро-таймфрейме.
InpSlowMA Период медленной скользящей средней, используемой для определения направления тренда на каждом макро-таймфрейме.
InpMAMethod Метод скользящей средней, применяемый на всех трёх таймфреймах.
InpTF_Short Краткосрочный макро-таймфрейм для анализа тренда.
InpTF_Medium Среднесрочный макро-таймфрейм для анализа тренда.
InpTF_Long Долгосрочный макро-таймфрейм для анализа тренда.
InpShowDashboard Переключатель отображения панели дашборда на графике.
InpPanelX Горизонтальное смещение панели в пикселях.
InpPanelY Вертикальное смещение панели в пикселях.
InpFontSize Размер текста информационной панели (от 6 до 24).
Получить полный код

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

#property version   "2.10"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_minimum -3.5
#property indicator_maximum  3.5
#property strict

#property indicator_label1  "Macro Bias Score"
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  clrGray, clrLimeGreen, clrRed
#property indicator_width1  3

input group "=== Trend Detection ==="
input int             InpFastMA   = 50;         // Fast MA period used to detect trend direction
input int             InpSlowMA   = 200;        // Slow MA period used to detect trend direction
input ENUM_MA_METHOD  InpMAMethod = MODE_EMA;    // MA method applied on all three timeframes

input group "=== Macro Timeframes ==="
input ENUM_TIMEFRAMES InpTF_Short  = PERIOD_H4;  // Short-term macro timeframe
input ENUM_TIMEFRAMES InpTF_Medium = PERIOD_D1;  // Medium-term macro timeframe
input ENUM_TIMEFRAMES InpTF_Long   = PERIOD_W1;  // Long-term macro timeframe

input group "=== Dashboard ==="
input bool InpShowDashboard = true;   // Show the on-chart dashboard panel
input int  InpPanelX        = 10;     // Panel horizontal offset (pixels)
input int  InpPanelY        = 10;     // Panel vertical offset (pixels)
input int  InpFontSize      = 9;      // Panel text size (6-24)

double ScoreBuf[];
double ColorBuf[];

int hFastShort  = INVALID_HANDLE, hSlowShort  = INVALID_HANDLE;
int hFastMedium = INVALID_HANDLE, hSlowMedium = INVALID_HANDLE;
int hFastLong   = INVALID_HANDLE, hSlowLong   = INVALID_HANDLE;

int    g_lastShortDir  = 0;
int    g_lastMediumDir = 0;
int    g_lastLongDir   = 0;
double g_lastScore     = 0;

string   PFX          = "GMS_INST_";
string   SHORT_NAME    = "GlobalMacro_Soros_INSTITUTIONAL";
int      g_subWin       = -1;     // this indicator's subwindow index, resolved lazily
bool     g_dashboardOn  = false;
double   g_scale         = 1.0;    // panel geometry scale (from InpFontSize + DPI)
double   g_dpiScale      = 1.0;

string g_c_short="", g_c_medium="", g_c_long="", g_c_score="", g_c_time="";

bool ValidateInputs()
  {
   if(InpFastMA < 1)
     { Print("ERROR: InpFastMA must be >= 1."); return(false); }
   if(InpSlowMA < 2)
     { Print("ERROR: InpSlowMA must be >= 2."); return(false); }
   if(InpFastMA >= InpSlowMA)
     { Print("ERROR: InpFastMA must be smaller than InpSlowMA."); return(false); }
   if(InpFontSize < 6 || InpFontSize > 24)
     { Print("ERROR: InpFontSize must be between 6 and 24."); return(false); }
   return(true);
  }

double ComputeScale()
  {
   long dpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI);
   if(dpi <= 0) dpi = 96;
   g_dpiScale = (double)dpi / 96.0;
   if(g_dpiScale < 0.6) g_dpiScale = 0.6;
   if(g_dpiScale > 2.5) g_dpiScale = 2.5;

   double s = ((double)InpFontSize / 9.0) * g_dpiScale;
   if(s < 0.5) s = 0.5;
   if(s > 3.0) s = 3.0;
   return(s);
  }

int SX(double baseVal) { int v = (int)MathRound(baseVal * g_scale); return(v < 1 ? 1 : v); }
int FontPt() { int v = (int)MathRound(InpFontSize * g_dpiScale); if(v < 5) v = 5; if(v > 72) v = 72; return(v); }

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

void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0, PFX);

   if(hFastShort  != INVALID_HANDLE) { IndicatorRelease(hFastShort);  hFastShort  = INVALID_HANDLE; }
   if(hSlowShort  != INVALID_HANDLE) { IndicatorRelease(hSlowShort);  hSlowShort  = INVALID_HANDLE; }
   if(hFastMedium != INVALID_HANDLE) { IndicatorRelease(hFastMedium); hFastMedium = INVALID_HANDLE; }
   if(hSlowMedium != INVALID_HANDLE) { IndicatorRelease(hSlowMedium); hSlowMedium = INVALID_HANDLE; }
   if(hFastLong   != INVALID_HANDLE) { IndicatorRelease(hFastLong);   hFastLong   = INVALID_HANDLE; }
   if(hSlowLong   != INVALID_HANDLE) { IndicatorRelease(hSlowLong);   hSlowLong   = INVALID_HANDLE; }
  }

bool GetTrendDirection(int fastHandle, int slowHandle, int &outDir)
  {
   double fastVal[1], slowVal[1];
   if(CopyBuffer(fastHandle, 0, 0, 1, fastVal) <= 0) return(false);
   if(CopyBuffer(slowHandle, 0, 0, 1, slowVal) <= 0) return(false);
   if(fastVal[0] > slowVal[0]) outDir = 1;
   else if(fastVal[0] < slowVal[0]) outDir = -1;
   else outDir = 0;
   return(true);
  }

int FindSubWindow()
  {
   int winTotal = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL);
   for(int w = 0; w < winTotal; w++)
     {
      int total = ChartIndicatorsTotal(0, w);
      for(int k = 0; k < total; k++)
        {
         if(ChartInd

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

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

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

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

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

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

Стоимость полного кода
942,50₽ ≈ $11.52