지표 질문 - 페이지 2

 
참이면 1, 거짓이면 0 맞습니까?

내일은 좀 더 생각해보고 해결할 수 있는지 알아보겠습니다.
 
Agent86 :
참이면 1, 거짓이면 0 맞습니까? <---- 맞습니다, 하지만

내일은 좀 더 생각해보고 해결할 수 있는지 알아보겠습니다.


영국은 MACD 값을 더 많이 참조합니다.
 
더 빠르고 느린 것은 bool이 아니라 double입니다. . . 초기 값과 3번의 반복에서 루프를 통해 작업하므로 Bars, Bars-1, Bars-2 값에 대해 작업합니다. . . 더 빠르고 더 느림의 값은 무엇입니까?
 
//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#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 ( 3 );

   SetIndexArrow ( 0 , 111 );
   SetIndexStyle ( 0 , DRAW_ARROW , STYLE_DOT , 1 , Blue );
   SetIndexBuffer ( 0 , v1);
   SetIndexLabel ( 0 , "Resistance" );
   

   SetIndexArrow ( 1 , 111 );
   SetIndexStyle ( 1 , DRAW_ARROW , STYLE_DOT , 1 , Red );
   SetIndexBuffer ( 1 , v2);
   SetIndexLabel ( 1 , "Support" );
  
   
   SetIndexArrow ( 2 , 111 );
   SetIndexStyle ( 2 , DRAW_ARROW , STYLE_DOT , 1 , White );
   SetIndexBuffer ( 2 , v3);
   SetIndexLabel ( 2 , "High A" );
   
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   int i= Bars ;
   
   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        
  
     for (i= Bars ; i>= 0 ; i--)
     {
      val1= iFractals ( NULL , 0 , MODE_UPPER,i);
       if (val1 > 0 )
         {                             
          v1[i]=High[i]; 
                         
           Print ( "v1[" , i, "]= " , v1[i], " if" );
           Print ( "i=" ,i, " faster=" , faster);
           Print ( "i=" ,i, " slower=" ,slower);
          }    
               
       else           
         {
         //v1[i]=v1[i+1];
         //Print ("v1[", i, "]= ", v1[i], " else");
         }
      
      val2= iFractals ( NULL , 0 , MODE_LOWER,i);
       if (val2 > 0 )
         {
          v2[i]=Low[i];
          
           Print ( "v2[" , i, "]= " , v2[i], " if" );
         }
          
       else           
         {
         //v2[i]=v2[i+1]; 
         //Print ("v2[", i, "]= ", v2[i], " else");         
         }
      }

   
     
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+




2011.09.28 16:43:30 sup_res EURUSD,M5: i=411 더 빠름=-0.0005

2011.09.28 16:43:30 sup_res EURUSD,M5: v1[411]= 1.3522 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[414]= 1.3495 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 더 느림=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 더 빠름=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[414]= 1.3527 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 더 느린=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 더 빠름=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[417]= 1.3528 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[419]= 1.3506 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 느린=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 더 빠름=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[420]= 1.3523 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 더 느림=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 더 빠름=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[426]= 1.3522 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[429]= 1.3481 if


표시기를 실행할 때 이것을 인쇄합니다.

그러나 EA에 대한 동일한 코드는 배열을 인쇄하지 않습니다.

2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=227 더 빠름=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[227]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v2[230]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 느림=-0.0013
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 더 빠름=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[232]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=825 더 빠름=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[825]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 느림=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 더 빠름=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[829]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 느림=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 더 빠름=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[832]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=240 더 빠름=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[240]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[241]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 더 느림=-0.0003
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 더 빠름=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[249]= 0 if


표시기와 정확히 동일한 코드이기 때문에 배열을 다시 인쇄하지 않는 것에 의존하는 이유를 모르겠습니다.
어쨌든 지금은 지표에 대해 작업하겠습니다.

