지표 질문 - 페이지 7

 
범위 및 마지막 설정 값에 관한 것입니다. 이 모든 변수는 적어도 그들이 속한 함수 의 범위를 가지며, 전역적으로 선언되면 함수 외부의 범위를 갖습니다. 루프 내에서 변수 값이 3번 변경되면 루프 외부에서 설정한 두 번째 값을 가져올 수 없습니다. 루프 외부의 코드가 실행될 때까지 변수는 세 번째 값으로 설정되기 때문입니다.
 
내가 이런 것을 사용한다면

그리고 shift 3을 사용하여 val1을 선언한다고 가정해 보겠습니다.
그리고 루프는 물론 shift i입니다.

루프 외부에서 val1을 참조하는 경우 val1 global 또는 val1 looped에 대해 이야기하고 있습니까?

val3 및 val4 같은 if 문에 대해 별도의 전역 프랙탈 을 추가해야 하는지 궁금합니다.

나는 여기에 갇힌 것 같지만 ABCD 체계가 적어도 약간의 진전을 보이고 있는 것 같습니다.

어쨌든 여기에 코드가 있습니까?

 //+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                      my attempt at an ABCD scheme and fib retrace | 
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


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

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()
  {
   
        
   int i= 0 ;                
   val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
   val2= iFractals ( NULL , 0 , MODE_LOWER, 3 ); 
  


for (i= 0 ; val1== 0 || val2== 0 ; i++)
     {
     if ( iFractals ( NULL , 0 , MODE_UPPER,i) > 0 && val1 == 0 ) 
     val1 = iFractals ( NULL , 0 , MODE_UPPER, i);
     if ( iFractals ( NULL , 0 , MODE_LOWER, i) > 0 && val2 == 0 )
     val2 = iFractals ( NULL , 0 , MODE_LOWER, i);
     double A = val2;
     if (A != 0 ) 
     Print (A, " A loop down" );
     double a = val1;
     if (a != 0 )
     Print (a, " a loop up" );
      
     //Print (" Last UPPER Fractal at ", val1, " Last LOWER Fractal at ", val2);
         
     }   
                            
       if (val1 > 0 )
         {
         //Print (val1, " val1");
         //Print(TimeToStr(Time[3],TIME_DATE|TIME_MINUTES), " = val1 time");      
         //datetime b = Time[3];
         ////Print (A, " A if");
         double Z=(val1-A)/ 2 ; //my attempt at a .50 retrace in pips but can be any fib level
         double C=A+Z; //using the calc above to get the retrace value at .50
         //Print (C, " C");
         if (Bid<=C && Bid > A) //C will be somewhere in between here
         Print (Low[ 0 ], " Low [0] " , C, " = C" );
         // some other signal here to trade at retrace
         }        
         
         

       if (val2 < 0 )
         {
         //Print (val2, " val2");
         //Print(TimeToStr(Time[3],TIME_DATE|TIME_MINUTES), " = val2 time");
         //datetime c = Time[3];
         //Print(a, " a");
         double z=(a-val2)/ 2 ; //my attempt at a .50 retrace in pips but can be any fib level
         double c=a+z; //using the calc above to get the retrace value at .50
         //Print (c, " c");
         if (Bid<=c && c < a) //c will be somewhere in between here
         Print (Low[ 0 ], " Low [0] " , c, " = c" );
         //some other signal here to trade at retrace
         }
         
                   
                
   return ( 0 );
  }    

//+------------------------------------------------------------------+


따라서 A는 이전 저점이고 val1은 현재 시프트 3이어야 하며 및 val2와 동일해야 합니다.

빈 값을 인쇄하지 않도록 !=0 문을 추가했기 때문에 A와 a가 올바른 값을 참조하고 있는지 확인하기 위해 몇 가지를 더 다시 테스트해야 합니다.
얼핏보면 괜찮은거같은데 다시 확인해봐야겠네요

어쨌든 이것을 다시 말하면:
내 if(문)의 val1이 올바른 조건을 올바르게 참조합니까 아니면 시프트 3을 참조하기 위해 완전히 다른 iFractal이 필요합니까?
제대로 작동하는지 여부를 알 수 없습니다. 작동하는 것처럼 보이지만 뭔가 잘못된 것 같고 손가락을 대고 종료할 수 없습니다.

조언 부탁드립니다

감사해요

이것은 더 이상 지표 주제가 아니지만 새 주제로 옮겨야 합니까?

 
Agent86 :
내가 이런 것을 사용한다면

그리고 shift 3을 사용하여 val1을 선언한다고 가정해 보겠습니다.
그리고 루프는 물론 shift i입니다.

루프 외부에서 val1을 참조하면 val1 global 또는 val1 루프에 대해 이야기하게 됩니까?

val3 및 val4 같은 if 문에 대해 별도의 전역 프랙탈을 추가해야 하는지 궁금합니다.

val1 및 val2 는 전역 범위로 선언되고 i 는 start() 내에서 로컬로 선언됩니다.

