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

 

모두에게 좋은 하루! 이러한 문제가 발생한 적이 있습니까? 실생활에서 트롤은 작동하지만 테스터에서는 작동하지 않습니다. 일반적으로 나는 테스터에서 고문이 손절매를 배치해야 할 때 이런 일이 발생하지 않지만 때때로 설정하지만 패턴을 찾지 못했습니다. 자연스럽게, 이로 인해 테스트의 정확도가 크게 저하됩니다. 데모 예금에 대한 동일한 고문은 흔적이 작동하고 있음을 보여줍니다. 터미널은 오류를 보고하지 않습니다. 이것은 코드의 버그입니까 아니면 터미널 버그입니까? 이해를 도와주세요? 나는 이미 전체 코드를 만졌고 문제가 무엇인지 이해할 수 없습니다. 트롤 전략을 변경하고 싶지 않습니다. 나는 고문의 전체 코드를 첨부하고 아래는 후행 자체의 코드입니다 ( Yuri Dzyuban 의 촛불 그림자로 후행 약간 수정)

 void TrailingByShadows( int ticket, int tmfrm, int bars_n, int indent) {  
   int i;
   double new_extremum;

   if ((bars_n< 1 ) || (indent< 0 ) || (ticket== 0 ) || ((tmfrm!= 1 ) && (tmfrm!= 5 ) && (tmfrm!= 15 ) && (tmfrm!= 30 ) && (tmfrm!= 60 ) && (tmfrm!= 240 ) && (tmfrm!= 1440 ) && (tmfrm!= 10080 ) && (tmfrm!= 43200 )) || (! OrderSelect (ticket,SELECT_BY_TICKET))) {
       Print ( "Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов." );
       return ( 0 );
   } 
   if (OrderType()==OP_BUY) {
       for (i= 1 ;i<=bars_n;i++) {
         if (i== 1 ) new_extremum = iLow( Symbol (),tmfrm,i); else if (new_extremum>iLow( Symbol (),tmfrm,i)) new_extremum = iLow( Symbol (),tmfrm,i);
      }  
  
       if ((((new_extremum - indent* Point )>OrderStopLoss() + 1.0 * Point ) || (OrderStopLoss()== 0 )) && ((new_extremum - indent* Point )>OrderOpenPrice()) && (new_extremum - indent* Point <Bid-MarketInfo( Symbol (),MODE_STOPLEVEL)* Point ) && (getLots(new_extremum) > 0 ))
       if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent* Point ,OrderTakeProfit(),OrderExpiration()))
         Print ( "Не удалось модифицировать ордер №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
   }
   if (OrderType()==OP_SELL) {
       for (i= 1 ;i<=bars_n;i++) {
         if (i== 1 ) new_extremum = iHigh( Symbol (),tmfrm,i); else if (new_extremum<iHigh( Symbol (),tmfrm,i)) new_extremum = iHigh( Symbol (),tmfrm,i);
      }         
       if ((((new_extremum + (indent + MarketInfo( Symbol (),MODE_SPREAD))* Point )<OrderStopLoss() - 1.0 * Point ) || (OrderStopLoss()== 0 )) && ((new_extremum + (indent + MarketInfo( Symbol (),MODE_SPREAD))* Point )<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo( Symbol (),MODE_SPREAD))* Point >Ask+MarketInfo( Symbol (),MODE_STOPLEVEL)* Point ) && (getLots(new_extremum) > 0 ))
       if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo( Symbol (),MODE_SPREAD))* Point ,OrderTakeProfit(),OrderExpiration()))
         Print ( "Не удалось модифицировать ордер №" ,OrderTicket(), ". Ошибка: " , GetLastError ());     
   }      
}

double getLots( double newSL) {
   int opnTime = 0 ; // время открытия трейда для цикла пересчета позиций
   double lotSum = 0 ; 
   for ( int i = 0 ; i <= OrdersTotal ()- 1 ; i++) {
       OrderSelect (i, SELECT_BY_POS);     
       if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { 
         opnTime = OrderOpenTime(); 
         if (OrderType() == OP_BUY)    { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point ; }
         if (OrderType() == OP_SELL)   { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point ; }
      }
   }   
   return (lotSum);
}
파일:
avalanche.mq4  12 kb
 
