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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.