//+-------------------------------------------------------------------------+
//| Index_pair_v22.mq4 |
//| GrayMan77 |
//| ������ RSI �� �������� ����� ���� |
//| ���� ������� �������: |
//| - �.������� |
//| http://www.may.nnov.ru/mak/ |
//| - �.�������� |
//| http://www.umis.ru/clients1/study/trading_school/fc_methods?start=0 |
//| ���� ���������� RSI - akadex |
//| http://www.kroufr.ru/forum/index.php?topic=2692.msg6724;topicseen |
//| ���������� - GrayMan77 |
//| |
//| ��������� ������ ��� ��� ����� USD,EUR,GBP,JPY,CHF! |
//| ----------------------------------------------------------------------- |
//| v1 - ��������� ��������� �� akadex dex_RSIndex.mq4: |
//| ��������� ��������������� ����, IndicatorCounted � |
//| ��������� ����������� ���� (FirstEMA). |
//| |
//| v2 - ���������� �������� ������ ����� ����� ������ |
//| (��� ������� �������������) |
//| |
//| v21 - ��������� ��������� � ����� ����������� |
//| |
//| v22 - ������ �������� - � �������� |
//| |
//+-------------------------------------------------------------------------+
#property copyright "GrayMan77"
#property link ""
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_level1 30
#property indicator_level2 50
#property indicator_level3 70
//#property indicator_width1 2
//#property indicator_minimum 0
//#property indicator_maximum 100
//---- ������� ���������
extern int RSIPeriod=5;
extern int Smooth=5;
extern int PeriodFirstEMA=5; // ��������� ����������� - ������
extern int PriceFirstEMA=6; // ��������� ����������� - ����:
// 0-Close; 1-Open; 2-High; 3-Low; 4-(H+L)/2; 5-(H+L+C)/3; 6-(H+L+C+C)/4.
//---- ������ ����������
double IndexBuffer[],Buffer[],RSIBuffer[];
double IndexBuffer1[],Buffer1[],RSIBuffer1[];
//---- ����������
int BarsMin;
bool Show=false;
//----
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(6);
SetIndexBuffer(0,RSIBuffer);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(1,RSIBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(2,IndexBuffer);
SetIndexBuffer(3,IndexBuffer1);
SetIndexBuffer(4,Buffer);
SetIndexBuffer(5,Buffer1);
IndicatorShortName("Index_pair_Dev_v1: "+Symbol() + "(" + Period() + "): ");
SetIndexLabel(0, StringSubstr(Symbol(),0,3));
SetIndexLabel(1, StringSubstr(Symbol(),3,3));
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit,i;
string S=Symbol();
int counted_bars=IndicatorCounted();
//---- �������� �� ��������� ������
if(counted_bars<0) return(-1);
if(Show==false)
{
if(S=="GBPUSD" || S=="USDCHF" || S=="EURUSD" || S=="USDJPY" || S=="EURGBP" ||
S=="EURCHF" || S=="EURJPY" || S=="GBPCHF" || S=="GBPJPY" || S=="CHFJPY")
Show=true;
}
if(Show==false)
{
Alert("- ERROR! - ��������� �� �������� �� ���� ",S," !!!");
Print("--- ERROR ! --- ��������� �� �������� �� ���� ",S," !!!");
return(-1);
}
//---- ���������� ������������ ���-�� ����� (����� ������������� �������)
if(counted_bars==0)
{
BarsMin=iBars("GBPUSD",NULL);
if(BarsMin>iBars("USDCHF",NULL)) BarsMin=iBars("USDCHF",NULL);
if(BarsMin>iBars("EURUSD",NULL)) BarsMin=iBars("EURUSD",NULL);
if(BarsMin>iBars("USDJPY",NULL)) BarsMin=iBars("USDJPY",NULL);
if(BarsMin>iBars("EURGBP",NULL)) BarsMin=iBars("EURGBP",NULL);
if(BarsMin>iBars("EURCHF",NULL)) BarsMin=iBars("EURCHF",NULL);
if(BarsMin>iBars("EURJPY",NULL)) BarsMin=iBars("EURJPY",NULL);
if(BarsMin>iBars("GBPCHF",NULL)) BarsMin=iBars("GBPCHF",NULL);
if(BarsMin>iBars("GBPJPY",NULL)) BarsMin=iBars("GBPJPY",NULL);
if(BarsMin>iBars("CHFJPY",NULL)) BarsMin=iBars("CHFJPY",NULL);
}
//---- ��������� ����������� ��� ����� ����������
// if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(limit>BarsMin-2) limit=BarsMin-2;
//---- �������� ����
for(i=limit;i>=0;i--)
{
//---- ����� ������ ���� ��������
if (Symbol() == "EURUSD") { IndexBuffer[i]=EUR(i); IndexBuffer1[i]=USD(i); }
if (Symbol() == "EURGBP") { IndexBuffer[i]=EUR(i); IndexBuffer1[i]=GBP(i); }
if (Symbol() == "EURCHF") { IndexBuffer[i]=EUR(i); IndexBuffer1[i]=CHF(i); }
if (Symbol() == "EURJPY") { IndexBuffer[i]=EUR(i); IndexBuffer1[i]=JPY(i); }
if (Symbol() == "GBPUSD") { IndexBuffer[i]=GBP(i); IndexBuffer1[i]=USD(i); }
if (Symbol() == "GBPCHF") { IndexBuffer[i]=GBP(i); IndexBuffer1[i]=CHF(i); }
if (Symbol() == "GBPJPY") { IndexBuffer[i]=GBP(i); IndexBuffer1[i]=JPY(i); }
if (Symbol() == "USDCHF") { IndexBuffer[i]=USD(i); IndexBuffer1[i]=CHF(i); }
if (Symbol() == "USDJPY") { IndexBuffer[i]=USD(i); IndexBuffer1[i]=JPY(i); }
if (Symbol() == "CHFJPY") { IndexBuffer[i]=CHF(i); IndexBuffer1[i]=JPY(i); }
}
//---- ���������� RSI �� ��������
for(i=limit;i>=0;i--)
{
Buffer[i]=iRSIOnArray(IndexBuffer,0,RSIPeriod,i);
Buffer1[i]=iRSIOnArray(IndexBuffer1,0,RSIPeriod,i);
}
//---- ����������� RSI
for(i=limit;i>=0;i--)
{
RSIBuffer[i]=iMAOnArray(Buffer,0,Smooth,0,MODE_EMA,i);
RSIBuffer1[i]=iMAOnArray(Buffer1,0,Smooth,0,MODE_EMA,i);
if(RSIBuffer[i]>100.) RSIBuffer[i]=100.;
if(RSIBuffer1[i]>100.) RSIBuffer1[i]=100.;
}
//----
return(0);
}
//+------------------------------------------------------------------+
double USD(int j)
{
double value;
double GBP_USD=iStdDev("GBPUSD",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double USD_CHF=iStdDev("USDCHF",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double EUR_USD=iStdDev("EURUSD",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double USD_JPY=iStdDev("USDJPY",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
// �������� ��� ���������� ������� �� 0
if(GBP_USD==0) GBP_USD=1.;
if(EUR_USD==0) EUR_USD=1.;
value = MathPow(USD_CHF*USD_JPY/GBP_USD/EUR_USD,0.2);
return(value);
}
//+------------------------------------------------------------------+
double GBP(int j)
{
double value;
double GBP_USD=iStdDev("GBPUSD",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double EUR_GBP=iStdDev("EURGBP",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double GBP_CHF=iStdDev("GBPCHF",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double GBP_JPY=iStdDev("GBPJPY",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
// �������� ��� ���������� ������� �� 0
if(EUR_GBP==0) EUR_GBP=1.;
value = MathPow(GBP_USD*GBP_CHF*GBP_JPY/EUR_GBP,0.2);
return(value);
}
//+------------------------------------------------------------------+
double EUR(int j)
{
double value;
double EUR_USD=iStdDev("EURUSD",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double EUR_GBP=iStdDev("EURGBP",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double EUR_CHF=iStdDev("EURCHF",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double EUR_JPY=iStdDev("EURJPY",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
value = MathPow(EUR_USD*EUR_GBP*EUR_CHF*EUR_JPY,0.2);
return(value);
}
//+------------------------------------------------------------------+
double CHF(int j)
{
double value;
double USD_CHF=iStdDev("USDCHF",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double EUR_CHF=iStdDev("EURCHF",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double GBP_CHF=iStdDev("GBPCHF",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
double CHF_JPY=iStdDev("CHFJPY",NULL,PeriodFirstEMA,MODE_EMA,0,PriceFirstEMA,j);
// �������� ��� ���������� ������� �� 0
if(USD_CHF==0) USD_CHF=1.;
if(EUR_CHF==0) EUR_CHF=1.;
if(GBP_CHF==0) GBP_CHF=1.;
value = MathPow(CHF_JPY/USD_CHF/EUR_CHF/GBP_CHF,0.2);
return(value);
}
//+------------------------------------------------------------------+
double JPY(int j)
{
double value;
double USD_JPY=iMA("USDJPY",NULL,PeriodFirstEMA,0,1,PriceFirstEMA,j);
double EUR_JPY=iMA("EURJPY",NULL,PeriodFirstEMA,0,1,PriceFirstEMA,j);
double GBP_JPY=iMA("GBPJPY",NULL,PeriodFirstEMA,0,1,PriceFirstEMA,j);
double CHF_JPY=iMA("CHFJPY",NULL,PeriodFirstEMA,0,1,PriceFirstEMA,j);
// �������� ��� ���������� ������� �� 0
if(USD_JPY==0) USD_JPY=1.;
if(EUR_JPY==0) EUR_JPY=1.;
if(GBP_JPY==0) GBP_JPY=1.;
if(CHF_JPY==0) CHF_JPY=1.;
value = MathPow(1./USD_JPY/EUR_JPY/GBP_JPY/CHF_JPY,0.2);
return(value);
}
//+------------------------------------------------------------------+