어떤 기간에 어떤 품질로 테스트합니까?
 

EURUSD, M1, 99%, 90%

먼저 MT를 사용하여 다운로드한 표준 틱 기록 을 테스트용으로 사용했는데 이 문제가 발견되었고 견적 기록에서 설명할 수 없는 격차가 발생했으며 Tick Data Suite로 전환하여 Dukascopy로 견적을 로드했는데 품질이 90에서 90으로 향상되었습니다. 99, 그러나 문제는 남아있었습니다.

추신: 아마도 상황이 실제 상황과 같거나 충분히 오랫동안(약 3주) 테스트하지 않았기 때문에 이 기간 동안 수동으로 여러 번 닫아야 했습니다. 트롤이 설치되어 있지는 않았지만 터미널이 있는 기계를 주기적으로 꺼야 하고 이것이 고문의 작업에 어떻게든 영향을 미쳤기 때문이라고 생각했습니다. 가장 최근에는 이 케이스를 일주일 전에 VPS로 옮겼고 지금은 같은 상황입니다. 떠오르는 것 같다

 

테스트는 tmfrm 변수의 값과 동일한 시간 프레임에서 수행됩니까?

그렇지 않은 경우 tmfrm 시간 프레임에 대한 기록이 있는지 확인해야 합니다.

그리고 bars_n 변수에서 전송된 탱크의 수는 tmfrm 변수에서 전송된 시간 프레임에 해당합니까?

 
keekkenen :

테스트는 tmfrm 변수의 값과 동일한 시간 프레임에서 수행됩니까?

그렇지 않은 경우 tmfrm 시간 프레임에 대한 기록이 있는지 확인해야 합니다.

그리고 bars_n 변수에서 전송된 탱크의 수는 tmfrm 변수에서 전송된 시간 프레임에 해당합니까?


예, 맞는 것 같습니다. 다른 사람의 기능 코드를 헐뜯고 자세히 다루지 않았으며 이 매개변수를 고려하지 않았습니다. 결과적으로 손절매 는 다른 기간에 설정되었습니다. 도와 주셔서 감사합니다.

추신: 항상 이렇습니다. 작은 일로 인해 코드가 우리가 원하는 대로 전혀 작동하지 않습니다.

 

안녕하세요! 잡지에 빨간 벽돌로 도대체 뭐가 나왔는지 누가 압니까?!

2013.08.05 08:00:41 '9291791': 신호 - 업데이트 신호를 찾을 수 없음 - 기지에서 7400

내 코드에서 모든 것이 정상입니다! 그리고 신호도 함께! 그리고 이것은 무엇을 의미합니까?

 
Mepkypuu :


예, 맞는 것 같습니다. 다른 사람의 기능 코드를 헐뜯고 자세히 다루지 않았으며 이 매개변수를 고려하지 않았습니다. 결과적으로 손절매는 다른 기간에 설정되었습니다. 도와 주셔서 감사합니다.

추신: 항상 이렇습니다. 작은 일로 인해 코드가 우리가 원하는 대로 전혀 작동하지 않습니다.


나는 일찍 기뻐하기 시작했고 후행이 더 올바르게 작동하기 시작했지만 작동하지 않는 경우가 역사에 여전히 있습니다. 문제는 부분적으로만 해결됩니다.
 
splxgf :

확산을 수정합니까? 그렇지 않으면 실행 중에 현재 것이 취해지며 뉴스와 저녁에는 주간과 다릅니다.

확산을 어떻게 고칠 수 있습니까? 실제로 OrderSend 에는 Ask 또는 Bid가 표시됩니다.
 
Mepkypuu :

나는 일찍 기뻐하기 시작했고 후행이 더 올바르게 작동하기 시작했지만 작동하지 않는 경우가 역사에 여전히 있습니다. 문제는 부분적으로만 해결됩니다.

사실 후행이라고 하는 것은 다른 방식으로 계산되며 그 동작이 비논리적일 수 있습니다.
 
Leo59 :

확산을 어떻게 고칠 수 있습니까? 실제로 OrderSend에는 Ask 또는 Bid가 표시됩니다.
테스터 아래 TF에서!