루프 내부 또는 외부의 val1 및 val2에는 마지막으로 할당된 값이 있습니다. . . 루프 전에 발생하고 루프 내부 에서 값이 변경될 수 있습니다. . . 루프가 종료되면 값이 그대로 유지되며 다음에 start() 가 호출될 때까지 그대로 유지되고 재설정된 다음 루프에서 수정될 수 있습니다. . . 등 등

 
RaptorUK :

val1 및 val2 는 전역 범위로 선언되고 i 는 start() 내에서 로컬로 선언됩니다.

루프 내부 또는 외부의 val1 및 val2에는 마지막으로 할당된 값이 있습니다. . . 루프 전에 발생하고 루프 내부 에서 값이 변경될 수 있습니다. . . 루프가 종료되면 값이 그대로 유지되며 다음에 start() 가 호출될 때까지 그대로 유지되고 재설정된 다음 루프에서 수정될 수 있습니다. . . 등 등

흠, 그래서 결정 결정.

루프에 있는 동안 값을 추적하고 val1 및 val2 =iFractal,,,3을 다시 선언하면 됩니다. 재설정하려면 A=val2 및 a=val1을 선언한 후에만 값이 있으므로 이 권한이 있는 경우 이전 프랙탈 이 되기를 바랍니다.

또는 루프 외부에서 val 1 및 val2를 다시 선언할 수 있지만 A의 값을 느슨하게 하고 싶지 않으므로 적절한 시간에 해결해야 합니다.

나는 또한 이 모든 일에 대해 잘못 될 수 있지만 상관 없습니다. 어딘가에서 시작해야 하므로 지금은 이것을 선택했고 더 많은 경험을 얻으면 조정할 수 있습니다.

도와 주셔서 감사합니다
 
그래서 이것들은 일종의 관련이 없는 것입니까?

val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
val2= iFractals ( NULL , 0 , MODE_LOWER, 3 );

 

실제 iFractal을 거래에 사용하고 이전 프랙탈 을 참조하기 위해 (A) 및 (a)만 사용하려면 val3 및 val4로 변경해야 한다고 생각합니다.


계속 작업하겠습니다

감사해요

 
확인

며칠 동안 그것에 대해 생각하고 논리를 통해 작업하려고 시도한 후 완벽하지는 않지만 이제 더 나은 작업 코드를 가지고 있다고 생각하지만 진행되고 있습니다.

 //+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                              Unfinished POS slate |
//|                                          See progress notes below |
//+------------------------------------------------------------------+
#property copyright "Unfinished POS slate by Agent86"


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

double val1;
double val2;
bool traded = false;

//++++ 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()
  {
   
        
   int i= 0 ;
   int ticket,total,result;
   total = OrdersTotal ();                 
   val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
   val2= iFractals ( NULL , 0 , MODE_LOWER, 3 ); 


     
     if (val1 > 0 && traded == false)
      { 
       // in the absence of an && indicator above I get continous print statements
       // with indicator added && indicator above, then it prints A and B once as it should ???
       // I need to work this out so it won't print all the time aka trade all the time
       // A and B first values seems to initialize the whole block
       // just a reminder that they time stamps coordinate after this FYI
       // now work on C retrace and possibly signals
       // add options for user to select some candle patterns
       // add options to select indicators
       // add bells and whistles to make things fun
       // alerts,sounds,maybe poppup video animation or something
      
       double B = val1;
       Print (B, " B high" );
         if (val2== 0 )
            {
             for (i= 0 ; val2== 0 ; i++)
               {
               val2= iFractals ( NULL , 0 , MODE_LOWER, i);
               double A = val2;
                   if (A!= 0 )
                     {
                     Print (A, " A low" );
                     }
               }
             }  
      traded=true;
      }
     
     if (val2 > 0 && traded == true)
      {
      B = val2;
       Print (B, " B low" );
         if (val1== 0 )
            {
             for (i= 0 ; val1== 0 ; i++)
               {
               val1= iFractals ( NULL , 0 , MODE_UPPER, i);
               A = val1;
                   if (A!= 0 )
                     {
                     Print (A, " A high" );
                     }
               }
             }  
      traded=false;
      }
     
                    
                
   return ( 0 );
  }    

//+------------------------------------------------------------------+


      

그래서 나는 내 A와 B 값을 가지고 있고 표시 문이 초기 if(문 && 표시기)에 배치되는 동안 값은 예를 들어 MACD 더 빠르게 > 더 느림 또는 일부 표시기 명령문과 같이 한 번 인쇄됩니다.

그래서 나는 내가 원하는대로 A와 B만을 얻습니다.

내 if(문)에서 표시기 옵션을 제거할 때 왜 여러 번 인쇄되는지 잘 모르겠습니다.

여하튼 나는 미래 참조를 위해 프랙탈 등뿐만 아니라 다른 지표에도 사용할 수 있는 이 ABCD 유형의 체계에 대해 조금 더 가까워지고 있습니다.

