포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 318

 
muzzletop :
안녕하세요. 고문이 있고 전략 테스터에서 잘 작동합니다(주문 및 기타 모든 것을 엽니다). 하지만 차트에 올리기만 하면 아무 일도 일어나지 않습니다. 고문이 작동하지 않습니다. 그리고 나는 다른 것을 발견했습니다. 차트의 고문 이름 옆에 십자가가 표시됩니다. 그것을 고치는 방법?


차트에 고문을 던지면 매개 변수가 있는 창이 열리며 다른 탭이 있습니다. 첫 번째 "일반"에서 " 고문 거래 허용 " 옆에 있는 상자를 선택해야 합니다.

조언자가 이미 던져지고 십자가로 표시되는 경우 - 도구 모음에서 "고문" 버튼을 클릭하십시오(모자에 있는 노란색 큐브에는 빨간색 원이 있고 이 원 안에 흰색 사각형이 있음).

 

안녕하세요. 이 이상한 문제를 도와주세요.

결론은 다음과 같습니다. 저는 다중 시간 표시기를 작성하고 있습니다. 한 번에 열려 있는 표시기는 다른 모든 시간에 대해 동일한 방식으로 계산을 수행하고 신호를 제공합니다.

지표의 기초는 RSI입니다.

init()에서 시간을 전환할 때 표시줄 에 별도의 배열이 할당됩니다. 그리고 각각은 한쪽 또는 다른 절반에있을 때 선으로 표시되지만 동시에 다른 절반에 대한 계산은 작동하지 않습니다 (iRSI 기능은 계산 중에 어리석게도 0을 유도합니다). 저것들. 현재 절반은 계산되지만 나머지는 계산되지 않습니다.

코드를 가져옵니다.

 #property indicator_separate_window
#property indicator_minimum 20
#property indicator_maximum 80

#property indicator_level1 20            // уровень RSI
#property indicator_level2 42            // уровень RSI
#property indicator_level3 50            // уровень RSI
#property indicator_level4 58            // уровень RSI
#property indicator_level5 80            // уровень RSI

#property indicator_levelcolor White   // цвет уровней 

#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2            // толщина RSI

//--- buffers
double    RSI_M1[];               // буферы под RSI
double    RSI_M5[];
double    RSI_M15[];
double    RSI_M30[];
double    RSI_H1[];
double    RSI_H4[];
double    RSI_D1[];
double    RSI_W1[];
double    RSI_MN[];

int          RSI_per           = 12 ;                 // период RSI
int          RSIPriceType      =   PRICE_CLOSE ;       // покакой цене считать RSI
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- indicators
   IndicatorShortName( "test" );
   
   switch ( Period ()) {
       case PERIOD_M1 :
           SetIndexBuffer ( 0 , RSI_M1);
           break ;
       case PERIOD_M5 :
           SetIndexBuffer ( 0 , RSI_M5);
           break ;
       case PERIOD_M15 :
           SetIndexBuffer ( 0 , RSI_M15);
           break ;
       case PERIOD_M30 :
           SetIndexBuffer ( 0 , RSI_M30);
           break ;
       case PERIOD_H1 :
           SetIndexBuffer ( 0 , RSI_H1);
           break ;
       case PERIOD_H4 :
           SetIndexBuffer ( 0 , RSI_H4);
           break ;
       case PERIOD_D1 :
           SetIndexBuffer ( 0 , RSI_D1);
           break ;
       case PERIOD_W1 :
           SetIndexBuffer ( 0 , RSI_W1);
           break ;
       case PERIOD_MN1 :
           SetIndexBuffer ( 0 , RSI_MN);
           break ;
   }   
   
   SetIndexStyle( 0 , DRAW_LINE , STYLE_SOLID , 2 );
   SetIndexLabel( 0 , "RSI(" + RSI_per + ")" );
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, _Bars;
   static int   _counted_bars_W1 = 0 ,
               _counted_bars_D1 = 0 ;
   //--------------------------------------------------------------------
   _Bars = iBars( NULL , PERIOD_W1 );
   shift = _Bars - _counted_bars_W1 - 1 ;   // Индекс первого непосчитанного
   _counted_bars_W1 = _Bars - 1 ;
   
   while (shift >= 0 ) {                 // Цикл по непосчитанным барам
      RSI_W1[shift]       = iRSI ( NULL , PERIOD_W1 , RSI_per, RSIPriceType, shift);
       Print (RSI_W1[shift]);
      shift--;
   }
   //------------------------------------------
   _Bars = iBars( NULL , PERIOD_D1 );
   shift = _Bars - _counted_bars_D1 - 1 ;   // Индекс первого непосчитанного
   _counted_bars_D1 = _Bars - 1 ;
   
   while (shift >= 0 ) {                 // Цикл по непосчитанным барам
      RSI_D1[shift]       = iRSI ( NULL , PERIOD_D1 , RSI_per, RSIPriceType, shift);
      shift--;
   }
   //------------------------------------------   
   return ( 0 );
  }
