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

CurrencySlopeStrength

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

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

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

О программе

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

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

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

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

НастройкаОписание
BARS Количество баров — Количество баров, используемых для расчёта индикатора.
gen Общие параметры — Заголовок группы общих параметров.
autoSymbols Автоподбор символов — Переключатель автоматического подбора торговых символов из истории.
symbolsToWeigh Символы для взвешивания — Список символов для взвешивания при ручном режиме подбора.
nonPropFont Шрифт таблицы — Шрифт, используемый для отображения текста в таблице.
showOnlySymbolOnChart Только символы на графике — Переключатель отображения только тех валют, которые присутствуют на текущем графике.
ind Параметры индикатора — Заголовок группы параметров индикатора.
HalfLength Длина полусигнала — Длина полусигнала для расчёта треугольного скользящего среднего (TMA).
Price Тип цены — Тип цены, используемый для расчёта индикатора (по умолчанию PRICE_WEIGHTED).
autoTimeFrame Автоматический таймфрейм — Переключатель автоматического выбора таймфрейма (текущий график) или ручного.
ind_tf Список таймфреймов — Список доступных таймфреймов для ручного выбора.
timeFrame Таймфрейм расчёта — Выбранный таймфрейм для расчёта индикатора при отключённом автоматическом режиме.
ignoreFuture Игнорировать будущие бары — Переключатель учёта будущих баров при расчёте наклона.
showCrossAlerts Показывать перекрёстные сигналы — Переключатель отображения перекрёстных сигналов в таблице.
differenceThreshold Порог разницы — Пороговое значение разницы для отображения линии разницы.
cur Настройка валют — Заголовок группы параметров выбора валют.
USD Отображение USD — Переключатель отображения доллара США (USD) в индикаторе.
EUR Отображение EUR — Переключатель отображения евро (EUR) в индикаторе.
GBP Отображение GBP — Переключатель отображения британского фунта (GBP) в индикаторе.
CHF Отображение CHF — Переключатель отображения швейцарского франка (CHF) в индикаторе.
JPY Отображение JPY — Переключатель отображения японской иены (JPY) в индикаторе.
AUD Отображение AUD — Переключатель отображения австралийского доллара (AUD) в индикаторе.
CAD Отображение CAD — Переключатель отображения канадского доллара (CAD) в индикаторе.
NZD Отображение NZD — Переключатель отображения новозеландского доллара (NZD) в индикаторе.
col Настройка цветов — Заголовок группы параметров цветовой настройки.
Color_USD Цвет USD — Цвет линии для доллара США (USD).
Color_EUR Цвет EUR — Цвет линии для евро (EUR).
Color_GBP Цвет GBP — Цвет линии для британского фунта (GBP).
Color_CHF Цвет CHF — Цвет линии для швейцарского франка (CHF).
Color_JPY Цвет JPY — Цвет линии для японской иены (JPY).
Color_AUD Цвет AUD — Цвет линии для австралийского доллара (AUD).
Color_CAD Цвет CAD — Цвет линии для канадского доллара (CAD).
Color_NZD Цвет NZD — Цвет линии для новозеландского доллара (NZD).
colorWeakCross Цвет слабого перекрёстного сигнала — Цвет перекрёстного сигнала слабой разницы.
colorNormalCross Цвет нормального перекрёстного сигнала — Цвет перекрёстного сигнала нормальной силы.
colorStrongCross Цвет сильного перекрёстного сигнала — Цвет перекрёстного сигнала сильной разницы.
colorDifference Цвет линии разницы — Цвет линии разницы, отображаемой при превышении порогового значения.
Line_Thickness Толщина линий — Толщина линий графиков индикатора.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers    8
#property indicator_levelcolor MediumOrchid

#define version            "v1.0.3.1"
#define EPSILON            0.00000001
#define CURRENCYCOUNT      8

extern int     BARS                 = 500;
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 bool    showOnlySymbolOnChart = true;

extern string  ind                   = "----Indicator inputs----";
extern double  HalfLength            = 20;
extern int     Price                 = PRICE_WEIGHTED;
extern bool    autoTimeFrame         = true;
extern string  ind_tf                = "timeFrame M1,M5,M15,M30,H1,H4,D1,W1,MN";
extern string  timeFrame             = "D1";
extern bool    ignoreFuture          = false;
extern bool    showCrossAlerts       = true;
extern double  differenceThreshold   = 0.8;

extern string  cur                   = "----Currency inputs----";
extern bool    USD                   = true;
extern bool    EUR                   = true;
extern bool    GBP                   = true;
extern bool    CHF                   = true;
extern bool    JPY                   = true;
extern bool    AUD                   = true;
extern bool    CAD                   = true;
extern bool    NZD                   = true;

extern string  col                   = "----Color inputs----";
extern color   Color_USD             = Green;
extern color   Color_EUR             = DeepSkyBlue;
extern color   Color_GBP             = Red;
extern color   Color_CHF             = Chocolate;
extern color   Color_JPY             = FireBrick;
extern color   Color_AUD             = DarkOrange;
extern color   Color_CAD             = Purple;
extern color   Color_NZD             = Teal;
extern color   colorWeakCross        = OrangeRed;
extern color   colorNormalCross      = Gold;
extern color   colorStrongCross      = LimeGreen;
extern color   colorDifference       = 0x303000;
extern int     Line_Thickness        = 2;

