오류, 버그, 질문 - 페이지 2531

 
Aleksey Vyazmikin :

그들이 감히 테스트에 참여하지 않은 것이 유감입니다. 제 생각에는 주제가 흥미 롭습니다. 다른 프로세서가 다른 작업에 다른 방식으로 대처하지만 여전히 통계가 거의 없기 때문입니다.

내 희귀 프로세서는 나와 박물관에만 남아 있었고 이것은 누구에게도 거의 흥미가 없었습니다.

 
Aleksey Vyazmikin :

그들이 감히 테스트에 참여하지 않은 것이 유감입니다.

첫날에 테스트를 실행하고 싶었지만 분기가 여러 페이지로 늘어났고 테스트 코드의 첫 번째 버전에서 일부 버그가 발생했습니다. 더 이상 읽지 않고 내 관심을 끌었습니다

제 생각에는 명확한 매뉴얼(그림 포함)과 사용자를 위해 무엇을 해야 하는지에 대한 최소한의 생각이 필요합니다. 그러면 사용자 활동이 나타날 수 있습니다.

 
Igor Makanu :

첫날에 테스트를 실행하고 싶었지만 분기가 여러 페이지로 늘어났고 테스트 코드의 첫 번째 버전에서 일부 버그가 발생했습니다. 더 이상 읽지 않고 내 관심을 끌었습니다

제 생각에는 명확한 매뉴얼(그림 포함)과 사용자를 위해 무엇을 해야 하는지에 대한 최소한의 생각이 필요합니다. 그러면 사용자 활동이 나타날 수 있습니다.

네, 그리고 포럼 자체는 이와 같은 것에 대해 매우 불편합니다. 주제 작성자는 모든 필요한 최신 정보가 있는 기간 이후에 첫 번째 메시지를 편집할 기회가 필요합니다. 대량의 메시지. 이 형식에서 이것은 범람에 대한 스레드일 뿐입니다.

 

질문입니다.

프로그램 내에서 액세스할 수 있도록 double[] 유형(일반, 표시기)의 배열에 대한 포인터를 저장해야 합니다.

표준으로 개발자는 이 배열에 대한 참조를 함수의 전체 계층에 전달하여 완전히 불필요한 곳에 입력 매개변수를 흩뿌릴 것을 제안합니다. 또는 각 틱 에서 전체 배열을 자신에게 복사한 다음 함수 계층 구조 내에서 이미 전달, 기억 및 사용할 수 있는 이 내부 배열에 대한 링크를 사용합니다.

두 솔루션 모두 나에게 매우 추악해 보입니다. 전체 호출 트리를 통해 참조를 전달하는 것은 이미 추한 일이며, 배열에 액세스해야 할 위치가 어디인지 모른다고 생각하면 오히려 어리석게 됩니다.

원본 어레이가 있을 때 각 틱마다 전체 어레이를 복사하는 것도 작은 문제이며 가장 중요한 것은 성능이 손실된다는 것입니다.

누구든지이 문제가 발생 했습니까? 이 어리석은 제한을 해결하는 방법은 무엇입니까?

fxsaber 가 일종의 무속 행위를 사용하여 주소를 복사하는 기능을 제공한 것으로 기억하지만 찾을 수 없습니다.

누가 무엇을 제공할 것인가?

 
Vict :

내 희귀 프로세서는 나와 박물관에만 남아 있었고 이것은 누구에게도 거의 흥미가 없었습니다.

진행 상황을 평가하는 것은 항상 흥미롭습니다.


이고르 마카누 :

첫날에 테스트를 실행하고 싶었지만 분기가 여러 페이지로 늘어났고 테스트 코드의 첫 번째 버전에서 일부 버그가 발생했습니다. 더 이상 읽지 않고 내 관심을 끌었습니다

제 생각에는 명확한 매뉴얼(그림 포함)과 사용자를 위해 무엇을 해야 하는지에 대한 최소한의 생각이 필요합니다. 그러면 사용자 활동이 나타날 수 있습니다.

버그가 없어야하지만 나머지는 모든 것이 잘 시작되었습니다. 이제 전략 테스터 를 구성하는 방법을 보여주는 화면이 있습니다.

옵티마이저 설정에 어려움이 있을 거라고는 전혀 생각하지 못했는데... 지금 거기에서 명확하지 않은 것은 - 힌트를 주자.


빅트 :

네, 그리고 포럼 자체는 이와 같은 것에 대해 매우 불편합니다. 주제 작성자는 모든 필요한 최신 정보가 있는 기간 이후에 첫 번째 메시지를 편집할 기회가 필요합니다. 대량의 메시지. 이 형식에서 이것은 범람에 대한 스레드일 뿐입니다.

우리는 다른 포럼이 없으며 정보가 있을 때 정기적으로 결과를 업데이트합니다. 찾기가 그렇게 어렵지 않습니다.

 
Georgiy Merts :

질문입니다.

프로그램 내에서 액세스할 수 있도록 double[] 유형(일반, 표시기)의 배열에 대한 포인터를 저장해야 합니다.

표준으로 개발자는 이 배열에 대한 참조를 함수의 전체 계층에 전달하여 완전히 불필요한 곳에 입력 매개변수를 흩뿌릴 것을 제안합니다. 또는 각 틱 에서 전체 배열을 자신에게 복사한 다음 함수 계층 구조 내에서 이미 전달, 기억 및 사용할 수 있는 이 내부 배열에 대한 링크를 사용합니다.