//+------------------------------------------------------------------+

흥미로운 점: 표시줄에 대해 하나의 배열만 남겨두고 언제든지 W1만 계산하면 모든 (!) 시간에 모든 것이 올바르게 계산되고 그려집니다.
점은 무엇인가? 초기화시 인디케이터 라인은 시간에 따라 다른 배열을 취할 수 없나요?

 
satorifx :

안녕하세요. 이 이상한 문제를 도와주세요.

결론은 다음과 같습니다. 저는 다중 시간 표시기를 작성하고 있습니다. 한 번에 열려 있는 표시기는 다른 모든 시간에 대해 동일한 방식으로 계산을 수행하고 신호를 제공합니다.

지표의 기초는 RSI입니다.

init()에서 시간을 전환할 때 표시줄에 별도의 배열이 할당됩니다. 그리고 각각은 한쪽 또는 다른 절반에있을 때 선으로 표시되지만 동시에 다른 절반에 대한 계산은 작동하지 않습니다 (iRSI 기능은 계산 중에 어리석게도 0을 유도합니다). 저것들. 현재 절반은 계산되지만 나머지는 계산되지 않습니다.

코드를 가져옵니다.

흥미로운 점: 표시줄에 대해 하나의 배열만 남겨두고 언제든지 W1만 계산하면 모든 (!) 시간에 모든 것이 올바르게 계산되고 그려집니다.
점은 무엇인가? 초기화시 인디케이터 라인은 시간에 따라 다른 배열을 취할 수 없나요?

W1과 D1만 읽힙니다! 무엇을 원하세요? 나머지는 가입하세요!
 
borilunad :
W1과 D1만 읽힙니다! 무엇을 원하세요? 나머지를 위해 등록하십시오!

그것에 관한 것이 아닙니다. 코드가 너무 길지 않도록 D1과 W1에 대해서만 계산했습니다. 참고: W1의 계산된 값은 언제든지 모든 눈금 에 인쇄됩니다. 따라서 W1을 제외한 모든 시간이 열려 있으면 0이 인쇄됩니다. W1에서 작동하면 나머지는 작동합니다.
 
satorifx :

그것에 관한 것이 아닙니다. 코드가 너무 길지 않도록 D1과 W1에 대해서만 계산했습니다. 참고: W1의 계산된 값은 언제든지 모든 눈금에 인쇄됩니다. 따라서 W1을 제외한 모든 시간이 열려 있으면 0이 인쇄됩니다. W1에서 작동하면 나머지는 작동합니다.
바르게! 다른 차트에 표시하려면 주간 차트도 열어야 합니다!
 
borilunad :
바르게! 다른 차트에 표시하려면 주간 차트도 열어야 합니다!