string   indicatorName = "CurrencySlopeStrength";
string   shortName;
int      userTimeFrame;
string   almostUniqueIndex;

double   arrUSD[];
double   arrEUR[];
double   arrGBP[];
double   arrCHF[];
double   arrJPY[];
double   arrAUD[];
double   arrCAD[];
double   arrNZD[];

int      symbolCount;
string   symbolNames[];
string   currencyNames[CURRENCYCOUNT]        = { "USD", "EUR", "GBP", "CHF", "JPY", "AUD", "CAD", "NZD" };
double   currencyValues[CURRENCYCOUNT];      // Currency slope strength
double   currencyValuesPrior[CURRENCYCOUNT]; // Currency slope strength prior bar
double   currencyOccurrences[CURRENCYCOUNT]; // Holds the number of occurrences of each currency in symbols
color    currencyColors[CURRENCYCOUNT];

int      verticalShift    = 14;
int      verticalOffset   = 30;
int      horizontalShift  = 100;
int      horizontalOffset = 10;

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, ","); 
      }
   }

   if (showOnlySymbolOnChart)
   {
      symbolCount = ArraySize(symbolNames);
      string tempNames[];
      for (i = 0; i < symbolCount; i++)
      {
         for (int j = 0; j < CURRENCYCOUNT; j++)
         {
            if (StringFind( Symbol(), currencyNames[j] ) == -1)
            {
               break;
            }
            if (StringFind(symbolNames[i], currencyNames[j] ) != -1)
            {  
               size = ArraySize(tempNames);
               ArrayResize(tempNames, size + 1);
               tempNames[size] = symbolNames[i];
               break;
            }
         }
      }
      for (i = 0; i < ArraySize(tempNames); i++)
      {
         ArrayResize(symbolNames, i+1);
         symbolNames[i] = tempNames[i];
      }
   }

   symbolCount = ArraySize(symbolNames);

   for (i = 0; i < symbolCount; i++)
   {
      int currencyIndex = GetCurrencyIndex(StringSubstr(symbolNames[i],0,3));
          currencyOccurrences[currencyIndex]++;

          currencyIndex = GetCurrencyIndex(StringSubstr(symbolNames[i],3,3));
          currencyOccurrences[currencyIndex]++;
   }   

   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;
   } 

}

int GetCurrencyIndex(string currency)
{
   for (int i = 0; i < CURRENCYCOUNT; i++)
   {
      if (currencyNames[i] == currency)
      {
         return(i);
      }   
   }   
   return (-1);
}

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 counted_bars=IndicatorCounted();
   int i,j,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit=MathMin(Bars-1,Bars-counted_bars+HalfLength);
    if(limit>BARS)limit=BARS;

   for ( i = limit; i >= 0; i-- )
   { 

      for (j = 0; j < CURRENCYCOUNT; j++) { SetIndexStyle(j,DRAW_LINE,STYLE_SOLID,Line_Thickness,currencyColors[j]); }   

      int    index;
      double diff = 0.0;

      ArrayInitialize(currencyValues, 0.0); 
      CalculateCurrencySlopeStrength(userTimeFrame,i);

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"USD") != -1)) || (!showOnlySymbolOnChart && USD))        
      {
         arrUSD[i]           = currencyValues[0];
         if (diff ==0) diff += currencyValues[0]; 
         else          diff -= currencyValues[0];
      }

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"EUR") != -1)) || (!showOnlySymbolOnChart && EUR))        
      {
         arrEUR[i]            = currencyValues[1];
         if (diff == 0) diff += currencyValues[1]; 
         else           diff -= currencyValues[1];
      }

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"GBP") != -1)) || (!showOnlySymbolOnChart && GBP))        
      {
         arrGBP[i]            = currencyValues[2];
         if (diff == 0) diff += currencyValues[2]; 
         else           diff -= currencyValues[2];
      }

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"CHF")!= -1)) || (!showOnlySymbolOnChart && CHF))        
      {
         arrCHF[i]            = currencyValues[3];
         if (diff == 0) diff += currencyValues[3];
         else           diff -= currencyValues[3];
      }

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"JPY")!= -1)) || (!showOnlySymbolOnChart && JPY))        
      {
         arrJPY[i]            = currencyValues[4];
         if (diff == 0) diff += currencyValues[4]; 
         else           diff -= currencyValues[4];
      }

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"AUD" )!= -1)) || ( !showOnlySymbolOnChart && AUD ) )        
      {
         arrAUD[i]            = currencyValues[5];
         if (diff == 0) diff += currencyValues[5]; 
         else           diff -= currencyValues[5];
      }

      if ((showOnlySymbolOnChart && (StringFind(Symbol(),"CAD")!= -1)) || (!showOnlySymbolOnChart && CAD))        
      {
         arrCAD[i]            = currencyValues[6];
         if (diff == 0) diff += currencyValues[6]; 
         else           diff -= currencyValues[6];
      }

      if ((showOnlySymbolOnChart && (St

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

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

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

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

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

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

Стоимость полного кода
1 450₽ ≈ $17.72