정적 배열? - 페이지 2

 
좋아, 적어도 나는 거의 올바른 길을 가고 있었지만 EMPTY_VALUE 에 대해 몰랐고 그것을 사용하는 방법을 몰랐기 때문에 저항과 지원 값이 다음까지 동일하게 유지되기 때문에 값의 변화를 감지하기 위해 루프백을 시도하려고 생각했습니다. 이전 지표.

여하튼, 감사합니다 나는 이것에 대해 좀 더 읽어야 할 것입니다, 나는 더 가까워지고 있지만 여전히 약간 안개가 있습니다. :)

뭔가를 배우는 데 너무 오래 걸리는 것 같습니다. 더 나은 디자인 아이디어를 얻으려면 다른 사람들의 코드를 더 많이 읽고 이해하려고 노력해야 한다고 생각합니다.

응답해 주셔서 감사합니다.
 
RaptorUK :
Fractals 의 가격 값을 보유하는 2개의 버퍼(배열)가 있습니다. . . val1 및 val2. 이전 프랙탈 값을 찾으려면 시프트 값을 증가시키면서 루프를 만들고 EMPTY_VALUE가 아닌 값을 찾을 때까지 버퍼 값을 확인합니다( https://docs.mql4.com/customind/SetIndexEmptyValue ).
좋아요, 여기에서 크게 생각해 보세요.

따라서 1++ 코드로 v1[i] 및 v2[i]를 루프백할 수 있습니다.

나는 val1>0이 High[0]을 제외하고 항상 0보다 크지 않다는 것을 이해하지 못합니까?

그리고 왜 val1은 High[i]의 AHHH가 아닌 높은 프랙탈만 표시합니까? if 문에서 High[i]의

그럼 좀 더 생각해보죠.

val1은 프랙탈이지만 v1[i]는 프랙탈 하이일 뿐입니다. 이 부분은 해결한 것 같습니다.

그래서 나는 EMPTY_VALUE 이전의 이전 지점으로 어떻게든 v1[i] 1++를 반복할 수 있고(나는 그 부분을 해결해야 할 것이다) 이것은 이전 High[i] 프랙탈이 될 것입니다.

나는 점점 가까워지고 있습니까?
 
Agent86 :
좋아요, 여기에서 크게 생각해 보세요.

val1은 프랙탈이지만 v1[i]는 프랙탈 하이일 뿐입니다. 이 부분은 해결한 것 같습니다.

그래서 나는 EMPTY_VALUE 이전의 이전 지점으로 어떻게든 v1[i] 1++를 반복할 수 있고(나는 그 부분을 해결해야 할 것이다) 이것은 이전 High[i] 프랙탈이 될 것입니다.

나는 점점 가까워지고 있습니까?
옳은 . . . :-)
 
RaptorUK :
옳은 . . . :-)
휴! 내가 걱정했다

감사해요
 
나는 뭔가 잘못되었습니다. EMPTY_VALUE에 0을 넣을 수 있고 0을 계속 인쇄하므로 옳지 않을 수도 있습니다. 맞긴 하지만 원하는 효과는 아닙니다.

아무리 해도:

 //+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                                    
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


//---- input parameters
extern double     TakeProfit= 20.0 ;
extern double     Lots= 0.1 ;
extern double     StopLoss= 15.0 ;
extern int MagicNumber= 123486 ;

double v1[];
double v2[];
double val1;
double val2;

//++++ These are adjusted for 5 digit brokers.

