거래 로봇을 시장에 출시할 때 유효성 검사 오류가 발생했습니다. - 페이지 6

 
Andrey Kaunov :

당신은 내가 확인하지 않는다고 생각합니다. Lot 사이즈는 별도의 기능에서 확인

여기에 제한이 필요하지 않습니다. 손절매와 이익실현은 거래를 열 때 0과 같습니다. RefreshRates()는 로트를 계산할 때 데이터를 업데이트합니다. 통신점검 등 물론 각 입구 앞에 있지는 않지만 그것이 모든 것의 요점은 아닙니다. OrderSend가 요청을 보낸 경우 130, 131 등의 특정 오류가 발생했을 것입니다. 하지만 나는 그것을 가지고

미결 주문을 보내려고 하지 않습니다. 마지막 테스트에서도 OnInit() 함수 에서 제어 지연을 설정했을 때


아마도. 하지만 이미 모든 것을 확인했습니다. 어디를 더 파야할지 모르겠습니다.

로트 정규화 기능에서는 로트의 최대/최소값을 확인한 후 반올림합니다.
 
Artyom Trishkin :
로트 정규화 기능에서는 로트의 최대/최소값을 확인한 후 반올림합니다.

예, 사용합니다.

 MathRound();
추신: 왜냐하면 우리는 여전히 입력 매개변수를 파헤쳐야 한다고 생각합니다. 때로는 테스트를 통과합니다. 각 매개변수에 대해 바보 검사를 수행하십시오.
 
더 이상 유효성 검사기 테스트 로그에 대해 이야기하지 않습니다. 그러나 적어도 테스트를 통과하지 못한 매개변수는 보낼 수 있습니다. 코드를 수정하기 위해 집착할 것은 전혀 없습니다. 테스트 매개변수 선택의 다양성이 무한할 수 있음을 이해합니다. int 유형의 변수는 +50000 및 -45000 모두와 동일하게 설정할 수 있지만 일부 입력 매개변수를 값의 일부 범위로 제한할 수는 없습니다. 악기마다 다를 것입니다.
 
Andrey Kaunov :
더 이상 유효성 검사기 테스트 로그에 대해 이야기하지 않습니다. 그러나 적어도 테스트를 통과하지 못한 매개변수는 보낼 수 있습니다. 코드를 수정하기 위해 집착할 것은 전혀 없습니다. 테스트 매개변수 선택의 다양성이 무한할 수 있음을 이해합니다. int 유형의 변수는 +50000 및 -45000과 동일하게 설정할 수 있지만 일부 입력 매개변수를 어리석은 값 범위로 제한할 수는 없습니다. 기기에 따라 다를 수 있습니다.

어떤 경우에도 거래 로트가 유효한지 확인해야 합니다. 코드의 허용 가능한 범위를 확인한 후 코드에서 많은 변경 사항을 지적한 것은 헛되지 않았습니다.

그리고 수행해야 하는 완전히 어리석은 입력 매개변수를 확인하는 것입니다.

 

따라서 많은 문제가 없습니다. 최대/최소를 확인합니다. 반올림하기 전에 단계로 나눈 다음 반올림된 정수 에 다시 단계를 곱합니다. 우리는 완전히 정확한 로트를 얻습니다.

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots( string symbol, double lot, bool is_margin= true ) {
   if (lot<= 0 ) return ( 0.0 );
   RefreshRates();
   double min= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   double max= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   double step = SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP ); 
   double free = AccountFreeMargin()* 0.95 ;
   double margin = MarketInfo(symbol,MODE_MARGINREQUIRED);
   double _lot=lot<min?min:(lot>max?max:lot);
          _lot= MathRound (_lot/ step )* step ;
   if (is_margin && _lot*margin>free)  _lot= 0.0 ; //MathFloor(free/margin/step)*step;
   return (_lot);
}

_lot(0.568)/step(0.01)=56.8

MathRound(56.8)=57

57*스텝(0.01)=0.57

다음으로 여는 여유 여백이 충분한지 확인합니다. 검증인은 로트에서 맹세하지 않습니다. 그는 잘못된 입력 매개변수를 입력했기 때문에 거래 기능을 볼 수 없습니다. EA는 단순히 특정 조합으로 거래를 하지 않습니다! 나는 조건 없는 마틴이 없고, 모든 양초에서 열리는 그리드도 없습니다. 논리적 어드바이저가 특정 매개변수를 다루지 않는다는 것을 검증인에게 설명하는 방법.

 
Andrey Kaunov :

따라서 많은 문제가 없습니다. 최대/최소를 확인합니다. 반올림하기 전에 단계로 나눈 다음 반올림된 정수 에 다시 단계를 곱합니다. 우리는 완전히 정확한 로트를 얻습니다.

_lot(0.568)/step(0.01)=56.8

MathRound(56.8)=57

