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

 

EA는 거래 후 막대 33에서 종료됩니다.

 static datetime t;

if (условие)
      {
      Opn_B = true ; 
      t=Time[ 0 ];
      minimum = iLow( Symbol (), Period (), 0 );
      }
if (Time[ 33 ]>t) 
          {                                      
          Cls_B= true ;              
          }

실생활에서도 테스터에서도 43마디로 나왔다. 다섯 번째 막대에서 종료 매개변수를 설정하려고 했지만 모든 것이 정상입니다. 친애하는, 당신의 의견으로는 무엇이 문제가 될 수 있습니까?

 
Forexman77 :

EA는 거래 후 막대 33에서 종료됩니다.

실생활에서도 테스터에서도 43마디로 나왔다. 다섯 번째 막대에서 종료 매개변수를 설정하려고 했지만 모든 것이 정상입니다. 친애하는, 당신의 의견으로는 무엇이 문제가 될 수 있습니까?


아니면 (조건) 이 여러 번 실행된 경우 (예: 10번째 마디에서 한 번 더)? 그리고 이 실행은 수명을 지연시켰습니다.

 
ALXIMIKS :


또는 (조건) 이 여러 번 실행된 경우 (예: 10번째 마디에서 한 번 더)? 그리고 이 실행은 수명을 지연시켰습니다.

한 거래: 15:37 진입, 16:19 출구. 더 정확하려면 41개 막대에서 종료합니다.
 
Forexman77 :
한 거래: 15:37 진입, 16:19 출구. 더 정확하려면 41개 막대에서 종료합니다.


그리고 그것을 iBarShift로 대체하면 오류가 남아있는 것이 흥미 롭습니다 ??? 아마도 역사에 막대가 누락되었을 수 있습니다(확실히 구멍이 없습니까?)?

조건을 충족한 후 열린 막대 목록을 입력하고 실제로 열린 막대의 수를 확인하십시오. 그렇지 않으면 시간을 참조하는 것이 어떻게 든 매우 정확하지 않습니다.

 
ALXIMIKS :


그리고 그것을 iBarShift로 대체하면 오류가 남아있는 것이 흥미 롭습니다 ??? 아마도 역사에 막대가 누락되었을 수 있습니다(확실히 구멍이 없습니까?)?

조건을 충족한 후 열린 막대 목록을 입력하고 실제로 열린 막대의 수를 확인하십시오. 그렇지 않으면 시간을 참조하는 것이 어떻게 든 매우 정확하지 않습니다.

코드가 이렇게 되어야 합니까?

 static datetime t;
datetime s=Time[ 33 ]>t;

if (условие)
    {
      Opn_B = true ; 
      t=Time[ 0 ];
       int shif= iBarShift( Symbol (), PERIOD_M1 ,t, false );
      minimum = iLow( Symbol (), Period (), 0 );
      }
if (iBarShift( Symbol (), PERIOD_M1 ,s, false )) 
    {                                      
     Cls_B= true ;              
    }

이러한 코드는 Expert Advisor를 반복합니다.

 

안녕하세요, 첫 번째 줄뿐만 아니라 각 줄의 막대당 한 번씩 경고가 전달되도록 도와주세요.

시간에 따라 신호 수를 제한했지만 하나의 막대에 대한 버퍼를 만드는 방법을 이해하지 못합니다.

 datetime LastAlertTime = 0;
 int start()
  {

   string namesymb= Symbol ();
   string tf= Period ();

       for ( int i = ObjectsTotal ()- 1 ; i >= 0 ; i--)
      {
         string name = ObjectName (i);
         
         if (ObjectType(name) == OBJ_TREND )
         {
             double value = ObjectGetValueByShift(name, 0 );                    
             if (Bid <= value + Point && Bid >= value - Point )          
            {
             if (LastAlertTime < Time[ 0 ]){
            LastAlertTime = Time[ 0 ];
            
               Alert (namesymb, "  M" ,tf, "   " ,name);
             }
                 Comment ( "\n\n Alert running \n " , TimeToStr( TimeLocal (), TIME_DATE|TIME_SECONDS), "\n\n M" ,tf, "   " ,name); 
            } 
         }      
}
 
Forexman77 :

EA는 거래 후 막대 33에서 종료됩니다.

실생활에서도 테스터에서도 43마디로 나왔다. 다섯 번째 막대에서 종료 매개변수를 설정하려고 했지만 모든 것이 정상입니다. 친애하는, 당신의 의견으로는 무엇이 문제가 될 수 있습니까?


냉정한 마음으로 시작합시다.

플래그 동작 시간 Opn_B = true ; 주문이 동시에 열리지 않을 수 있기 때문에 아직 아무 의미가 없습니다.

OrderOpenTime 주문 개시 시간을 사용하거나 t 변수를 성공적인 개시 후 시간으로 설정할 수 있습니다.

다음: 당신이 사용한

minimum = iLow( Symbol (), Period (), 0 );

1) iLow 가 필요합니까 아니면 동일한 통화와 기간을 사용하는 경우 Low 가 더 낫습니까?

2) Symbol ()과 Period ( )의 값은 여러 번 사용하는 것이 변수로 유도하는 것이 좋습니다. 모든 것이 성능에 영향을 미칩니다. 익숙해지십시오.

