← К каталогу
Исходный код · ID 2901

strengthmeter_wsuffix-mod2.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор рассчитывает и отображает аналитические данные о силе валютных пар на графике в отдельном окне. В основе расчёта лежат соотношения цен открытия и закрытия для набора валют, заданных пользователем. Результаты отрисовываются в виде линейных и столбчатых диаграмм с возможностью отображения рекомендуемых пар.

Индикатор поддерживает автоматическое определение суффиксов символов, фильтрацию отображаемых пар и настройку временного периода. Доступны уведомления в виде всплывающих окон и звуковых сигналов при изменении рекомендуемых пар с заданным минимальным интервалом.

Набор настраиваемых параметров включает списки валют, цветов графиков, частоту оповещений и режим обновления. Индикатор работает в режиме условного обновления по заданному флагу, без перерисовки при каждом тике по умолчанию.

Получить полный код

Поиск по коду файла

#property indicator_separate_window
#property indicator_buffers 8

#define X_BARSPACING		22
#define Y_BARSPACING		1
#define BAR_STR				"I"
#define BAR_ANGLE			90
#define X_BASELINE0			0
#define X_BASELINE1			200
#define X_BASELINE2			500
#define X_CUROFF			0
#define X_DIVOFF			-5
#define Y_BASELINE0			70
#define Y_BASELINE1			70
#define Y_BASELINE2			85
#define Y_BASELINE3			135
#define Y_BASELINE4			138
#define FTSIZE_BAR			13
#define FTSIZE_CUR			7
#define FTSIZE_SYM			6
#define SCALE				10000
#define PIXEL_SCALE			0.5
#define SUGCHT_HEIGHT		40
#define LINECHTHEIGHT0		50
#define LINECHTHEIGHT1		90

#define MAX					100
#define MIN					0
#property indicator_maximum	MAX
#property indicator_minimum	MIN

extern string	Currencies		= "EUR,USD,GBP,JPY,CHF,CAD,AUD,NZD";
extern string	CurrDisplay		= "1,1,1,1,1,1,1,1";

extern bool    AutoSuffixAdjust  = true; //try to get symbol suffix automatically, fxdaytrader
extern string	SymbolSuffixes		="";									//for irregular Symbols
extern string	SymbolPrefixes		="";									//for irregular Symbols
extern string	ShowSignal		= "EURUSD,EURCHF,EURJPY,GBPUSD,USDCHF,GBPJPY,GBPCHF,AUDUSD";
extern int		TimeFrame		= 0;
extern int		StrengthBase	= 60;
extern int		RecentCHBase	= 10;
extern bool		ShowLineChart	= true;
extern bool		ShowBarChart	= true;
extern bool		UpdateOnTick	= false;
extern bool		AllowAlert		= false;
extern bool		AllowSound		= false;
extern int		MinAlertIntv	= 30;
extern int		LineChartBars	= 200;
extern int		LegendOffestY	= 20;
extern int		MeterPosition	= 20;
extern color	BullColor		= Green;
extern color	BearColor		= Red;
extern color	Color0			= Magenta;
extern color	Color1			= Blue;
extern color	Color2			= Red;
extern color	Color3			= Yellow;
extern color	Color4			= Gray;
extern color	Color5			= Green;
extern color	Color6			= Brown;
extern color	Color7			= Orange;
extern color	TextColor		= White;

double	oLine0[],oLine1[],oLine2[],oLine3[],oLine4[],oLine5[],oLine6[],oLine7[];

int			gCurs,gSyms;
int			gBC,gTF,gWindow,gXoff,gYoff;
string		gCur[],gSym[];
int			gSymCurLft[],gSymCurRgt[];
int			gSymLastNtfDir[],gSymNtfList[];
double		gPrBuf[],gSymWgt[],gCurWgt[];
string		gObjPrefix,gPrfx,gSufx;
bool		gShow[],gShowSym[];
color		gCurColor[8];
datetime	gSymLastNtfTime[];

int init()
{
      // код доступен только после оплаты
   }

int deinit()
{
	gWindow=WindowOnDropped();
	ObjectsDeleteAll(gWindow);
	return(0);
}

int start()
{
      // код доступен только после оплаты
   }

void drawLegend()
{
	int i,y;
	string name;

	y=FTSIZE_CUR*2;
	if (ShowBarChart) y+=LegendOffestY+Y_BASELINE0+100*PIXEL_SCALE;

	for (i=0;i<gCurs;i++) {
		name=StringConcatenate(gObjPrefix,i,"_LEGT");
		drawLabel(name,i*X_BARSPACING+X_BASELINE0+X_CUROFF,y,gCur[i],gCurColor[i],0,FTSIZE_CUR);
		if (!gShow[i] || i>=8) continue;
		name=StringConcatenate(gObjPrefix,i,"_LEGL");
		drawLabel(name,i*X_BARSPACING+X_BASELINE0+X_CUROFF,y+3," ___",gCurColor[i],0,FTSIZE_CUR);
	}
}