두 솔루션 모두 나에게 매우 추악해 보입니다. 전체 호출 트리를 통해 참조를 전달하는 것은 이미 추한 일이며, 배열에 액세스해야 할 위치가 어디인지 모른다고 생각하면 오히려 어리석게 됩니다.

원본 어레이가 있을 때 각 틱마다 전체 어레이를 복사하는 것도 작은 문제이며 가장 중요한 것은 성능이 손실된다는 것입니다.

누구든지이 문제가 발생 했습니까? 이 어리석은 제한을 해결하는 방법은 무엇입니까?

fxsaber 가 일종의 무속 행위를 사용하여 주소를 복사하는 기능을 제공한 것으로 기억하지만 찾을 수 없습니다.

누가 무엇을 제공할 것인가?

mql5에 대해 이야기하는 경우 옵션으로 표시기를 클래스로 래핑하고 필요한 경우 가져오고 이미 그 안에 필요한 깊이와 제어에 필요한 데이터의 복사 및 저장을 구성합니다. 각 틱마다 일회성 업데이트. 나는 이것을 좋아한다.
 
Vladimir Simakov :
mql5에 대해 이야기하는 경우 옵션으로 표시기를 클래스로 래핑하고 필요한 경우 가져오고 이미 그 안에 필요한 깊이와 제어에 필요한 데이터의 복사 및 저장을 구성합니다. 각 틱마다 일회성 업데이트. 나는 이것을 좋아한다.

네, 평소에 하던 일인데...

그러나 표시기 버퍼를 사용하면 래퍼가 작동하지 않습니다. 아니면 내가 뭔가를 놓치고 있고 이미 그것을 할 수있는 방법이 있습니까?

 
Georgiy Merts :

그러나 표시기 버퍼를 사용하면 래퍼가 작동하지 않습니다.

항상 통과
 
Georgiy Merts :

그러나 표시기 버퍼를 사용하면 래퍼가 작동하지 않습니다. 아니면 내가 뭔가를 놓치고 있고 이미 그것을 할 수있는 방법이 있습니까?

모든 것이 작동하지만 표시기 버퍼 가 될 배열은 public 수정자로 선언해야 합니다.

여기, MQL4에서 하나의 HMA 표시기로 만들었습니다. 하나의 하위 창에 4개:

 CHMA *hma[4];
int OnInit ()
  {
//--- indicator buffers mapping
   int i= 0 ;
   hma[ 0 ] = new CHMA( 4 ,PeriodInd1,Method1,Price1,Shift1);
   hma[ 1 ] = new CHMA( 3 ,PeriodInd2,Method2,Price2,Shift2);
   hma[ 2 ] = new CHMA( 2 ,PeriodInd3,Method3,Price3,Shift3);
   hma[ 3 ] = new CHMA( 1 ,PeriodInd4,Method4,Price4,Shift4);

   IndicatorBuffers( 16 );
   IndicatorSetDouble ( INDICATOR_MINIMUM , 0.0 );
   IndicatorSetDouble ( INDICATOR_MAXIMUM , 5.0 );
   IndicatorSetInteger ( INDICATOR_HEIGHT ,IndHeight);
   while (i< 8 )       { SetIndexBuffer (i,hma[ int (i/ 2 )].Uptrend); SetIndexBuffer (i+ 1 ,hma[ int (i/ 2 )].Dntrend); i+= 2 ; 			}
   for (i= 0 ;i< 4 ;i++) { SetIndexBuffer (i+ 8 ,hma[i].ExtMapBuffer); SetIndexBuffer (i+ 12 ,hma[i].vect); 					}
   for (i= 0 ;i< 8 ;i++) { SetIndexStyle(i, DRAW_ARROW ,EMPTY,ArrowWidth, i% 2 == 0 ? ArrowColor1 : ArrowColor2); SetIndexArrow(i,ArrowCode); 	}
   for (i= 8 ;i< 17 ;i++){ SetIndexStyle(i, DRAW_NONE );											}
   IndicatorShortName( "" );
   IndicatorDigits( 0 );
//---
   return ( INIT_SUCCEEDED );
  }

이전 표시기의 본문이 단순히 복사된 클래스 자체:

 class CHMA
  {
private :
   int                period_,shift_,p,level_;
   ENUM_APPLIED_PRICE price_;
   ENUM_MA_METHOD     method_;
   double             GetWMA( int x, int per){ return ( iMA ( NULL , 0 ,per, 0 ,method_,price_,x+shift_)); }
public :
   double             ExtMapBuffer[],vect[],Uptrend[],Dntrend[];
                     CHMA( int level, int period, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price, int shift);
   void               calcind( int lim, int prevcalculated);
   int                lastvalue();
  };

노란색은 이전 표시기 버퍼입니다. 이전 표시기의 코드를 전혀 편집하고 싶지 않았습니다. 그냥 클래스에 래핑했습니다. 모든 것에 대한 모든 것이 1시간 미만이 걸렸습니다.

 
TheXpert :
항상 통과

뭐라고요 ? 클래스 ???의 멤버를 표시기 배열로 선언할 수 있습니까?

지금 확인하겠습니다.

흠... 바로...

그렇다면 모든 것이 훨씬 간단하고 문제가 문제 없이 해결됩니다. 클래스의 멤버를 표시기 배열로 선언하고 기억하기 위해 바로 이 클래스에 대한 포인터를 전달합니다. 물론 해결책은 고통스러울 정도로 아름답지는 않지만 배열에 대한 포인터가 없으면 정상입니다.