값은 4자리 소수부터 음수 4자리 소수까지 다양하게 나타납니다.

iMACD 시프트를 i로 변경하면 더 빠르고 더 느림 = 항상 0

 
Agent86 :

아이디어를 가지고 놀기 위해 코드의 다양한 영역에 if(빠른 > 느린)를 삽입해 보았습니다. 일반적으로 이러한 아이디어는 EA에서는 작동하지만 지표에서는 작동하지 않습니다.

IE if(v1 > 0 && 더 빠름 > 더 느림)

그러나 이로 인해 표시기가 사라집니다.

이 변경 시도
 //    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        
  
     for (i= Bars -1 ; i>= 0 ; i--)
     {
   double    faster = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, i ), //MODE_MAIN
            slower = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, i ); //MODE_SIGNAL        
 
Agent86 :


표시기와 정확히 동일한 코드이기 때문에 배열을 다시 인쇄하지 않는 것에 의존하는 이유를 모르겠습니다.


EA 에서는 표시기 버퍼를 사용할 수 없습니다. . 이것은 그것을 설명합니다 : https://www.mql5.com/en/articles/1456

더 빠르고 더 느린 것은 루프 전체에 걸쳐 동일한 값이고 i 의 변경 값은 당신이 원하고 필요로 하는 것입니까?

 
RaptorUK :

EA 에서는 표시기 버퍼를 사용할 수 없습니다. . 이것은 그것을 설명합니다 : https://www.mql5.com/en/articles/1456

더 빠르고 더 느린 것은 루프 전체에 걸쳐 동일한 값이고 i 의 변경 값은 당신이 원하고 필요로 하는 것입니까?


알겠습니다. 링크 감사합니다. 나는 이것을 잊었다. 기억에 많이 남는 정보네요. 노비니스 핸디캡 LOL.

그래서 여하튼 나는 iMACD 십자가, EMA 십자가 또는 다른 지표 십자가와 같은 다른 조건이 발생할 때만 높은 프랙탈이 형성되도록 하려고 했습니다.
모든 조건이 충족될 때만 프랙탈이 표시기에 표시되도록 합니다.
그런 다음 비슷한 조건의 낮은 프랙탈에서도 작업합니다.

나는 그것을 수행하는 방법을 배우기 위해 훨씬 더 복잡한 조건을 추가하려고 노력할 것입니다. iFractals가 아니라 다른 지표와 결합된 다양한 조건을 가진 다른 지표일 수도 있습니다.

저는 경험이 없어서 일반 코드에서 사용되는 전술이나 이론을 많이 보지 못했기 때문에 디자인은 저에게 큰 문제입니다. 그래서 지금은 다른 사람들의 코드를 읽고 그들이 어떻게 작동하는지 보고 그들이 한 일을 이해하고 그로부터 배우려고 노력하는 것만으로 배울 수 있습니다.

아무튼 열심히 하겠습니다 감사합니다
 
WHRoeder :
이 변경 시도
흠 재미있다

따라서 변수는 루프 내에서도 선언되어야 합니다.


좋아, 지금 가지고 놀아도 재미있을거야, 모두 고마워

 

나는 한 번만 인스턴스화하는 것을 선호합니다. 루프 내에서 선언하면 모든 반복에 대해 컴파일러에서 새 변수를 만듭니다. 똑같아 보여도 실제로는 그렇지 않습니다.

 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        
  
     for (i= Bars -1 ; i>= 0 ; i--)
     {
            faster = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, i ), //MODE_MAIN
            slower = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, i ); //MODE_SIGNAL 
 
diostar :
나는 한 번만 인스턴스화하는 것을 선호합니다. 루프 내에서 선언하면 모든 반복에 대해 컴파일러에서 새 변수를 만듭니다. 똑같아 보여도 실제로는 그렇지 않습니다.
정확히 어떻게 그 결론에 도달했으며 기능적 차이점은 무엇입니까?