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

 

문제는 이러한 티켓이 두 개 이상 있다는 것입니다. 아마도 4, 나는 확실하지 않습니다. 따라서 orderselect가 저장하지 않는 티켓 번호 및 기타 정보가 있는 클래스를 만들었습니다. 따라서 아래에 액세스하는 것이 바람직합니다. 그러나 지금까지는 클래스 개체를 만들고 CarrayObj 에 던진 다음 인덱스로 가져와 티켓을 비교하고 추가로 분석하는 것만 생각했습니다. 문제는 그가 질문한 이유입니다. 오류 처리로 인해 손실된 내용입니다. 그러나 나는 그것을 알아 냈습니다. 감사합니다. 다른 곳에서 비난해야합니다. 악의적인 신사 여러분 AlexeyVik - 신속한 답변에 감사드립니다!

 

 
 
안녕하세요! 전략 테스터 에서 거래가 열리지 않는 이유를 작성하십시오. 오류는 로그에 기록됩니다. (2015.07.13 00:22:39.218 TestGenerator: 일치하지 않는 데이터 오류(2013.07.11 05:00에서 높은 값 1.31150에 도달하지 않음) 최소 기간에서 높은 가격 1.31140 불일치) 업데이트된 인용문 EA 코드는 다음과 같습니다.
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int    stoploss= 50 ; 
int    takeprofit= 30 ;
int        slipage= 2 ;

//-------------------------------------------------------------------+
  
   if ( OrdersTotal ()< 1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
       if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
       if (V1()== true ) 
     
       ticket = OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask,slipage,Ask-stoploss* Point ,Ask+takeprofit* Point , "" , 123 , 0 ,Red);
     
//-------------------------------------------------------------------+ 
     if ( OrdersTotal ()< 1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
       if (V2()== true ) 
     
       ticket = OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid,slipage,Bid+stoploss* Point ,Bid-takeprofit* Point , "" , 123 , 0 ,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return ;}
//+------------------------------------------------------------------+
bool V1( ){
   int       i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
       return ( false );
   }
  }    
 }
 return ( true ); 
}

bool V2( ){
   int       i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_SELL) {
       return ( false );
   }
  }
 }
 return ( true ); 
}

)
 
rylay :
안녕하세요! 전략 테스터에서 거래가 열리지 않는 이유를 작성하세요. 로그에 오류가 기록됩니다. (2015.07.13 00:22:39.218 TestGenerator: 일치하지 않는 데이터 오류(2013.07.11 05:00에서 높은 값 1.31150에 도달하지 않음) 최소 기간에서 높은 가격 1.31140 불일치) 업데이트된 인용문 EA 코드는 다음과 같습니다.
)

언급한 테스터의 오류에 관해서는 진드기를 테스트할 때 항상 그렇습니다. MT4에서 인용의 역사는 불완전하며 항상 불일치가 있습니다.

코드는 버그로 가득 차 있습니다. 변수 막대*가 초기화되지 않고 시작 함수가 반환하는 내용이 명확하지 않으며 거래 함수 실행에 대한 검사가 없습니다. 수정하십시오.

코드 시작 부분에 #property strict 를 추가합니다.

그리고 우리는 이미 주문 유형을 결정하기 위한 두 가지 함수를 만들었기 때문에 각 유형의 주문 카운터를 거기에 포함하고 비교하는 대신 if( OrdersTotal()<1...) if( OrdersBuy<1... ), 만약 ( OrdersSell<1 ...)? 더 정확할 것입니다.

 

하나의 바 조건에서 하나의 딜만 여는 방법을 알려주세요, 딜이 바 내부에서 이루어지는데 딜이 체결되는 시점에 바로 같은 바에 오프닝 시그널이 나타납니다.

즉, 바는 주문을 열라는 신호를 주었습니다. 열렸고 짧은 시간이 걸렸습니다. 거래가 마감되었지만 고문은 첫 번째 주문을 마감하면 이 막대 내에서 열 수 있는 조건이 여전히 있기 때문에 두 번째 주문을 즉시 엽니다. 한 바에 하나의 거래만 있다면 그게 필요합니다. 그리고 다음 거래를 열기 위해 다른 바가 열리기를 기다립니다.

 
Poinson :

하나의 바 조건에서 하나의 딜만 여는 방법을 알려주세요, 만약 딜이 바 안에서 이루어지는데 딜이 체결되는 순간 같은 바에 바로 오프닝 시그널이 나타납니다.

