Trade101多币种指标

 

这里是多币种火鸡。它的任务是按照相对于当天开始的点数来排列货币对。

在只显示点值的情况下,它显示得非常好。但当我试图在数组中显示序列号时,我得到了一个问题。

我已经强调了代码中你可以观察到的地方。

//+------------------------------------------------------------------+
//|                                                        Multi.mq4 |
//|                                Copyright © 2008, Сергеев Алексей |
//|                                         mailto: urgunt@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Сергеев Алексей"
#property link      "mailto: urgunt@gmail.com"

#define Max 2

#property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Green
#property indicator_width1 1
#property indicator_level1 0.0

double Buf[];
//+------------------------------------------------------------------+
int init()
{
	SetIndexBuffer(0, Buf); SetIndexStyle(0, DRAW_LINE); return(0);
}
//+------------------------------------------------------------------+
int deinit() { return(0); }
//+------------------------------------------------------------------+
int start()
{
	string Pair[ Max]; // сохраняем имена валют для удобства в массив
	Pair[0]="EURUSD"; Pair[1]="GBPUSD"; 
   double Price[ Max][2];
   
	int bar0, bar1; string str; datetime time0, time;
	int i, j, k;
	double pc0, pc, a;
	bool b=true;
	
	// нашли минимальное число баров
	for ( i=0; i<Bars-1; i++) //составяем график
	{
		time=iTime(Symbol(), 0, i); // берем время бара текущего графика
		// синхронизируем текущую цену закрытия
		k=0; bar1=0; while ( k< Max && bar1!=-1)  { bar1=iBarShift( Pair[ k], 0, time, true);  k++; }
		if ( bar1==-1) continue; // если её нет на всех валютах, выходим

		str=TimeYear( time)+"."+TimeMonth( time)+"."+TimeDay( time);	time0=StrToTime( str);
		// синхронизируем полуночный бар
		k=0; bar0=0; while ( k< Max && bar0!=-1)  { bar0=iBarShift( Pair[ k], 0, time0, true);  k++; }
		if ( bar0==-1) continue; // если его нет на всех валютах, выходим

		// синхронизируем цену закрытия полуночного бара
		k=0; pc0=1;	while ( k< Max && pc0!=0)  { pc0=iClose( Pair[ k], 0, bar0+1);  k++; }
		if ( pc0==0) continue; // если её нет на всех валютах, выходим
		
		for ( j=0; j< Max; j++) // получили значеня цен всех пар текущего бара
		{
			bar0=iBarShift( Pair[ j], 0, time0, true); bar1=iBarShift( Pair[ j], 0, time, true);
			Price[ j][0]=iClose( Pair[ j], 0, bar1)-iClose( Pair[ j], 0, bar0+1); // сохраняем число пунктов
			Price[ j][1]= j; // сохраняем индекс сивола в массиве
		}
		while ( b) // сортируем массив по возрастанию
		{
			b=false;
			for ( j=1; j< Max; j++)
				if ( Price[ j][0]> Price[ j-1][0])	
				{ 
					a= Price[ j][0]; Price[ j][0]= Price[ j-1][0]; Price[ j-1][0]= a;
					k= Price[ j][1]; Price[ j][1]= Price[ j-1][1]; Price[ j-1][1]= k; b=true; 
				}
		}
		//----------- ВОТ В ЭТОЙ СТРОЧКЕ ОШИБКА ------------------------------------|
		for ( j=0; j< Max; j++) Price[ j][0]= j; // заменили пункты на порядковый номер |
		// Если ее закоментировать, то будет выводиться просто число пунктов				|
		//--------------------------------------------------------------------------|
		if (GetLastError()!=0) Print("hsfjshdk");
		// строим график для текущей валюты
		for ( j=0; j< Max; j++)
			if ( Pair[ j]==Symbol()) // берем график текущего символа
			{
				for ( k=0; k< Max; k++) // находим в массиве её цену и порядковый номер
					if ( Price[ k][1]== j) 
					{
						bar1=iBarShift( Pair[ j], 0, time, true); // взяли смещение бара
						
						//---- ВОТ ТУТ СТРОИТСЯ ГРАФИК --------------
						Buf[ bar1]= Price[ j][0];
						// Buf[bar1]=15; // ВОТ ТАК график строиться ВООБЩЕ НЕ БУДЕТ
						// Buf[bar1]=i; // ВОТ ТАК будет строится НОРМАЛЬНО наклонная линия 
					}
				break;
			}
	}
	return(0);
}
 

除了文字之外,还有一张解释性的图片





缩进的第一个变体(从上到下,当该行被注释为

for ( j=0; j< Max; j++) Price[ j][0]= j; // заменили пункты на порядковый номер |

第二种变体,当它仍然工作时

第三种变体,当线路处于工作状态时

// Buf[bar1]=i; // ВОТ ТАК будет строится НОРМАЛЬНО наклонная линия 
工作线时的变体 
Buf[bar1]=15; //这不是像这样的

与第二个相同。

顺便说一下,我注意到第二个变体的指标名称没有写--我感觉有错误,如除以0。
 

至于该指标对0条的依赖性,在一些时间框架上显示出来。有时图表出现--只是一条水平线。但当你移动图表,使零条在屏幕上不可见时,它就消失了!!!!。

我不明白。如果有人能指出问题所在,我将不胜感激。

 
sergeev писал(а)>>

至于该指标对0条的依赖性,在一些时间框架上显示出来。有时图表出现--只是一条水平线。但当你移动图表,使零条在屏幕上不可见时,它就消失了!!!!。

我不明白。我很感谢那些能给我指出问题的人。

有必要放一个指标来控制第二个工具的条数。而当它的变化超过1时,它就会完全重绘它。这意味着有一个历史互换。

 
没有,在没有网络连接的情况下检查已经下载的历史记录。
 
有谁能在他们的位置上尝试运行?
 

把它放在一个文件里。我不想复制它。

 
附加的文件:
_trade101.mq4  4 kb
 
sergeev писал(а)>>

Buf[bar1]=15; // 这跟这个不一样。

1.如果范围固定在14:16,将画一条水平线。(范围自动变成15:15,然后......大家都疯了:),我猜)。

对于 "原始 "版本,范围是0:2,也会有一条线。(这也是调试打印的内容)。

2.关于排序算法我就不说了;)。我,在同样的情况下,首选2个数组和ArraySort

 
SergNF >> :

1.如果你把范围固定在14:16,就会画出一条水平线。(范围自动变成15:15,然后......大家都疯了:),我猜)。

对于 "原始 "版本,范围是0:2,也会有一条线。(这也是调试打印所显示的)

完全正确。我错过了。

2.关于排序算法我就不说了;)。我,在同样的情况下,首选2个数组和ArraySort。

ArraySort不适合。你需要同时对两个维度进行排序。对数字进行排序并同时移动索引。

 
sergeev писал(а)>>

不过,当我给出T101系统的链接时,我还是说对了。