Trade101 Mehrwährungsindikator

 

Hier ist der Truthahn für mehrere Währungen. Seine Aufgabe ist es, die Paare nach der Anzahl der Pips, bezogen auf den Tagesbeginn, zu ordnen.

Die Anzeige ist perfekt, wenn nur der Wert der Pips angezeigt wird. Aber wenn ich versuche, die Sequenznummer im Array anzuzeigen, bekomme ich ein Problem.

Ich habe die Stelle im Code hervorgehoben, an der Sie dies beobachten können.

//+------------------------------------------------------------------+
//|                                                        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);
}
 

Zusätzlich zu den Worten ein erklärendes Bild





Die erste Variante des Einzugs (von oben nach unten, wenn die Zeile kommentiert ist

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

Zweite Variante, als es noch funktionierte

Die dritte Variante, wenn die Leitung in Betrieb bleibt

// Buf[bar1]=i; // ВОТ ТАК будет строится НОРМАЛЬНО наклонная линия 
Die Variante, wenn die Arbeitszeile 
istBuf[bar1]=15; // DIES IST NICHTS wie das

die gleiche wie die zweite.

Übrigens ist mir aufgefallen, dass der Name des Indikators bei der zweiten Variante nicht geschrieben wird - ich habe das Gefühl, dass es Fehler wie die Division durch 0 gibt.
 

Und was die Abhängigkeit des Indikators von einem 0-Balken betrifft, so zeigt sie sich bei einigen Zeitrahmen. Manchmal erscheint das Diagramm nur als horizontale Linie. Aber wenn Sie das Diagramm so verschieben, dass der Null-Balken nicht auf dem Bildschirm zu sehen ist, verschwindet er!!!

Das verstehe ich nicht. Ich wäre dankbar, wenn mich jemand auf das Problem hinweisen könnte.

 
sergeev писал(а) >>

Und was die Abhängigkeit des Indikators vom 0-Balken betrifft, so zeigt sie sich bei einigen Zeitrahmen. Manchmal erscheint das Diagramm nur als horizontale Linie. Wenn Sie das Diagramm jedoch so verschieben, dass der Null-Balken auf dem Bildschirm nicht sichtbar ist, verschwindet er!!!!

Das verstehe ich nicht. Ich wäre denjenigen dankbar, die mir das Problem zeigen können.

Es ist notwendig, einen Indikator einzufügen, um die Anzahl der Balken auf dem zweiten Instrument zu kontrollieren. Und wenn sie sich um mehr als eins ändert, wird sie komplett neu gezeichnet. Das bedeutet, dass ein Geschichtstausch stattgefunden hat.

 
Nein. Ich überprüfe den bereits heruntergeladenen Verlauf ohne Internetverbindung.
 
Kann jemand versuchen, sie an ihrer Stelle durchzuführen?
 

Legen Sie sie in einer Datei ab. Ich möchte sie nicht kopieren.

 
Dateien:
_trade101.mq4  4 kb
 
sergeev писал(а) >>

Buf[bar1]=15; // DIES IST NICHTS wie das hier

1. Wenn der Bereich auf 14:16 festgelegt ist, wird eine horizontale Linie gezeichnet. (Der Bereich wird automatisch zu 15:15 und ... alle drehen durch :), denke ich).

Bei der "Original"-Version ist der Bereich 0:2 und es wird auch eine Linie angezeigt. (Dies ist auch die Aussage des Debug-Prints).

2. ich werde nichts über den Sortieralgorithmus sagen ;). Ich, in der gleichen Situation, bevorzugte 2 Arrays und ArraySort

 
SergNF >> :

1. Wenn Sie den Bereich auf 14:16 festlegen, wird eine horizontale Linie gezeichnet. (Der Bereich wird automatisch zu 15:15 und ... alle drehen durch :), denke ich).

Bei der "Original"-Version ist der Bereich 0:2 und es wird auch eine Linie angezeigt. (Dies wird auch durch den Debug-Druck angezeigt)

Das ist richtig. Ich habe es verpasst.

2. ich werde nichts über den Sortieralgorithmus sagen ;). Ich, in der gleichen Situation, bevorzugt 2 Arrays und ArraySort.

ArraySort ist nicht geeignet. Sie müssen zwei Dimensionen gleichzeitig sortieren. Sortieren Sie die Ziffern und verschieben Sie die Indizes auf einmal.

 
sergeev писал(а) >>

Dennoch hatte ich Recht, als ich den Link zum T101-System angegeben habe.