자동 유효성 검사기 - 문제

 

EA 버전을 업데이트하려고 하는데 오류가 발생합니다.

전략 테스터의 동일한 전문가 고문.


동시에 MT4에 대한 조언자를 작성합니다. 모든 것이 정상입니다. Expert Advisors 4와 5의 코드는 동일하며 포함 파일만 다릅니다(4와 5는 다름).

이 권고자가 1월에 마지막으로 업데이트되었을 때 모든 것이 정상이었습니다.

프로그램 버전 - MetaTrader 5 x64 빌드 2025 시작(MetaQuotes Software Corp.)

-단말기 Windows 10(빌드 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, 메모리: 1866/3967Mb, 디스크: 5/35Gb, GMT+3

 
Uladzimir Kirychenka :

EA 버전을 업데이트하려고 하는데 오류가 발생합니다.

전략 테스터의 동일한 전문가 고문.


동시에 MT4에 대한 조언자를 작성합니다. 모든 것이 정상입니다. Expert Advisors 4와 5의 코드는 동일하며 포함 파일만 다릅니다(4와 5는 다름).

이 권고자가 1월에 마지막으로 업데이트되었을 때 - 모든 것이 정상이었습니다.

프로그램 버전 - MetaTrader 5 x64 빌드 2025 시작(MetaQuotes Software Corp.)

-단말기 Windows 10(빌드 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, 메모리: 1866/3967Mb, 디스크: 5/35Gb, GMT+3

멍청하게 플레이하고 $1 또는 많은 100500을 입금하고 거래가 있는지 확인하십시오. 그리고 바보만이 그러한 매개변수를 설정할 수 있다는 알림이 있을 것입니다.

 
Alexey Viktorov :

멍청하게 플레이하고 $1 또는 많은 100500을 입금하고 거래가 있는지 확인하십시오. 그리고 바보만이 그러한 매개변수를 설정할 수 있다는 알림이 있을 것입니다.

같은 문제. 시도 - 도움이되지 않음). 4월 13일부터 업데이트가 안되네요. 모든 것과 모든 것을 확인하면 "거래 작업이 없습니다"라는 모든 기호에 대한 하나의 비문이 나옵니다. 수표가 없으면 오류가 발생합니다. 포지션을 열 수 있는 자금이 충분하지 않습니다. 그리고 MT4용 버전과 TS 작성자 버전도 문제 없이 업데이트 되었습니다.

123

그림은 최소 로트를 보여줍니다 - 2000, 잔액은 10000, 분명히 열기에 충분하지 않습니다. 최소한 돈이 없는지 확인하고 적어도 내기를 하지 마십시오. 아직 테스트를 통과하지 못했습니다.

그리고 그러한 경우에는 어떻게 해야 합니까?

 

물론 거래는 없을 것입니다. 알림은 무엇이어야 합니까? 로트 크기가 SYMBOL_VOLUME_MIN 및 SYMBOL_VOLUME_MAX 범위에 포함되지 않으면 INIT_PARAMETERS_INCORRECT 초기화 오류가 발생하는 경우에만 OnInit에 있습니다.

 
Uladzimir Kirychenka :

물론 거래는 없을 것입니다. 알림은 무엇이어야 합니까? 로트 크기가 SYMBOL_VOLUME_MIN 및 SYMBOL_VOLUME_MAX 범위에 포함되지 않으면 INIT_PARAMETERS_INCORRECT 초기화 오류가 발생하는 경우에만 OnInit에 있습니다.

나는 그것이 나에게 거의 같았고 중재자가 차를 확인한 후 확인했던 것을 기억합니다. 체크 무늬. 잘못된 매개변수의 경우 OnInit는 INIT_PARAMETERS_INCORRECT 코드로 동일한 작업을 완료했습니다. 그리고 자동. 수표는 거래가 없다는 동일한 오류를 제공했습니다. 그래서 중재자는 이 코드로 OnInit()를 완료하지 말고 단순히 경고를 발행하라고 조언했습니다.

 

아마도 한 달에 한 번 누군가가이 질문을 제기합니다. 다시 한번.

문제는 (실생활에서) 거래할 때 잔액의 크기뿐만 아니라 로트의 크기도 변경될 수 있다는 것입니다.

그리고 테스트 중 입금액(1~10,000,000) 또는 로트(1,000,000~0.01)의 크기가 변경될 수 있습니다.

따라서 이러한 검사는 OnInit에서 한 번이 아니라 주기적으로(예: OnTick에서) 지속적으로 수행되어야 합니다.

그리고 로그 오버플로가 없도록 경고( 메시지 인쇄 또는 경고)는 한 번만 표시되어야 합니다.

 
Uladzimir Kirychenka :

물론 거래는 없을 것입니다. 알림은 무엇이어야 합니까? 로트 크기가 SYMBOL_VOLUME_MIN 및 SYMBOL_VOLUME_MAX 범위에 포함되지 않으면 INIT_PARAMETERS_INCORRECT 초기화 오류가 발생하는 경우에만 OnInit에 있습니다.

바보인 척 하는 것이 매우 어렵다는 것을 이해하지만, 이 기술이 때때로 도움이 됩니다. 다시 시도하십시오. 당신은 당신의 계좌에 1달러의 고문을 두고 많은 100500을 놓고 기다립니다. 당신은 하루, 1초, 3분의 1을 기다렸다가... 그러면 당신은 분개하기 시작합니다, "내가 무엇을 지불했지. 왜 이 쓰레기는 효과가 없습니까?" 그리고 아무도 아무 말도 하지 않고, 아무도 "당신은 바보야... 당신은 외환 시장에서 그런 보증금으로 일할 수 없습니다. 바보만이 100500을 많이 넣을 수 있습니다"와 같은 것을 말하고 싶어하지 않습니다... 뭔가 이와 같이.

 
Petros Shatakhtsyan :

아마도 한 달에 한 번 누군가가이 질문을 제기합니다. 다시 한번.

문제는 (실생활에서) 거래할 때 잔액의 크기뿐만 아니라 로트의 크기도 변경될 수 있다는 것입니다.

그리고 테스트 중 입금액(1~10,000,000) 또는 로트(1,000,000~0.01)의 크기가 변경될 수 있습니다.

따라서 이러한 검사는 OnInit에서 한 번이 아니라 주기적으로(예: OnTick에서) 지속적으로 수행되어야 합니다.

그리고 로그 오버플로가 없도록 경고(인쇄 메시지 또는 경고)는 한 번만 표시되어야 합니다.

매우 단순한 코드이며 유효성 검사를 통과할 수 없습니다. 말씀하신 조건을 만족하는 것 같습니다.

 void OnTick ()
  {
   ENUM_POSITION_TYPE PosType= POSITION_TYPE_SELL ;
   MqlTradeRequest request;
   MqlTradeResult result;
   MqlTradeCheckResult check;
   ZeroMemory (request);
   ZeroMemory (result);
   ZeroMemory (check);
   long digit;
   double point,Bid;
   SymbolInfoDouble ( _Symbol , SYMBOL_BID ,Bid);
   request.type   = ORDER_TYPE_SELL ;
   request.price  = Bid;
   request.action = TRADE_ACTION_DEAL ;
   request.symbol = _Symbol ;
   request.volume = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
   request.sl= 0 ;
   request.tp= 0 ;
   request.deviation= 10 ;
   request.magic= 55555 ;
   request.comment= NULL ;
   request.type_filling= 0 ;
   if ( PositionsTotal ()== 0
   &&CheckMoneyForTrade( _Symbol , SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ), ORDER_TYPE_SELL )== true
   ){
   OrderSend (request,result);
   } else {
      ExtExpert.Deinit();
       return ;
   }
  }
   bool CheckMoneyForTrade( string symb, double lots, ENUM_ORDER_TYPE type)
  {
//--- получим цену открытия
   MqlTick mqltick;
   SymbolInfoTick (symb,mqltick);
   double price=mqltick.ask;
   if (type== ORDER_TYPE_SELL )
      price=mqltick.bid;
//--- значения необходимой и свободной маржи
   double margin,free_margin= AccountInfoDouble ( ACCOUNT_MARGIN_FREE );
   //--- вызовем функцию проверки
   if (! OrderCalcMargin (type,symb,lots,price,margin))
     {
       //--- что-то пошло не так, сообщим и вернем false
       Print ( "Error in " , __FUNCTION__ , " code=" , GetLastError ());
       return ( false );
     }
   //--- если не хватает средств на проведение операции
   if (margin>free_margin)
     {
       //--- сообщим об ошибке и вернем false
       Print ( "Not enough money for " , EnumToString (type), " " ,lots, " " ,symb, " Error code=" , GetLastError ());
       return ( false );
     }
//--- проверка прошла успешно
   return ( true );
  }