분 차트를 희생시키면서 - 1분 동안 틱이 하나도 없었다면 - 새로운 막대가 그려지지 않았습니다(농담일 수 있음)

그리고 iBarShift에 관해서는

 static datetime t;

if (условие)
      {
      Opn_B = true ; 
      t=Time[ 0 ];
      minimum = iLow( Symbol (), Period (), 0 );
      }
if (iBarShift( Symbol (), 1 ,t, false )> 33 ) 
          {                                      
          Cls_B= true ;              
          }

현시점에서 가장 적절한 선택은

 if (( TimeCurrent -t)/ 60 )> 33 ) Cls_B= true ;
 
oleksaz :

안녕하세요, 첫 번째 줄뿐만 아니라 각 줄의 막대당 한 번씩 경고가 전달되도록 도와주세요.

시간에 따라 신호 수를 제한했지만 하나의 막대에 대한 버퍼를 만드는 방법을 이해하지 못합니다.

 string namesymb= Symbol ();
string tf= Period ();

매 틱마다 변수를 재할당할 가치가 있습니까?

string tf = Period () 가 1,000,000주기 에서 성능에 영향을 주나요? 아니면 int tf = Period () 가 더 정확 합니까? 여기서 나는 모른다.

 if (Bid <= value + Point && Bid >= value - Point)  

조건이 맞습니까? 그리고 hepchik이 4핍이라면?

 if (LastAlertTime < Time[ 0 ])
LastAlertTime = Time[ 0 ];
          

여기에 또 다른 문제가 있습니다. 즉, 첫 번째 줄에 대해 조건이 충족되면 두 번째 줄에 대해 이미 분명히 거짓이고 경고가 표시되지 않습니다.

촛불의 여는 시간은 새 촛불이 도착해야 변경되기 때문에 다음 틱에도 표시되지 않습니다.

 
ALXIMIKS :


현시점에서 가장 적절한 선택은


미안하지만 시간이 지남에 따라 막대 수 를 세는 것은 매우 부적절한 접근 방식입니다.
 
ALXIMIKS :

매 틱마다 변수를 재할당할 가치가 있습니까?

string tf = Period () 가 1000000주기 에서 성능에 영향을 미치나요? 아니면 int tf = Period () 가 더 정확 합니까? 여기 잘 모르겠습니다.

조건이 맞습니까? 그리고 hepchik이 4핍이라면?

여기에 또 다른 문제가 있습니다. 즉, 첫 번째 줄에 대해 조건이 충족되면 두 번째 줄에 대해 이미 분명히 거짓이고 경고가 표시되지 않습니다.

촛불의 여는 시간은 새 촛불이 도착해야 변경되기 때문에 다음 틱에도 표시되지 않습니다.


 int start()
  {
string scrdate,nametf;

         if ( Period ()== PERIOD_M1 )  nametf= "9_M1" ;
         if ( Period ()== PERIOD_M5 )  nametf= "8_M5" ;
         if ( Period ()== PERIOD_M15 ) nametf= "7_M15" ;
         if ( Period ()== PERIOD_M30 ) nametf= "6_M30" ;
         if ( Period ()== PERIOD_H1 )  nametf= "5_H1" ;
         if ( Period ()== PERIOD_H4 )  nametf= "4_H4" ;
         if ( Period ()== PERIOD_D1 )  nametf= "3_D1" ;
         if ( Period ()== PERIOD_W1 )  nametf= "2_W1" ;
         if ( Period ()== PERIOD_MN1 ) nametf= "1_Monthly" ;
/////////////////  
       for ( int i = ObjectsTotal ()- 1 ; i >= 0 ; i--) //мониторим все объекты
      {
         string name = ObjectName (i); //имя объектов берем из i переменной
         
         scrdate= StringConcatenate ( Symbol (), " " ,TimeToStr( TimeCurrent (), TIME_DATE), "_" ,Hour(), "." ,Minute(), " " ,nametf, " " , ".jpg" ); //,name

         if (ObjectType(name) == OBJ_TREND ) //отбираем тип по имени 
         {
             double value = ObjectGetValueByShift(name, 0 ); //функция для объектов
            
             Comment ( "\n\n Alert running \n " , TimeToStr( TimeLocal (), TIME_DATE|TIME_SECONDS), "\n\n M" , Period (), "   " ,name);           
            
             if(Bid <= value + Point && Bid >= value - Point)
             
            {
             if (LastAlertTime < Time[ 0 ]){
            LastAlertTime = Time[ 0 ];
            
               Alert ( Symbol (), "  M" , Period (), "   " ,name);
               /////////////////////////////////////////////////
               WindowScreenShot(scrdate, 1920 , 1200 , 0 ,- 1 ,- 1 );
               ////////////////////////////////////////////////////////
             }               
            }
         }
}
   return ( 0 );
  }

1. 제거

2. 신호가 없으면(당연히 있어야 함) 신호 없음 -> 가격 없음 -> 거래 없음에 동의합니다.

3. 위에서도 말했지만 어떻게 해야할지 모르겠다

PS 답변 감사합니다