Trade101 indicador multi-currency

 

Aqui está o peru com várias moedas. Sua tarefa é ordenar os pares pelo número de pips, em relação ao início do dia.

Ele se exibe perfeitamente bem quando apenas mostra o valor de pips. Mas quando tento exibir o número da seqüência na matriz, tenho um problema.

Destaquei o lugar no código onde você pode observar isto.

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

Além das palavras, um quadro explicativo





A primeira variante do travessão (de cima para baixo, quando a linha é comentada

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

Segunda variante, quando continuou funcionando

A terceira variante quando a linha é deixada em funcionamento

// Buf[bar1]=i; // ВОТ ТАК будет строится НОРМАЛЬНО наклонная линия 
A variante quando a linha de trabalho é 
Buf[bar1]=15; // ESTE NÃO É O Q UE

o mesmo que o segundo.

A propósito, notei que o nome do indicador não está escrito para a segunda variante - tenho a sensação de que há erros como a divisão por 0.
 

E quanto à dependência do indicador em 0 bar, ele aparece em alguns períodos de tempo. Às vezes o gráfico aparece - apenas uma linha horizontal. Mas quando você muda o gráfico para que a barra de zero não seja visível na tela, ela desaparece!!!!

Eu não entendo. Eu ficaria grato se alguém pudesse apontar o problema.

 
sergeev писал(а) >>

E quanto à dependência do indicador em 0 bar, ele aparece em alguns períodos de tempo. Às vezes o gráfico aparece - apenas uma linha horizontal. Mas quando você muda o gráfico para que a barra de zero não seja visível na tela, ela desaparece!!!

Eu não entendo. Eu ficaria grato àqueles que podem me mostrar o problema.

É necessário colocar um indicador para controlar o número de barras no segundo instrumento. E quando muda por mais de um, ele o refaz completamente. Isso significa que houve uma troca de história.

 
Não. Verificação do histórico já baixado, sem conexão com a internet.
 
Qualquer pessoa pode tentar administrá-lo em seu lugar?
 

Coloque-o em um arquivo. Eu não quero copiá-lo.

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

Buf[bar1]=15; // ESTE NÃO É O QUE

1. Se o alcance for fixado em 14:16, será traçada uma linha horizontal. (O intervalo se torna automaticamente 15:15 e ... todos ficam loucos :), eu acho).

Para a versão "original", a faixa é 0:2 e haverá também uma linha. (Isto também é o que diz a impressão de debug).

2. não vou dizer nada sobre o algoritmo de classificação ;). Eu, na mesma situação, preferia 2 arrays e ArraySort

 
SergNF >> :

1. Se você fixar o alcance em 14:16, uma linha horizontal é traçada. (O intervalo se torna automaticamente 15:15 e ... todos ficam loucos :), eu acho).

Para a variante "original", a faixa é 0:2 e haverá também uma linha. (Isto também é indicado pela impressão de debug)

Exatamente certo. Perdi-o.

2. não vou dizer nada sobre o algoritmo de classificação ;). Eu, na mesma situação, preferia 2 arrays e ArraySort.

O ArraySort não é adequado. Você precisa ordenar duas dimensões ao mesmo tempo. ordenar os dígitos e mover os índices de uma só vez.

 
sergeev писал(а) >>

Mesmo assim, eu estava certo quando dei o link para o sistema T101.