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

SlopeValues

!000slopevalues@fxsignalspot.mq4
Вы автор или правообладатель?

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

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

О программе

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

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

Индикатор поддерживает настройку отображаемых символов, таймфрейма, цветов для различных диапазонов значений и шрифта. Встроена обработка воскресных свечей для корректной работы с некоторыми брокерами. Расчёт основан на взвешенных скользящих средних и нормализации через усреднённый истинный диапазон.

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

НастройкаОписание
gen Общие настройки — Текстовый параметр для разделения блока общих настроек.
autoSymbols Автоматические символы — Автоматически определяет список символов из истории брокера при выключенном ручном режиме.
symbolsToWeigh Символы для отображения — Список символов для отображения в таблице (при выключенном автоматическом режиме).
nonPropFont Шрифт таблицы — Шрифт, используемый для отображения текста в таблице.
fontSize Размер шрифта — Размер шрифта текста в таблице.
ind Настройки индикатора — Текстовый параметр для разделения блока настроек индикатора.
autoTimeFrame Автоматический таймфрейм — Автоматически использовать текущий таймфрейм графика вместо заданного вручную.
ind_tf Список таймфреймов — Список доступных таймфреймов для ручного выбора.
timeFrame Таймфрейм — Вручную выбранный таймфрейм для расчёта наклона (используется при выключенном автоматическом режиме).
dir Направление опорных уровней — Описание направления приоритетов опорных уровней: 0 — следовать порядку, 1 — по возрастанию, 2 — по убыванию.
showPivotOrder Показывать порядок опорных уровней — Отображать порядок приоритетов опорных уровней рядом с каждым символом.
pivotDirection Направление сортировки опорных уровней — Направление сортировки опорных уровней: 0 — следовать порядку наклона, 1 — по возрастанию, 2 — по убыванию.
showTrendIcon Показывать стрелки тренда — Отображать стрелки тренда рядом со значениями наклона.
showLowerTimeFrame Показывать нижележащий таймфрейм — Отображать маркеры наклона на нижележащем таймфрейме.
slopeLevel1 Уровень наклона 1 — Первый пороговый уровень наклона для разделения символов на столбцы.
slopeLevel2 Уровень наклона 2 — Второй пороговый уровень наклона для разделения символов на столбцы.
addSundayToMonday Добавить воскресенье к понедельнику — Включает корректировку расчётов для воскресных свечей (сдвиг к понедельнику).
col Настройка цвета — Текстовый параметр для настройки цветовой схемы.
headerColor Цвет заголовков — Цвет заголовков столбцов таблицы.
bodyColor Цвет тела таблицы — Цвет основного текста значений наклона в таблице.
slopeOverLevel2Color Цвет наклона выше уровня 2 — Цвет значений наклона выше второго порогового уровня.
slopeOverLevel1Color Цвет наклона выше уровня 1 — Цвет значений наклона выше первого порогового уровня.
slopeOver0Color Цвет наклона выше нуля — Цвет значений наклона выше нуля.
slopeUnder0Color Цвет наклона ниже нуля — Цвет значений наклона ниже нуля, но выше первого порога.
slopeUnderLevel1Color Цвет наклона ниже уровня 1 — Цвет значений наклона ниже первого порогового уровня.
slopeUnderLevel2Color Цвет наклона ниже уровня 2 — Цвет значений наклона ниже второго порогового уровня.
Very dark green (slopeLowerTFOver4Color) Цвет маркера нижнего ТФ — выше нормы — Цвет маркера при сильном положительном наклоне на нижележащем таймфрейме.
Very dark green (slopeLowerTFUnder4Color) Цвет маркера нижнего ТФ — ниже нормы — Цвет маркера при сильном отрицательном наклоне на нижележащем таймфрейме.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_minimum 0.0
#property indicator_maximum 0.1

#define version            "v1.0.6"

#define EPSILON            0.00000001
#define CURRENCYCOUNT      8
#define COLUMNCOUNT        6

extern string  gen               = "----General inputs----";
extern bool    autoSymbols       = false;
extern string  symbolsToWeigh    = "GBPNZD,EURNZD,GBPAUD,GBPCAD,GBPJPY,GBPCHF,CADJPY,EURCAD,EURAUD,USDCHF,GBPUSD,EURJPY,NZDJPY,AUDCHF,AUDJPY,USDJPY,EURUSD,NZDCHF,CADCHF,AUDNZD,NZDUSD,CHFJPY,AUDCAD,USDCAD,NZDCAD,AUDUSD,EURCHF,EURGBP";