57*스텝(0.01)=0.57

다음으로 여는 여유 여백이 충분한지 확인합니다. 검증인은 로트에서 맹세하지 않습니다. 그는 잘못된 입력 매개변수를 입력했기 때문에 거래 기능을 볼 수 없습니다. EA는 단순히 특정 조합으로 거래를 하지 않습니다! 나는 조건 없는 마틴이 없고, 모든 양초에서 열리는 그리드도 없습니다. 논리적 어드바이저가 특정 매개변수를 다루지 않는다는 것을 검증인에게 설명하는 방법.

설명하지 말고 EA가 잘못된 입력 매개변수를 수정하는지 확인하십시오. 바람직하게는 유효하지 않은 값과 허용 가능한 값으로의 수정에 대한 메시지를 로그에 포함합니다.

그리고 어떤 이유로 사용자가 잘못된 매개변수를 입력한 것에 대해 실생활에서 책임을 지도록 하려면 매개변수가 올바르지 않을 때 사용자에게 알려야 합니다.
그러나 테스터의 경우, 조언자 가 거래 할 수 있도록 수정해야 합니다.

 

EURUSD에 대한 일부 매개변수가 있는 경우 수정해야 하기 때문에 예를 들어 Gold의 경우 완전히 다른 매개변수가 있습니다. 이제 기본적으로 주요 쌍에 대해서는 다소 견딜 수 있지만 금에 대해서는 전혀 작동하지 않습니다. 거래가 없을 것입니다. 이에 대한 매개변수는 각 악기에 맞게 조정하기 위해 존재합니다(내가 이해한 대로). 모든 것이 그렇게 간단하다면 모든 매개변수를 EA에 넣고 외부 매개변수에는 아무 것도 넣지 않을 것입니다.

유효성 검사기의 또 다른 버그는 다른 시간 프레임이 전혀 표시되지 않는다는 것입니다. 나는 그것을 우회했지만 어느 정도 알고리즘에 손해를 끼쳤다. EA에서 여러 지표는 주간, D1, H4 등의 다른 시간대에서 데이터를 가져옵니다. M1으로. 그러나 수많은 실험을 통해 알게 된 것처럼 데이터는 0이 됩니다. 그리고 당신이 그것에 대해 할 수있는 일은 없습니다. 그냥 우회하십시오. 유효성 검사기를 알고리즘의 손상과 일치시키기 위해 EA를 조정해야 하는 이유는 무엇입니까? 반대의 경우에는 유효성 검사기를 테스트에 맞게 조정해야 합니다. 그리고 절대적으로 일하는 고문의 테스트를 통과하는 것은 일종의 고된 노동으로 바뀝니다!

 
Andrey Kaunov :
EURUSD에 대한 일부 매개변수가 있는 경우 수정해야 하기 때문에 예를 들어 Gold의 경우 완전히 다른 매개변수가 있습니다. 이제 기본적으로 주요 쌍에 대해서는 다소 견딜 수 있지만 금에 대해서는 전혀 작동하지 않습니다. 거래가 없을 것입니다. 이에 대한 매개변수는 각 악기에 맞게 조정하기 위해 존재합니다(내가 이해한 대로). 모든 것이 그렇게 간단하다면 모든 매개변수를 EA에 넣고 외부 매개변수에는 아무 것도 넣지 않을 것입니다.
당신은 또한 OrderSend 바로 앞에 0으로 나누기를 넣었습니다. 그리고 그러한 오류가 있었습니다. OrderSend에 도달했지만 열지 않음을 의미합니다. 즉, 랏/마진/한도/가격, 그 중 일부는 고려되지 않습니다
 
Maxim Kuznetsov :
당신은 또한 OrderSend 바로 앞에 0으로 나누기를 넣었습니다. 그리고 그러한 오류가 있었습니다. OrderSend에 도달했지만 열지 않음을 의미합니다. 즉, 랏/마진/한도/가격, 그 중 일부는 고려되지 않습니다

Maxim, 위의 사항 중 하나라도 고려되지 않은 경우 유효성 검사기는 130, 131, 134, 145 등의 매우 구체적인 오류 를 제공합니다. 여기는 그렇지 않습니다!

PS 믿으세요. 하루 중 4일 동안 확인을 위해 100번 넘게 보냈고 많은 옵션을 시도했습니다.

 

예, 0으로 나누기(따라서 OrderSend )에 즉시 도달합니다. 그리고 오류를 제공합니다.

하지만 코드에서 0으로 나누지 않고 검증을 위해 Expert Advisor를 보내면 어떻게든 마법처럼 지정된 기간 동안 트랜잭션이 전혀 열리지 않는 매개변수를 설정하고 오류를 반환합니다. 이것은 일어나고 있는 일에 대한 나의 버전이지만 분명히 진실과 멀지 않습니다.