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