void drawLines()
{
	int i,j,bm;
	double k,b,max,min,upper,lower;
	calc(0,LineChartBars-1,StrengthBase,LineChartBars);
	lower=MIN;
	if (!ShowLineChart) return;
	if (ShowBarChart) upper=(LINECHTHEIGHT0*MAX+(100-LINECHTHEIGHT0)*MIN)/100;
	else upper=(LINECHTHEIGHT1*MAX+(100-LINECHTHEIGHT1)*MIN)/100;
	max=0;min=0;
	for (i=0;i<gCurs;i++) {
		bm=i*LineChartBars;
		for (j=0;j<LineChartBars;j++) {
			if (gPrBuf[bm+j]>max) max=gPrBuf[bm+j];
			if (gPrBuf[bm+j]<min) min=gPrBuf[bm+j];
		} 
	}
	if (max-min==0) return;
	k=(upper-lower)/(max-min);
	b=lower-min*k;//*/

	for (i=0;i<gCurs && i<8;i++) {
		if (!gShow[i]) continue;
		bm=i*LineChartBars;
		for (j=0;j<LineChartBars;j++) {
			switch (i) {
			case 0:oLine0[j]=k*gPrBuf[bm+j]+b;break;
			case 1:oLine1[j]=k*gPrBuf[bm+j]+b;break;
			case 2:oLine2[j]=k*gPrBuf[bm+j]+b;break;
			case 3:oLine3[j]=k*gPrBuf[bm+j]+b;break;
			case 4:oLine4[j]=k*gPrBuf[bm+j]+b;break;
			case 5:oLine5[j]=k*gPrBuf[bm+j]+b;break;
			case 6:oLine6[j]=k*gPrBuf[bm+j]+b;break;
			case 7:oLine7[j]=k*gPrBuf[bm+j]+b;break;
			}
		}
		SetIndexDrawBegin(i,Bars-LineChartBars);
	}
	drawLegend();
}

void drawLabel(string name, int x, int y, 
				string text, color clr, double angle=BAR_ANGLE,
				int fontsize=FTSIZE_BAR, string font="Arial")
{

	ObjectCreate(name,OBJ_LABEL,gWindow,0,0);
	ObjectSetText(name,text,fontsize,font,clr);
	ObjectSet(name,OBJPROP_XDISTANCE,x+gXoff);
	ObjectSet(name,OBJPROP_YDISTANCE,y+gYoff);
	ObjectSet(name,OBJPROP_ANGLE,angle);
}

void drawTexts()
{
	int i,j;
	string name;

	j=0;
	for (i=0;i<gCurs;i++) {
		if (!gShow[i]) continue;
		name=StringConcatenate(gObjPrefix,0,"_",i,"_SYM");
		drawLabel(name,j*X_BARSPACING+X_BASELINE0+X_CUROFF,Y_BASELINE0,gCur[i],TextColor,0,FTSIZE_CUR);
		name=StringConcatenate(gObjPrefix,1,"_",i,"_SYM");
		drawLabel(name,j*X_BARSPACING+X_BASELINE1+X_CUROFF,Y_BASELINE0,gCur[i],TextColor,0,FTSIZE_CUR);
		j++;
	}
}

void drawBars(int section,int isym,double level)
{
	int i,x,y0,ystep,yend,b;
	static int offsetX[]={X_BASELINE0,X_BASELINE1,X_BASELINE2};
	string name;
	color clr;

	x=offsetX[section]+isym*X_BARSPACING;

	if (level>0) {
		b=MathRound(level*PIXEL_SCALE);
		yend=Y_BASELINE1-b;
		y0=Y_BASELINE1;
		ystep=-Y_BARSPACING;
		clr=BullColor;
	} else {
		b=MathRound(-level*PIXEL_SCALE);
		yend=Y_BASELINE2+b;
		y0=Y_BASELINE2;
		ystep=Y_BARSPACING;
		clr=BearColor;
	}
	b=b/Y_BARSPACING;

	for (i=0;i<b;i++) {
		name=StringConcatenate(gObjPrefix,section,"_",isym,"_",i);
		drawLabel(name,x,y0+i*ystep,BAR_STR,clr);
	}
	return;
}

void drawMeter()
{
	int i,j,k;
	double value,level,max,min;
	int sdir[],rdir[];

	ArrayResize(sdir,gCurs);
	ArrayResize(rdir,gCurs);
	ArrayInitialize(sdir,0);
	ArrayInitialize(rdir,0);

	calc(0,0,StrengthBase,1);

	max=0;min=0;
	for (i=0;i<gCurs;i++) {
		value=gPrBuf[i];
		if (value>0) {
			sdir[i]=1;
			if (value>max) max=value;
		} else if (value<0) {
			sdir[i]=-1;
			if (value<min) min=value;
		}
	}

	if (ShowBarChart) {
		k=0;
		for (i=0;i<gCurs;i++) {
			if (!gShow[i]) continue;
			value=gPrBuf[i];
			if (value>0) level=MathRound(100*value/max);
			else level=-MathRound(100*value/min);
			drawBars(0,k,level);
			k++;
		}
	}

	calc(0,0,RecentCHBase,1);

	max=0;min=0;
	for (i=0;i<gCurs;i++) {
		value=gPrBuf[i];
		if (value>0) {
			rdir[i]=1;
			if (value>max) max=value;
		} else if (value<0) {
			rdir[i]=-1;
			if (value<min) min=value;
		}
	}

	if (ShowBarChart) {
		k=0;
		for (i=0;i<gCurs;i++) {
			if (!gShow[i]) continue;
			value=gPrBuf[i];
			if (value>0) level=MathRound(100*value/max);
			else level

Показано первые 50% кода (символов: 11661)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 166,10₽ ≈ $14.25