솔직히 말해서 나는 이 말을 이해하지 못했다.
그리고 다른 것을 보여줄 필요가 없습니다. 내 코드를 실행하면 필요한 모든 것이 이미 표시되어 있음을 알 수 있습니다. D1에는 RSI D1 차트가 표시되고 W1에는 RSI W1 차트가 표시되지만 동시에 D1이 열려 있으면 RSI 계산에 대한 W1은 모두 0이고, W1이 열려 있으면 D1에 대한 계산은 0입니다. 문제는 왜 이것이고 어떻게 고칠 것인가입니다.

 

문제는 인덱스 배열 자체가 초기화되고 원하는 크기로 조정된다는 것입니다.
따라서 D1을 열면 RSI_D1[]이 인덱스가 되고 모든 것이 잘 되고 나머지 배열은 초기 상태로 유지됩니다.
다음과 같이 시도: 모든 배열을 다음과 같이 선언했습니다.

 double    RSI_W1[]    =  { 0 };
그리고 스위치의 init()에서 다음과 같이 변경했습니다.
       case PERIOD_D1 :
           SetIndexBuffer ( 0 , RSI_D1);
           ArrayResize (RSI_W1, iBars( NULL , PERIOD_W1 ));
           break ;

그러나 ArrayResize에서 GetLastError는 오류를 제공합니다.

EURUSD,Daily: 배열의 크기를 조정할 수 없습니다.

EURUSD Daily: 일부 배열 오류

어쨌든, 아무도 문제를 해결하는 방법을 말해 줄 수 있습니까?

 
satorifx :

문제는 인덱스 배열 자체가 초기화되고 원하는 크기로 조정된다는 것입니다.
따라서 D1을 열면 RSI_D1[]이 인덱스가 되고 모든 것이 잘 되고 나머지 배열은 초기 상태로 유지됩니다.
다음과 같이 시도: 모든 배열을 다음과 같이 선언했습니다.

그리고 스위치의 init()에서 다음과 같이 변경했습니다.

그러나 ArrayResize에서 GetLastError는 오류를 제공합니다.

EURUSD,Daily: 배열의 크기를 조정할 수 없습니다.

EURUSD Daily: 일부 배열 오류

어쨌든, 아무도 문제를 해결하는 방법을 말해 줄 수 있습니까?

배열이 동적이면 값을 쓸 때 새 데이터 의 배열 크기 를 늘려야 합니다. 배열 크기 조정()
 
artmedia70 :
배열이 동적이면 값을 쓸 때 새 데이터의 배열 크기를 늘려야 합니다. 배열 크기 조정()

나는 위에서 이것에 대해 썼습니다.
그러나 ArrayResize에서 GetLastError 는 오류를 제공합니다.

EURUSD,Daily: 배열의 크기를 조정할 수 없습니다.

EURUSD Daily: 일부 배열 오류
 
satorifx :
나는 위에서 이것에 대해 썼습니다.
그러나 ArrayResize에서 GetLastError는 오류를 제공합니다.

EURUSD, Daily: 배열의 크기를 조정할 수 없습니다.

EURUSD Daily: 일부 배열 오류
사토릭스 :


솔직히 말해서 나는 이 말을 이해하지 못했다.
그리고 당신은 다른 것을 보여줄 필요가 없습니다. 내 코드를 실행하면 필요한 모든 것이 이미 표시되어 있음을 알 수 있습니다. D1에는 RSI D1 차트가 표시되고 W1에는 RSI W1 차트가 표시되지만 동시에 D1이 열려 있으면 RSI 계산에 대한 W1은 모두 0이고, W1이 열려 있으면 D1에 대한 계산은 0입니다. 문제는 왜 이것이고 어떻게 고칠 것인가입니다.

버퍼가 하나만 있고 호출 시 차례로 표시되기 때문입니다!

 #property indicator_buffers 1
당신은 정말로 내가 당신의 "코드"를 다운로드하고 테스트하는 것 외에는 할 일이 없다고 생각합니까? 조언을 도와드립니다. 그리고 무언가가 옳지 않다면 모든 것이 당신을 위해 최고입니다! 아니면 게으름이 당신보다 먼저 태어났습니까?!
사유: