Complex_Common_v1
Download scriptThis script is a specialized financial analysis tool designed for the MetaTrader 4 platform. Its primary purpose is to calculate and visualize the relative strength of five major currencies—the US Dollar (USD), Euro (EUR), British Pound (GBP), Swiss Franc (CHF), and Japanese Yen (JPY)—simultaneously in a single dedicated window.
Core Functionality
Instead of looking at just one currency pair at a time, this tool aggregates data from multiple pairs to determine which major currencies are gaining or losing momentum. It treats each currency as a "player" and calculates its performance against the others.
How the Logic Works:
- Dynamic Timeframe Adaptation: The script is intelligent enough to recognize the timeframe you are currently viewing (e.g., 1-minute, Hourly, Daily, or Monthly charts). It automatically adjusts its internal calculation settings to match that timeframe, ensuring that the data remains relevant whether you are performing a quick scalping analysis or a long-term investment review.
- Moving Average Comparison: The logic relies on "Moving Averages" (a common method for smoothing out price fluctuations). For every currency, the script compares a "Slow" moving average against a "Fast" moving average.
- If the Fast average is higher than the Slow average, it indicates upward momentum.
- If it is lower, it indicates downward momentum.
- Currency Correlation Math: To find the true strength of a single currency (like the Euro), the script doesn't just look at one pair; it combines the performance of several pairs involving that currency. For example, to calculate the strength of the Euro, it processes the price action of EUR/USD, EUR/GBP, EUR/CHF, and EUR/JPY.
- Weighted Normalization: Because different currencies have different decimal values (some have two decimals, others have four), the script applies specific multipliers to ensure that every currency is measured on a fair and equal scale. This prevents one currency from appearing "stronger" simply because of its price point.
Visual Output
The script produces five distinct lines on your chart, each representing one of the core currencies:
- USD (US Dollar)
- EUR (Euro)
- GBP (British Pound)
- CHF (Swiss Franc)
- JPY (Japanese Yen)
By observing these lines, a trader can see at a glance which currencies are currently leading the market and which are lagging. It allows you to identify "strong" currencies to buy and "weak" currencies to sell by seeing which lines are trending upward or downward relative to the rest of the group.
//+------------------------------------------------------------------+
//| Complex_Common.mq4 |
//| SemSemFX@rambler.ru |
//| http://onix-trade.net/forum/index.php?showtopic=107 |
//| http://forum.alpari-idc.ru/viewtopic.php?t=46916 |
//+------------------------------------------------------------------+
#property copyright "SemSemFX@rambler.ru"
#property link "http://onix-trade.net/forum/index.php?showtopic=107"
#property link "http://forum.alpari-idc.ru/viewtopic.php?t=46916"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Green
#property indicator_color2 Navy
#property indicator_color3 Red
#property indicator_color4 Black
#property indicator_color5 Maroon
//---- buffers
double USD[];
double EUR[];
double GBP[];
double CHF[];
double JPY[];
//---- parameters
// for monthly
int mn_per = 12;
int mn_fast = 3;
// for weekly
int w_per = 9;
int w_fast = 3;
// for daily
int d_per = 5;
int d_fast = 3;
// for H4
int h4_per = 12;
int h4_fast = 2;
// for H1
int h1_per = 24;
int h1_fast = 8;
// for M30
int m30_per = 16;
int m30_fast = 2;
// for M15
int m15_per = 16;
int m15_fast = 4;
// for M5
int m5_per = 12;
int m5_fast = 3;
// for M1
int m1_per = 30;
int m1_fast = 10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorShortName("USD:Çåëåíûé; EUR:Ñèíèé; GBP:Êðàñíûé; CHF:×åðíûé; JPY:Êîðè÷íåâûé");
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,USD);
SetIndexLabel(0, "USD");
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,EUR);
SetIndexLabel(1, "EUR");
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,GBP);
SetIndexLabel(2, "GBP");
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,CHF);
SetIndexLabel(3, "CHF");
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,JPY);
SetIndexLabel(4, "JPY");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- ïðîâåðêà íà âîçìîæíûå îøèáêè
if(counted_bars<0) return(-1);
//---- ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí
if(counted_bars>0) counted_bars-=10;
limit=Bars-counted_bars;
//---- îñíîâíîé öèêë
int Price=6;
int Mode=3;
int per1,per2;
switch(Period())
{
case 1: per1 = m1_per; per2 = m1_fast; break;
case 5: per1 = m5_per; per2 = m5_fast; break;
case 15: per1 = m15_per;per2 = m15_fast; break;
case 30: per1 = m30_per;per2 = m30_fast; break;
case 60: per1 = h1_per; per2 = h1_fast; break;
case 240: per1 = h4_per; per2 = h4_fast; break;
case 1440: per1 = d_per; per2 = d_fast; break;
case 10080: per1 = w_per; per2 = w_fast; break;
case 43200: per1 = mn_per; per2 = mn_fast; break;
}
for(int i=0; i<limit; i++)
{
USD[i]=
(iMA("EURUSD",0,per1,0,Mode,Price,i)-
iMA("EURUSD",0,per2,0,Mode,Price,i))*10000
+
(iMA("GBPUSD",0,per1,0,Mode,Price,i)-
iMA("GBPUSD",0,per2,0,Mode,Price,i))*10000
+
(iMA("USDCHF",0,per2,0,Mode,Price,i)-
iMA("USDCHF",0,per1,0,Mode,Price,i))*10000
+
(iMA("USDJPY",0,per2,0,Mode,Price,i)-
iMA("USDJPY",0,per1,0,Mode,Price,i))*100
;
EUR[i]=
(iMA("EURUSD",0,per2,0,Mode,Price,i)-
iMA("EURUSD",0,per1,0,Mode,Price,i))*10000
+
(iMA("EURGBP",0,per2,0,Mode,Price,i)-
iMA("EURGBP",0,per1,0,Mode,Price,i))*10000
+
(iMA("EURCHF",0,per2,0,Mode,Price,i)-
iMA("EURCHF",0,per1,0,Mode,Price,i))*10000
+
(iMA("EURJPY",0,per2,0,Mode,Price,i)-
iMA("EURJPY",0,per1,0,Mode,Price,i))*100
;
GBP[i]=
(iMA("GBPUSD",0,per2,0,Mode,Price,i)-
iMA("GBPUSD",0,per1,0,Mode,Price,i))*10000
+
(iMA("EURGBP",0,per1,0,Mode,Price,i)-
iMA("EURGBP",0,per2,0,Mode,Price,i))*10000
+
(iMA("GBPCHF",0,per2,0,Mode,Price,i)-
iMA("GBPCHF",0,per1,0,Mode,Price,i))*10000
+
(iMA("GBPJPY",0,per2,0,Mode,Price,i)-
iMA("GBPJPY",0,per1,0,Mode,Price,i))*100
;
CHF[i]=
(iMA("USDCHF",0,per1,0,Mode,Price,i)-
iMA("USDCHF",0,per2,0,Mode,Price,i))*10000
+
(iMA("EURCHF",0,per1,0,Mode,Price,i)-
iMA("EURCHF",0,per2,0,Mode,Price,i))*10000
+
(iMA("GBPCHF",0,per1,0,Mode,Price,i)-
iMA("GBPCHF",0,per2,0,Mode,Price,i))*10000
+
(iMA("CHFJPY",0,per2,0,Mode,Price,i)-
iMA("CHFJPY",0,per1,0,Mode,Price,i))*100
;
JPY[i]=
(iMA("USDJPY",0,per1,0,Mode,Price,i)-
iMA("USDJPY",0,per2,0,Mode,Price,i))*100
+
(iMA("EURJPY",0,per1,0,Mode,Price,i)-
iMA("EURJPY",0,per2,0,Mode,Price,i))*100
+
(iMA("GBPJPY",0,per1,0,Mode,Price,i)-
iMA("GBPJPY",0,per2,0,Mode,Price,i))*100
+
(iMA("CHFJPY",0,per1,0,Mode,Price,i)-
iMA("CHFJPY",0,per2,0,Mode,Price,i))*100
;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments