вот такое неприятное открытие получилось у меня.
я попытался построить линейный график фунтобакса в процентах. в екселе форма движения идентична, а вот в МТ не. Господа программисты, в чем ошибка в коде?
P.S. на основе этого алгоритма и строится Cluster analiser. Получается неверно?
//+------------------------------------------------------------------+
//| Clusters_analyser.mq4 |
//| AndreiFX |
//| AndreiFX@mail.ru |
//+------------------------------------------------------------------+
#property copyright "AndreiFX"
#property link "AndreiFX@mail.ru"
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 Red
#property indicator_color2 DarkGreen
#property indicator_color3 DarkBlue
#property indicator_color4 Orange
#property indicator_color5 Coral
#property indicator_color6 SeaGreen
#property indicator_color7 MediumSlateBlue
//Входные параметры
extern bool ОтображатьUSD=true;
extern bool ОтображатьEUR=true;
extern bool ОтображатьGBP=true;
extern bool ОтображатьCHF=true;
extern bool ОтображатьJPY=true;
extern bool ОтображатьCAD=true;
extern bool ОтображатьAUD=true;
//---- buffers
double USD[];
double EUR[];
double GBP[];
double CHF[];
double JPY[];
double CAD[];
double AUD[];
//Вычисляемые кроссы
double
GBPUSD,EURUSD,USDCHF,USDJPY,AUDUSD,USDCAD;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
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");
SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,CAD);
SetIndexLabel(5,"CAD");
SetIndexStyle(6,DRAW_LINE);
SetIndexBuffer(6,AUD);
SetIndexLabel(6,"AUD");
SetIndexStyle(7,DRAW_LINE);
SetIndexEmptyValue(0,0);SetIndexEmptyValue(1,0);SetIndexEmptyValue(2,0);SetIndexEmptyValue(3,0);SetIndexEmptyValue(4,0);SetIndexEmptyValue(5,0);SetIndexEmptyValue(6,0);
//----
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) counted_bars--;
limit=Bars-counted_bars;
//---- основной цикл
for(int i=limit; i>=0; i--)
{
//Защита от деления на ноль///////
if(iClose("GBPUSD",Period(),i)==0||iClose("AUDUSD",Period(),i)==0||iClose("EURUSD",Period(),i)==0||
iClose("USDCHF",Period(),i)==0||iClose("USDJPY",Period(),i)==0) continue;
if(iClose("GBPUSD",Period(),i+1)==0||iClose("AUDUSD",Period(),i+1)==0||iClose("EURUSD",Period(),i+1)==0||
iClose("USDCHF",Period(),i+1)==0||iClose("USDJPY",Period(),i+1)==0) continue;
/////////////////////////////////Вычисляем накопления кроссов для текущего бара////////////////////////////////////////////////////
GBPUSD=100*(iClose("GBPUSD",Period(),i)-iClose("GBPUSD",Period(),i+1))/iClose("GBPUSD",Period(),i+1);
EURUSD=100*(iClose("EURUSD",Period(),i)-iClose("EURUSD",Period(),i+1))/iClose("EURUSD",Period(),i+1);
USDCHF=100*(iClose("USDCHF",Period(),i)-iClose("USDCHF",Period(),i+1))/iClose("USDCHF",Period(),i+1);
USDJPY=100*(iClose("USDJPY",Period(),i)-iClose("USDJPY",Period(),i+1))/iClose("USDJPY",Period(),i+1);
AUDUSD=100*(iClose("AUDUSD",Period(),i)-iClose("AUDUSD",Period(),i+1))/iClose("AUDUSD",Period(),i+1);
USDCAD=100*(iClose("USDCAD",Period(),i)-iClose("USDCAD",Period(),i+1))/iClose("USDCAD",Period(),i+1);
/////////////////////////////////Конец вычисления накоплений////////////////////////////////////////////////////
////////////////////////////////Вычислим индексы валют, на основе накоплений////////////////////////////////////
if(ОтображатьGBP)GBP[i]=GBP[i+1]+GBPUSD;
}
//----
return(0);
}
//+------------------------------------------------------------------+