currencystrengthmeter.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «currencystrengthmeter.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
CurrencyStrengthMeter — это пользовательский индикатор для платформы MetaTrader 5, который ранжирует 8 основных валют (USD, EUR, GBP, JPY, CHF, AUD, CAD, NZD) по относительной силе и отображает результаты в виде живой панели с горизонтальными полосами на графике. Сила каждой валюты вычисляется на основе среднего процентного изменения всех доступных валютных пар между этими валютами за заданный период и количество баров истории. Индикатор поддерживает гибкую настройку таймфрейма расчёта, глубины анализа (количество баров назад), а также визуальные параметры панели: позицию, размеры, цвета сильных и слабых валют и размер шрифта. При активации опции пересчёт выполняется только при появлении нового бара, что снижает нагрузку на терминал при каждом тике.
Настройки программы
| Настройка | Описание |
|---|---|
| Timeframe Used to Measure Change (InpCalcTimeframe) | Таймфрейм расчёта — Таймфрейм, используемый для измерения изменения цены при расчёте силы валюты. |
| Lookback (bars back to compare against) (InpLookbackBars) | Глубина анализа (баров) — Количество баров назад, используемых для сравнения при расчёте изменения цены. |
| Recalculate Only on a New Chart Bar (InpUpdateOnNewBarOnly) | Пересчёт только на новом баре — Переключатель: пересчитывать показатели только при появлении нового бара на графике. |
| Panel Corner (InpPanelCorner) | Угол панели — Угол графика, в котором размещается панель. |
| Panel X Distance (pixels) (InpPanelXDistance) | Расстояние по X (пикс.) — Горизонтальное расстояние от угла панели до края графика в пикселях. |
| Panel Y Distance (pixels) (InpPanelYDistance) | Расстояние по Y (пикс.) — Вертикальное расстояние от угла панели до края графика в пикселях. |
| Max Bar Width (pixels, strongest currency) (InpBarMaxWidth) | Макс. ширина полосы — Максимальная ширина полосы в пикселях, соответствующая самой сильной валюте. |
| Bar Height (pixels) (InpBarHeight) | Высота полосы — Высота полосы в пикселях для отображения каждой валюты в панели. |
| Font Size (InpFontSize) | Размер шрифта — Размер шрифта текста в панели. |
| Bar Color — Above-Average Strength (InpStrongColor) | Цвет сильной валюты — Цвет полосы для валют с силой выше среднего. |
| Bar Color — Below-Average Strength (InpWeakColor) | Цвет слабой валюты — Цвет полосы для валют со силой ниже среднего. |
| Text Color (InpPanelTextColor) | Цвет текста панели — Цвет текста в панели. |
| Panel Background Color (InpPanelBgColor) | Цвет фона панели — Цвет фона панели. |
Поиск по коду файла
#property version "1.00"
#property description "Ranks the 8 major currencies by relative strength, derived from the "
#property description "average percentage change of every available cross pair, and displays "
#property description "them as a live ranked bar panel on the chart."
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
#property strict
input group "=== Strength Calculation ==="
input ENUM_TIMEFRAMES InpCalcTimeframe = PERIOD_H1; // Timeframe Used to Measure Change
input int InpLookbackBars = 24; // Lookback (bars back to compare against)
input bool InpUpdateOnNewBarOnly = true; // Recalculate Only on a New Chart Bar
input group "=== Panel Layout ==="
input ENUM_BASE_CORNER InpPanelCorner = CORNER_LEFT_UPPER; // Panel Corner
input int InpPanelXDistance = 12; // Panel X Distance (pixels)
input int InpPanelYDistance = 18; // Panel Y Distance (pixels)
input int InpBarMaxWidth = 100; // Max Bar Width (pixels, strongest currency)
input int InpBarHeight = 14; // Bar Height (pixels)
input int InpFontSize = 8; // Font Size
input group "=== Panel Colors ==="
input color InpStrongColor = clrLime; // Bar Color — Above-Average Strength
input color InpWeakColor = clrRed; // Bar Color — Below-Average Strength
input color InpPanelTextColor = clrWhite; // Text Color
input color InpPanelBgColor = C'20,20,20'; // Panel Background Color
#define CURRENCY_COUNT 8
string g_Currencies[CURRENCY_COUNT] = {"USD", "EUR", "GBP", "JPY", "CHF", "AUD", "CAD", "NZD"};
string g_Prefix = "CSM_";
string g_PairName[CURRENCY_COUNT * (CURRENCY_COUNT - 1) / 2];
int g_PairBaseIdx[CURRENCY_COUNT * (CURRENCY_COUNT - 1) / 2];
int g_PairQuoteIdx[CURRENCY_COUNT * (CURRENCY_COUNT - 1) / 2];
int g_PairCount = 0;
double g_Strength[CURRENCY_COUNT];
datetime g_LastBarTime = 0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0, g_Prefix);
ChartRedraw(0);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// код доступен только после оплаты
}
void BuildPairList()
{
g_PairCount = 0;
for(int i = 0; i < CURRENCY_COUNT; i++)
{
for(int j = i + 1; j < CURRENCY_COUNT; j++)
{
string pairForward = g_Currencies[i] + g_Currencies[j];
string pairReverse = g_Currencies[j] + g_Currencies[i];
string chosen = "";
if(SymbolInfoInteger(pairForward, SYMBOL_EXIST))
chosen = pairForward;
else
if(SymbolInfoInteger(pairReverse, SYMBOL_EXIST))
chosen = pairReverse;
if(chosen == "")
continue; // this cross is simply not offered by the broker, skip it
SymbolSelect(chosen, true); // make sure it's in Market Watch so history loads
g_PairName[g_PairCount] = chosen;
g_PairBaseIdx[g_PairCount] = i;
g_PairQuoteIdx[g_PairCount] = j;
g_PairCount++;
}
}
}
void CalculateStrength()
{
double sumScore[CURRENCY_COUNT];
int countScore[CURRENCY_COUNT];
ArrayInitialize(sumScore, 0.0);
ArrayInitialize(countScore, 0);
for(int p = 0; p < g_PairCount; p++)
{
double closeNow = iClose(g_PairName[p], InpCalcTimeframe, 0);
double closeBack = iClose(g_PairName[p], InpCalcTimeframe, InpLookbackBars);
if(closeNow <= 0.0 || closeBack <= 0.0)
continue; // history not ready yet for this symbol, skip this refresh
double pctChange = (closeNow - closeBack) / closeBack * 100.0;
int baseIdx = g_PairBaseIdx[p];
int quoteIdx = g_PairQuoteIdx[p];
sumScore[baseIdx] += pctChange;
countScore[baseIdx]++;
sumScore[quoteIdx] -= pctChange;
countScore[quoteIdx]++;
}
for(int c = 0; c < CURRENCY_COUNT; c++)
g_Strength[c] = (countScorПоказано первые 50% кода (символов: 7661)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.