extern string  nonPropFont       = "Lucida Console";
extern int     fontSize          = 9;

extern string  ind               = "----Indicator inputs----";
extern bool    autoTimeFrame     = true;
extern string  ind_tf            = "timeFrame M1,M5,M15,M30,H1,H4,D1,W1,MN";
extern string  timeFrame         = "D1";
extern string  dir               = "Pivot direction: 0=follow order, 1=ascending, 2=descending";
extern bool    showPivotOrder    = true;
extern int     pivotDirection    = 2;
extern bool    showTrendIcon     = true;
extern bool    showLowerTimeFrame= true;
extern double  slopeLevel1       = 0.4;
extern double  slopeLevel2       = 0.8;
extern bool    addSundayToMonday = true;

extern string  col                     = "----Colo(u)rs----";
extern color   headerColor             = Yellow;
extern color   bodyColor               = Gold;
extern color   slopeOverLevel2Color    = Lime;
extern color   slopeOverLevel1Color    = Green;
extern color   slopeOver0Color         = Teal;
extern color   slopeUnder0Color        = HotPink;
extern color   slopeUnderLevel1Color   = DeepPink;
extern color   slopeUnderLevel2Color   = Red;
extern color   slopeLowerTFOver4Color  = 0x006000; // Very dark green
extern color   slopeLowerTFUnder4Color = 0x000060; // Very dark green

string indicatorName = "SlopeValues";
double mapBuffer[];
string shortName;
int userTimeFrame;
string almostUniqueIndex;
bool  sundayCandlesDetected;                          
double candleTime;

int symbolCount;
string symbolNames[];
double symbolValues[][7];                    // 0: Slope, 1: Index counter currency, 2: Index base currency, 3: Original index
double symbolValuesTemp[][7];                // 4: daily pivot, 5: weekly pivot, 6: monthly pivot
string pivotNames[4] = { "p", "D", "W", "M" };
double pivotValues[4][2];                          

int verticalShift = 14;
int verticalOffset = 30;
int verticalOffsetHeader = -8;
int verticalOffsetPivot = 10;
int horizontalShift = 100;
int horizontalOffset = 10;
int horizontalOffsetTrend = 85;
int horizontalOffsetHeader = 32;

int row[CURRENCYCOUNT];

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

int initSymbols()
{
   int i;
   string symbolExtraChars = StringSubstr(Symbol(), 6, 4);

   symbolsToWeigh = StringTrimLeft(symbolsToWeigh);
   symbolsToWeigh = StringTrimRight(symbolsToWeigh);

   if (StringSubstr(symbolsToWeigh, StringLen(symbolsToWeigh) - 1) != ",")
   {
      symbolsToWeigh = StringConcatenate(symbolsToWeigh, ",");   
   }   

   if ( autoSymbols )
   {
      createSymbolNamesArray();
   }
   else
   {
      i = StringFind(symbolsToWeigh, ","); 
      while (i != -1)
      {

         int size = ArraySize(symbolNames);
         ArrayResize(symbolNames, size + 1);

         symbolNames[size] = StringConcatenate(StringSubstr(symbolsToWeigh, 0, i), symbolExtraChars);

         symbolsToWeigh = StringSubstr(symbolsToWeigh, i + 1);
         i = StringFind(symbolsToWeigh, ","); 
      }
   }

   symbolCount = ArraySize(symbolNames);
   ArrayResize(symbolValues, symbolCount);
   ArrayResize(symbolValuesTemp, symbolCount);

   for ( i = 0; i < symbolCount; i++ )   
   {
      symbolValues[i][3] = i;
   }

   userTimeFrame = PERIOD_D1;
   if ( autoTimeFrame )
   {
      userTimeFrame = Period();
   }
   else
   {   
		if ( timeFrame == "M1" )       userTimeFrame = PERIOD_M1;
		else if ( timeFrame == "M5" )  userTimeFrame = PERIOD_M5;
		else if ( timeFrame == "M15" ) userTimeFrame = PERIOD_M15;
		else if ( timeFrame == "M30" ) userTimeFrame = PERIOD_M30;
		else if ( timeFrame == "H1" )  userTimeFrame = PERIOD_H1;
		else if ( timeFrame == "H4" )  userTimeFrame = PERIOD_H4;
		else if ( timeFrame == "D1" )  userTimeFrame = PERIOD_D1;
		else if ( timeFrame == "W1" )  userTimeFrame = PERIOD_W1;
		else if ( timeFrame == "MN" )  userTimeFrame = PERIOD_MN1;
	}
}