int      pips2points;     // slippage  3 pips    3=points    30=points
double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int      Digits .pips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)

     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if ( Digits == 5 || Digits == 3 )
   {     // Adjust for five (5) digit brokers.
      pips2dbl    = Point * 10 ; pips2points = 10 ;   Digits .pips = 1 ;
   } 
   else 
    {    
      pips2dbl    = Point ;    pips2points =   1 ;   Digits .pips = 0 ; 
    }
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return ( 0 );
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
  
   double    faster = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 ), //MODE_MAIN
            slower = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 ); //MODE_SIGNAL
            
   int i= Bars ;         
   
   while (i>= 0 )
     {
      val1= iFractals ( NULL , 0 , MODE_UPPER,i);
       if (val1 > 0 ) v1[i]=High[i];
       else           v1[i]=v1[i+ 1 ];

      val2= iFractals ( NULL , 0 , MODE_LOWER,i);
       if (val2 > 0 ) v2[i]=Low[i];
       else           v2[i]=v2[i+ 1 ];
      
      i--;
     }
   
     for (val1=High[i]; v1[i] == EMPTY_VALUE ;i++)
      {
       Print (v1[i]);
      } 
  
//----
            
                       
            

           

//---- 

 
                    
        

                
   return ( 0 );
  }    

//+------------------------------------------------------------------+
나는 for 루프가 나를 단 하나의 신호로 되돌리고 신호 레벨을 인쇄할 것이라고 생각했습니다. 그러나 나는 아무것도 또는 0을 얻지 못한다.

며칠 동안 이것을 생각하고 많은 것을 시도한 후, 세 번째 버퍼를 추가하고 차트에서 가격으로 신호를 시도하여 표시기 버전에 이러한 변경을 시도했지만 역시 실패했습니다.


글쎄요, 잠시만요. 짧은 버전의 EA를 다시 가져오겠습니다. EMPTY_VALUE 버퍼가 없어서 작동하지 않을 가능성이 높으므로 결과를 보기 위해 인쇄 기능 을 볼 수 있도록 EA를 테스트하는 것이 아이디어였습니다. 하지만 표시기 버전은 기다려야 하므로 결과가 나오면 다시 게시해야 합니다.

여하튼 여기 표시기 버전이 있지만 while 문 내부에서 루프를 시도해야 하는지 또는 새 루프를 만들고 val1 = ....을 다시 생성해야 하는지 정확히 확신하지 못하기 때문에 이에 대해 확신이 없습니다.

 //+------------------------------------------------------------------+
//|                Support and Resistance                            |
//|                Copyright © 2004/5     Barry Stander              |
//|                http://www.4Africa.net/4meta/                     |
//+------------------------------------------------------------------+

#property copyright "Support and Resistance             Barry_Stander_4@yahoo.com"
#property link       "http://www.4Africa.net/4meta/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers ( 2 );

   SetIndexArrow ( 0 , 159 );
   SetIndexStyle ( 0 , DRAW_ARROW , STYLE_DOT , 1 , Red );
   SetIndexBuffer ( 0 , v1);
   SetIndexLabel ( 0 , "Resistance" );
   SetIndexEmptyValue ( 0 , 0.0 );

   SetIndexArrow ( 1 , 159 );
   SetIndexStyle ( 1 , DRAW_ARROW , STYLE_DOT , 1 , Blue );
   SetIndexBuffer ( 1 , v2);
   SetIndexLabel ( 1 , "Support" );
   SetIndexEmptyValue ( 1 , 0.0 );
   
   SetIndexArrow ( 2 , 225 );
   SetIndexStyle ( 2 , DRAW_ARROW , STYLE_DOT , 1 , White );
   SetIndexBuffer ( 2 , v3);
   SetIndexLabel ( 2 , "High A" );
   SetIndexEmptyValue ( 2 , 0.0 ); 
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   
   int i= Bars ;
//----
   while (i>= 0 )
     {
      val1= iFractals ( NULL , 0 , MODE_UPPER,i);
       if (val1 > 0 ) v1[i]=High[i];
       else           v1[i]=v1[i+ 1 ];

      val2= iFractals ( NULL , 0 , MODE_LOWER,i);
       if (val2 > 0 ) v2[i]=Low[i];
       else           v2[i]=v2[i+ 1 ];
      
      i--;      
       
      }
      
     
     for (val1=High[i]; v1[i] == 0 ;i++)  // or v1[i] == EMPTY_VALUE
      {
       Print (v1[i]);
      }
       
     
     
     
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
글쎄, 나는 지금 생성될 세 번째 버퍼/신호를 얻으려는 시도를 버리고 이전 신호의 결과를 인쇄할 수 있는지 확인하고 싶습니다.