돈 문제에 대한 수표가 있음 - 거래 작업이 없음, 수표가 없으면 - 돈이 충분하지 않음
 
Petros Shatakhtsyan :

아마도 한 달에 한 번 누군가가이 질문을 제기합니다. 다시 한번.

문제는 (실생활에서) 거래할 때 잔액의 크기뿐만 아니라 로트의 크기도 변경될 수 있다는 것입니다.

그리고 테스트 중 입금액(1~10,000,000) 또는 로트(1,000,000~0.01)의 크기가 변경될 수 있습니다.

따라서 이러한 검사는 OnInit에서 한 번이 아니라 주기적으로(예: OnTick에서) 지속적으로 수행되어야 합니다.

그리고 로그 오버플로가 없도록 경고(인쇄 메시지 또는 경고)는 한 번만 표시되어야 합니다.

이러한 확인(LotMin, LotMax, LotNormalizeStep, 잔액 확인, OrderCheck)은 포지션 이 열릴 때마다 수행됩니다. 그리고 OnInit에서는 로트만 확인합니다. OnInit에서 균형 확인 논리를 상상할 수 없습니다.

추신: 경고는 유효성 검사기 오류에서 저장되지 않습니다(((((((((()

 
Uladzimir Kirychenka :

이러한 확인(LotMin, LotMax, LotNormalizeStep, 잔액 확인, OrderCheck)은 포지션 이 열릴 때마다 수행됩니다. 그리고 OnInit에서는 로트만 확인합니다. OnInit에서 균형 확인 논리를 상상할 수 없습니다.

추신: 경고는 유효성 검사기 오류에서 저장되지 않습니다(((((((((()

유효성 검사기에 오류가 없습니다 :)

유효성 검사기는 제공된 코드에서

  • 전체 확인 없음
  • 오류 처리 없음
유효성 검사기는 소위 코드 작성자가 사용자를 대신한 적이 없음을 보여줍니다.

 
Vladimir Karputov :

유효성 검사기에 오류가 없습니다 :)

유효성 검사기는 제공된 코드에서

  • 전체 확인 없음
  • 오류 처리 없음
유효성 검사기는 소위 코드 작성자가 사용자를 대신한 적이 없음을 보여줍니다.

))