void createSymbolNamesArray()
{
   int hFileName = FileOpenHistory ("symbols.raw", FILE_BIN|FILE_READ );
   int recordCount = FileSize ( hFileName ) / 1936;
   int counter = 0;
   for ( int i = 0; i < recordCount; i++ )
   {
      string tempSymbol = StringTrimLeft ( StringTrimRight ( FileReadString ( hFileName, 12 ) ) );
      if ( MarketInfo ( tempSymbol, MODE_BID ) > 0 && MarketInfo ( tempSymbol, MODE_TRADEALLOWED ) )
      {
         ArrayResize( symbolNames, counter + 1 );
         symbolNames[counter] = tempSymbol;
         counter++;
      }
      FileSeek( hFileName, 1924, SEEK_CUR );
   }
   FileClose( hFileName );
   return ( 0 );
}

int deinit()
{
   int windex = WindowFind ( shortName );
   if ( windex > 0 )
   {
      ObjectsDeleteAll ( windex );
   }   

   return(0);
}

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

   int i;
   int index;
   int windex = WindowFind ( shortName );
   string objectName;
   string showText;

   for ( i = 0; i < CURRENCYCOUNT; i++ )
   {

      row[i] = 0;
   }

   ArrayInitialize(symbolValuesTemp, 0.0);
   ArrayCopy(symbolValuesTemp, symbolValues);

   for ( i = 0; i < symbolCount; i++)
   {

      index = symbolValuesTemp[i][3];
      symbolValuesTemp[i][0] = GetSlope(symbolNames[index], userTimeFrame, 0);
   }

   ArraySort(symbolValuesTemp, WHOLE_ARRAY, 0, MODE_DESCEND);

   for ( i = 0; i < COLUMNCOUNT; i++ )
   {
      objectName = "SV_" + almostUniqueIndex + "_obj_header_" + i;
      if ( ObjectFind ( objectName ) == -1 )
      {
         if ( ObjectCreate ( objectName, OBJ_LABEL, windex, 0, 0 ) )
         {
            ObjectSet ( objectName, OBJPROP_XDISTANCE, horizontalShift * i + horizontalOffset );
            ObjectSet ( objectName, OBJPROP_YDISTANCE, verticalOffset + verticalOffsetHeader );
         }
      }
      switch ( i )
      {
         case 0: showText = "> " + DoubleToStr(slopeLevel2, 1); break;
         case 1: showText = "> " + DoubleToStr(slopeLevel1, 1); break;
         case 2: showText = "Ranging"; break;
         case 3: showText = ""; break;
         case 4: showText = "< " + DoubleToStr(-slopeLevel1, 1); break;
         case 5: showText = "< " + DoubleToStr(-slopeLevel2, 1); break;
      }   
      ObjectSetText ( objectName, showText, fontSize + 3, nonPropFont, headerColor );
   }

   for ( i = 0; i < symbolCount; i++ )
   {

      index = symbolValuesTemp[i][3];

      int col = 0;
      if ( symbolValuesTemp[i][0] > slopeLevel2 ) col = 0;
      else if ( symbolValuesTemp[i][0] > slopeLevel1 ) col = 1;
      else if ( symbolValuesTemp[i][0] > 0 ) col = 2;
      else if ( symbolValuesTemp[i][0] > -slopeLevel1 ) col = 3;
      else if ( symbolValuesTemp[i][0] > -slopeLevel2 ) col = 4;
      else col = 5;

      objectName = "SV_" + almostUniqueIndex + "_obj_" + row[col] + "_" + col;
      if ( ObjectFind ( objectName ) == -1 )
      {
         if ( ObjectCreate ( objectName, OBJ_LABEL, windex, 0, 0 ) )
         {
            ObjectSet ( objectName, OBJPROP_XDISTANCE, horizontalShift * col + horizontalOffset );
            ObjectSet ( objectName, OBJPROP_YDISTANCE, verticalShift * (row[col] + 1) + verticalOffset );
         }
      }

      showText = StringSubstr(symbolNames[index], 0, 6);
      showText = showText + RightAlign(DoubleToStr(symbolValuesTemp[i][0], 2), 6);

      color showColor = slopeUnderLevel2Color;
      if ( symbolValuesTemp[i]

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

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

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

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

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

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

Стоимость полного кода
1 467,80₽ ≈ $17.94