EMPTY_VALUE 코드에 넣은 방식은 표시기를 초기화하지만 인쇄되는 것은 모두 아무것도 없습니다.
 

이 for 루프가 어떻게 작동하는지 설명할 수 있습니까?

( val1=높음[i]; v1[i] == 0 ;i++)

 
RaptorUK :

이 for 루프가 어떻게 작동하는지 설명할 수 있습니까?

( val1=높음[i]; v1[i] == 0 ;i++)

나는 while 문과 v1[i]가 최고점과 i를 저장하기 때문에 가장 높은 막대에서 카운트다운한 다음 v1[i] == EMPTY_VALUE 동안 다시 다시 카운트업할 것이라고 생각하고 있었던 것 같습니다.

나는 이것이 i++를 이전 최고치로 1레벨 위로 증가시킬 것이라고 생각하지만 실제로는 그것이 다음 EMPTY_VALUE까지 지나갈 것이라고 생각합니다.

그래서 반대의 방법으로 이것을 할 필요가 있습니다. v1[i] = High[i]; 나는 ++

그러면 이전 High로 이동해서는 안되지만 올바르게 초기화하는 방법을 모르겠습니다.

계속 작업하겠습니다.
 
나는 그것을 if(나는 단지 표시기가 무엇을 하는지 적어도 볼 수 있도록 이 시점에서 인쇄되는 것을 보고 싶다.

내가 얻는 것은 모두 0이므로 = Print (v1[i]);
이 시점에서 표시기가 작동하는 방법을 알고 있기 때문에 어느 것이 이상합니까?

아, 계속하겠습니다.
 
Agent86 :
나는 그것을 if(나는 단지 표시기가 무엇을 하는지 적어도 볼 수 있도록 이 시점에서 인쇄되는 것을 보고 싶다.

내가 얻는 것은 모두 0이므로 = Print (v1[i]);
이 시점에서 표시기가 작동하는 방법을 알고 있기 때문에 어느 것이 이상합니까?

아, 계속하겠습니다.


v1[0] 에 대한 값만 보고 있습니까? i 를 동시에 인쇄하십시오. .

 Print ( "v1[" , i, "]= " , v1[i]);
 
2011.09 . 17 11 : 56 : 15      2011.01 . 03 09 : 24   Agent86_5min EURUSD,M5: v1[- 1 ]= 0
흠 재미있다
나는 그것을 모두 게시하지 않았지만 모든 줄은 동일하게 읽습니다 = 0

나는 여전히 v1[0] 의 실제 값을 봐야 한다고 생각했습니까?

표시기가 if(>0) 이어야 하는데 어떻게 항상 0이 될 수 있습니까?

내가 모르는 또 다른 영역에 들어갈 수도 있습니다.

나는 인쇄할 수 있을 거라고 생각해서 시도하고 모든 시도가 실패한 이유와 이유를 이해하려고 했습니다. 다음 프랙탈 에 도달하기 위해 어떤 방식으로든 i++를 증가시키고 어떻게든 이 정보를 무언가에 사용하는 방법을 알아낼 수 있도록.


High[i] 또는 v1[i]를 인쇄할 수 있으며 항상 0입니다.

높음[0] 또는 높음[1]도 0으로 인쇄

나는 당신이 게시한 내용과 i 값의 인쇄를 이해하지만 i-- 루프는 항상 0으로 설정하지만 그럼에도 불구하고 최소한 내가 생각한 대로 여전히 i 값을 인쇄해야 합니다.

그리고 i=Bar이기 때문에 [-1]이 인쇄되는 이유를 이해합니다. 나는 이것을 이해하지만 =0 ?