Trade101 yöntemini kullanan çoklu para birimi göstergesi

 

İşte çok para birimli bir türkiye. Görevi, çiftleri günün başlangıcına göre puan sayısına göre sıralamaktır.

Grafikteki nokta sayısının değerini görüntülemek kolay olduğunda mükemmel bir şekilde görüntülenir. Ancak dizideki seri numarasını görüntülemeye çalıştığımda bir tür sorun çıkıyor.

Kodda izleyebileceğiniz yeri işaretledim.

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

Kelimelere ek olarak, açıklayıcı bir resim





Türkiye'nin ilk versiyonu (yukarıdan aşağıya, satırı yorumladıklarında

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

İkinci seçenek, çalışmaya devam ettiğinde

Üçüncü seçenek, çalışma hattından çıktıklarında

 // Buf[bar1]=i; // ВОТ ТАК будет строится НОРМАЛЬНО наклонная линия 
Seçenek çalışma hattı olduğunda
Buf[bar1]=15; // GRAFİK HİÇBİR ŞEKİLDE YAPILMAYACAKTIR

ikincisi ile aynı.

Bu arada, ikinci seçenek için göstergenin adının yazılmadığını fark ettim - 0'a bölme gibi hatalar varmış gibi geliyor.
 

Göstergenin 0 çubuğuna bağımlılığına gelince, bazı zaman dilimlerinde görünür. Bazen bir grafik belirir - sadece yatay bir çizgi . Ancak grafiği sıfır çubuğu ekranda görünmeyecek şekilde kaydırdığınızda kayboluyor!!!

Anlamıyorum. Sorunu dile getiren herkese minnettar olurum.

 
sergeev писал(а) >>

Göstergenin 0 çubuğuna bağımlılığına gelince, bazı zaman dilimlerinde görünür. Bazen bir grafik belirir - sadece yatay bir çizgi. Ancak grafiği sıfır çubuğu ekranda görünmeyecek şekilde kaydırdığınızda kayboluyor!!!

Anlamıyorum. Sorunu dile getiren herkese minnettar olurum.

İkinci cihazdaki çubuk sayısının kontrolünü göstergeye eklemek gerekir. Ve birden fazla değiştirirken, tamamen yeniden çizin. Yani bir tarih takası oldu.

 
Hayır. İnternete bağlanmadan önceden yüklenmiş geçmişi kontrol ediyorum.
 
Belki biri onu uzaklaştırmaya çalışır?
 

Dosyayı koyun. Ve kopyalamak zor.

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

Buf[bar1]=15; // GRAFİK HİÇBİR ŞEKİLDE YAPILMAYACAKTIR

1. 14:16 aralığını sabitlerseniz yatay bir çizgi çizilir. (Aralık otomatik olarak 15:15 olur ve ... herkes çıldırır :), sanırım).

"Orijinal" sürüm için - aralık 0:2'dir ve ayrıca bir satır olacaktır. (Bu aynı zamanda hata ayıklama yazdırmanın söylediği şeydir)

2. Sıralama algoritmasıyla ilgili ;) Bir şey demeyeceğim. Ben de aynı durumda 2 diziyi ve ArraySort'u tercih ettim.

 
SergNF >> :

1. 14:16 aralığını sabitlerseniz yatay bir çizgi çizilir. (Aralık otomatik olarak 15:15 olur ve ... herkes çıldırır :), sanırım).

"Orijinal" sürüm için - aralık 0:2'dir ve ayrıca bir satır olacaktır. (Bu aynı zamanda hata ayıklama yazdırmanın söylediği şeydir)

Tam noktasına kadar. baktım.

2. Sıralama algoritmasıyla ilgili ;) Bir şey demeyeceğim. Ben de aynı durumda 2 diziyi ve ArraySort'u tercih ettim

ArraySort uygun değil. Aynı anda iki boyutu sıralamanız gerekir. sayıları sıralayın ve indeksleri hemen hareket ettirin.

 
sergeev писал(а) >>

Yine de T101 sistemine link verdiğimde haklıymışım.