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; // ВОТ ТАК будет строится НОРМАЛЬНО наклонная линия 
작업 라인시 옵션
버퍼[bar1]=15; // 이것은 그래프가 전혀 만들어지지 않는 방법입니다

두 번째 것과 동일합니다.

그런데 두 번째 옵션에는 표시기 이름이 쓰여 있지 않은 것을 알았습니다. 0으로 나누는 것과 같은 오류가있는 것 같습니다.
 

0 막대에 대한 표시기의 의존성은 일부 시간대에 나타납니다. 때때로 그래프가 나타납니다. 수평선 만 나타납니다. 그런데 제로바가 화면에 안보이게 차트를 옮기면 사라집니다!!!

난 이해가 안 돼요. 문제점을 지적해 주시면 감사하겠습니다.

 
sergeev писал(а) >>

0 막대에 대한 표시기의 의존성은 일부 시간대에 나타납니다. 때때로 그래프가 나타납니다. 수평선만 나타납니다. 그런데 제로바가 화면에 안보이게 차트를 옮기면 사라집니다!!!

난 이해가 안 돼요. 문제점을 지적해 주시면 감사하겠습니다.

두 번째 기기의 막대 수 제어를 표시기에 삽입해야 합니다. 그리고 둘 이상 변경하는 경우 완전히 다시 그립니다. 그래서 역사의 스왑이 있었다.

 
아니요. 인터넷에 연결하지 않고 이미 업로드된 이력을 확인합니다.
 
누군가 그를 몰아내려고 하지 않을까요?
 

파일을 넣습니다. 그리고 복사가 어렵습니다.

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

버퍼[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 시스템에 대한 링크를 제공했을 때 제가 옳았습니다.