조언 부탁드립니다

감사해요

 

도움이 될 수 있습니다. ABCD를 계산하는 데 사용할 수 있도록 마지막 도형과 교대조에 액세스할 수 있는 표시기입니다.

 iCustom ( Symbol (), 0 , "Fractal Store" , 0 , "" , 0 , 0 )

그것 은 상부 프랙탈 을 줄 것입 니다 . 낮은 프랙탈의 경우 ""를 "L"로 변경합니다.

 iCustom ( Symbol (), 0 , "Fractal Store" , 1 , "" , 0 , 0 )

가장 최근 것보다 먼저 프랙탈을 제공합니다.

파일:
 
heelflip43 :

도움이 될 수 있습니다. ABCD를 계산하는 데 사용할 수 있도록 마지막 도형과 교대조에 액세스할 수 있는 표시기입니다.

그것은 상부 프랙탈을 줄 것입니다. 낮은 프랙탈의 경우 ""를 "L"로 변경합니다.

가장 최근 것보다 먼저 프랙탈을 제공합니다.

네, 알겠습니다

이 스레드의 최신 코드를 작성하기 전에 도움을 받아 다양한 (for) 명령문을 작성했으며 버퍼에 내가 원하는 것을 그릴 수 있는 지표이기도 했습니다. 값을 사용하거나 참조할 수 있도록 해당 값을 한 번만 인쇄합니다.

이러한 다양한 for 문은 나에게 문제를 일으키고 게시한 코드와 유사하기 때문입니다.
지속적으로 값이 참이 될 때마다 값을 지속적으로 인쇄하지 않고는 값을 얻을 수 없었습니다.
나는 이것 중 일부를 해결했지만 조건이 참이면 중지하는 방법을 아직 실제로 배운 적이 없습니다.

귀하의 코드에서 도움이 될 수 있는 한 가지는 정적 날짜/시간 블록이며, 이전에 새 막대와 새 막대 시간이 들어올 때만 조건을 참조하기 위해 이 블록을 한 번만 사용했습니다.
이 부분은 제가 하는 일에 도움이 될 것입니다. 그리고 현재 코드가 현재 프랙탈을 생성하고 이전 프랙탈이 현재 작동하고 있지만

내가 주로 가지고 있는 유일한 문제는 조건이 참이 되면 계속해서 문을 인쇄하여 괜찮을 수 있다는 것입니다.

아마도 iCustom 표시기 를 사용하는 방법에 대해 더 많은 경험이 필요하고 이것이 내 문제를 많이 해결할 수 있지만 아직 학습 단계는 아닙니다.

이 코드와 EMPTY_VALUE 부분을 더 검토하겠습니다. 이제 사용 중인 것을 보니 저도 배울 수 있습니다. 이전에 제안되었지만 사용 방법을 이해하지 못했습니다.

계속 작업하겠습니다
도와 주셔서 감사합니다
 
마지막으로 내가 추가할 때 MACD 를 if(val1 > 0 && fast > slow && traded == false)에 추가할 수 있다는 것을 알아차렸습니다.

그런 다음 작동하고 A low, B high, 다음 및/또는 B low 및 A high를 인쇄하는 정확히 원하는 것만 제공합니다.

그러나 내가 이 두 if 문에서 더 빠르게 > 더 느리게 그리고 더 빠르게 < 더 느리게 꺼내면 절대 A를 높게 인쇄하지 않고 내가 혼란스러워하는 다른 것들도 계속 인쇄한다는 것을 알 수 있습니다.


계속 작업하겠습니다. EA에 다른 표시기가 없는 명령문을 한 번 인쇄하도록 해야 표시기가 코드의 ABCD 부분을 방해하지 않는다는 것을 알고 있습니다.

드로잉 보드로 돌아가기


 

문제는 val1 및 val2를 재설정하지 않은 것입니다. 따라서 최고점과 최저점을 찾았으면 재설정해야 합니다.

 double B = val1;
       Print (B, " B high" );
         if (val2== 0 )
            {
             for (i= 0 ; val2== 0 ; i++)
               {
               //Print("i "+i);
               val2= iFractals ( NULL , 0 , MODE_LOWER, i);
               double A = val2;
                   if (A!= 0 )
                     {
                     Print (A, " A low" );
                     }
               }
             }  
      traded=true;
      }
     
   val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
   val2= iFractals ( NULL , 0 , MODE_LOWER, 3 ); 

     if (val2 > 0 && traded == true)
      {
      B = val2;
       Print (B, " B low" );
         if (val1== 0 )
            {
             for (i= 0 ; val1== 0 ; i++)
               {
               val1= iFractals ( NULL , 0 , MODE_UPPER, i);
               A = val1;
                   if (A!= 0 )
                     {
                     Print (A, " A high" );
                     }
               }
             }  
      traded=false;
      }
도움이 되기를 바랍니다.