즉, 바는 주문을 열라는 신호를 주었습니다. 열렸고 짧은 시간이 걸렸습니다. 거래가 마감되었지만 고문은 첫 번째 주문을 마감하면 이 막대 내에서 열 수 있는 조건이 여전히 있기 때문에 두 번째 주문을 즉시 엽니다. 한 바에 하나의 거래만 있다면 그게 필요합니다. 그리고 다음 거래를 열기 위해 다른 바가 열리기를 기다립니다.

bool _이미 열림 = 거짓;

if (isNewBar()){ _이미 열림 = 거짓;}

if (! OrderSend (...) ) { /* 오류 처리 */; } else { _ybe 열림 = true; }

isNewBar() - 기사에서와 같이 표준, 정적 datetime 사용 date = Time[0];

if (_이미 열림) { 반환; // 주문을 보내지 않음 }

 
evillive :

언급한 테스터의 오류에 관해서는 진드기를 테스트할 때 항상 그렇습니다. MT4에서 인용의 역사는 불완전하며 항상 불일치가 있습니다.

코드는 버그로 가득 차 있습니다. 변수 막대*가 초기화되지 않고 시작 함수가 반환하는 내용이 명확하지 않으며 거래 함수 실행에 대한 검사가 없습니다. 수정하십시오.

코드 시작 부분에 #property strict 를 추가합니다.

그리고 우리는 이미 주문 유형을 결정하기 위한 두 가지 함수를 만들었기 때문에 각 유형의 주문 카운터를 거기에 포함하고 비교하는 대신 if( OrdersTotal()<1...) if( OrdersBuy<1... ), 만약 ( OrdersSell<1 ...)? 더 정확할 것입니다.

고맙습니다. 수정하겠습니다 .. 조건이 하나였을 때:
 if ( OrdersTotal ()< 1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask,slipage,Ask-stoploss* Point ,Ask+takeprofit* Point , "" , 123 , 0 ,Red);
모든 것이 제대로 작동하지 않았기 때문에 제가 질문한 것입니다.
 
danik :

bool _이미 열림 = false;

if (isNewBar()){ _이미 열림 = 거짓;}

if (!OrderSend(...) ) { /* 오류 처리 */; } else { _ybe 열림 = true; }

isNewBar() - 기사에서와 같이 표준, 정적 datetime 사용 date = Time[0];

if (_이미 열림) { 반환; // 주문을 보내지 않음 }

그것은 'isNewBar'를 씁니다 - 함수 가 정의되지 않았습니다 2015년

저는 사실 마스터가 아닙니다. 가능하면 복사해서 붙여넣기 해주시면 감사하겠습니다.

 
Poinson :

그것은 'isNewBar'를 씁니다 - 함수가 정의되지 않았습니다 2015년

저는 사실 마스터가 아닙니다. 가능하면 복사해서 붙여넣기 해주시면 감사하겠습니다.

포럼에서 새 막대의 정의에 대한 기사를 찾고, 거기에 isNewBar() 함수를 복사하십시오. 아마도 이해할 수 있을 것입니다. 복잡한 것은 없습니다. 새 막대 의 여는 시간 이 비교됩니다(인덱스 0, 즉 마지막 것), 시간이 이전보다 길면 새 막대가 방금 나타납니다. 표시되면 다른 조건이 있는 경우 이미 새 거래를 열 수 있습니다.
 
Poinson :

그것은 'isNewBar'를 씁니다 - 함수가 정의되지 않았습니다 2015년

저는 사실 마스터가 아닙니다. 가능하면 복사해서 붙여넣기 해주시면 감사하겠습니다.

예, 코드 기반의 모든 Expert Advisor에서 찾을 수 있습니다!

 //в старте перед условиями входа:
       if (NewBar() == true )
      { 
//----------------------
   return ( 0 );
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
   static datetime lastbar = 0 ;
   datetime curbar = iTime( NULL ,15, 0 );
   if (lastbar != curbar) 
  {
    lastbar = curbar;
     return ( true );
  }
   else return ( false );
} 
 
borilunad :

예, 코드 기반의 모든 Expert Advisor에서 찾을 수 있습니다!

감사합니다)) 가장 강한 것은 간단합니다! 모든 것이 처음으로 작동했습니다!

모두에게 감사합니다!