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

 
팁을 주셔서 감사합니다. 하지만 이것은 아마도 제 경우가 아닐 것입니다. 내 유효성 검사기는 거래 기능을 전혀 볼 수 없습니다. 여기에서 최대 주문 수 를 얻을 수 있습니다. )))
 

여기 악마가 있습니다 ... 유효성 검사를 통과했으며 이제

거래 작업 없음

더 이상 실수가 아니다

추신 : 그것은 우발적 인 샷이었습니다. 다음 테스트 다시 동일한 모자


 
Andrey Kaunov :

예, 이것은 실수가 아닙니다. 어떤 종류의 게임인지 이해하지 못합니다. 나는 거래 함수 앞에 목발(0으로 나누기)을 넣었다 .

그것은 발사:

나는 그것을 제거, 그것은 이미 변경되지 않은 제공

거래 작업이 없습니다.

유효성 검사기가 이 OrderSend()를 수행하는 것을 방해하는 것이 무엇인지 이해 하지 못합니다. 결국 거기에 도달하면 설정 오류(모두 수정했지만) 130, 131, 134, ...가 있어야 하며 " 거래 작업 없음"이 아닙니다. OnInit()에 등록하는 일만 남았습니다. 어딘가에서 일종의 지연을 설정하여 작동하지 않도록 하는 것인데 어떻게 처리해야 할지 모르겠습니다.

그리고 거래가 있어야 하는 조건에 코드 실행이 포함되지 않은 경우 이러한 목발의 요점이 무엇입니까?

 
포함되지 않은 이유는 무엇입니까?! 잘 봐, 알렉스. OrderSend 직전 목발도 비용이 듭니다.
 
Andrey Kaunov :
포함되지 않은 이유는 무엇입니까?! 잘 봐, 알렉스. OrderSend 직전 목발도 비용이 듭니다.

바르게. OrderSend가 실행되지 않으면 어떤 이유로 코드 실행이 도달하지 않습니다. 그리고 적어도 입력과 실행이 없는 블록 조건에서 그 앞에 무언가를 놓으십시오. 심지어 0으로 나누기 도 합니다.

 

잠깐, 이해가 안 돼요. 문 1(0으로 나누기)이 실행되면 if 문은 다음 줄에 있습니다. 그리고 그것은 그 조건을 확인하는 것을 의미합니다. 조건을 확인하려면 OrderSend 함수를 실행해야 하는데, 0으로 나눈 다음 줄에 있는 것으로 판명되었습니다.

글쎄, 신은 그를 축복합니다. 실험의 순도를 위해 코드를 변경했습니다.


결과는 동일합니다. 목발을 사용하여 - 0으로 나누는 오류가 없으면 위의 결과를 게시했습니다. 거래 작업 없음.

 
Andrey Kaunov :

잠깐, 이해가 안 돼요. 문 1(0으로 나누기)이 실행되면 if 문은 다음 줄에 있습니다. 그리고 그것은 그 조건을 확인하는 것을 의미합니다. 조건을 확인하려면 OrderSend 함수를 실행해야 하는데, 0으로 나눈 다음 줄에 있는 것으로 판명되었습니다.

글쎄, 신은 그를 축복합니다. 실험의 순도를 위해 코드를 변경했습니다.


결과는 동일합니다. 목발을 사용하여 - 0으로 나누는 오류가 없으면 위의 결과를 게시했습니다. 거래 작업 없음.

코드를 헛되이 게시하고 있습니다. 읽는 것은 완전히 불가능합니다. 그리고 문제는 이 코드에 있지 않습니다. 문제는 일부 입력 매개변수에 대해 일부 조건이 충족되지 않고 이에 대한 알림이 없다는 것입니다.

 
Andrey Kaunov :
포함되지 않은 이유는 무엇입니까?!

그리고 왜 당신은 당신 자신보다 더 나쁜 시장에 글을 쓰려고 합니까?

간단합니다. 주문을 보내기 전에 "하지만 실행이 될까요?"를 확인하세요.

한도를 확인하고(그들은 그것에 대해 말했습니다), 자금과 마진을 확인하고 (당신은 이것을 가지고 있지 않습니다), 연결이 있는지, 그리고 거래가 허용되는지 확인하십시오.

(선택사항) 계산이 과중했다면, Bid Ask를 읽기 전에 죄와 RefreshRates가 아닙니다.

여기에서 이 모든 검사를 직접 수행합니다. 지금이 아닌 이유는 무엇입니까?

 

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

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
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();
   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);
}

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

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

 int OnInit () {
  
   int stops_level=( int ) SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL );
   iTrailStart=inpTrailStart;
   iTrailStart2=inpTrailStart2;
   iTrailStartL=inpTrailStartL;
   //---
   if (stops_level> 0 ) {
       if (inpTrailStart<stops_level+ 3 ) iTrailStart=stops_level+ 3 ;
       if (inpTrailStart2<stops_level+ 3 ) iTrailStart2=stops_level+ 3 ;
       if (inpTrailStartL<stops_level+ 3 ) iTrailStartL=stops_level+ 3 ;
   }
   
   Comment ( "" );
   EventSetMillisecondTimer ( 300 );
   ButtonCreate( "V_5" , 5 , 25 , 50 , 20 , "FLAT" , 9 , clrBlack , C'236,233,235' , clrNONE , false );
   ButtonCreate( "V_7" , 60 , 25 , 50 , 20 , "TREND" , 9 , clrBlack , C'236,233,235' , clrNONE , false );
   ButtonCreate( "Auto" , 115 , 25 , 50 , 20 , "Auto" , 9 , clrBlack , C'236,233,235' , clrNONE , false );
   ObjectCreate ( 0 , "Lot" , OBJ_EDIT , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_CORNER , CORNER_LEFT_LOWER );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_XDISTANCE , 115 );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_YDISTANCE , 50 );
   ObjectSetString ( 0 , "Lot" , OBJPROP_TEXT , "" );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_ALIGN , ALIGN_RIGHT );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_FONTSIZE , 9 );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_COLOR , clrBlack );
   ObjectSetInteger ( 0 , "Lot" , OBJPROP_YSIZE , 20 );
   ButtonCreate( "V_5_buy" , 5 , 50 , 50 , 20 , "BUY" , 9 , clrBlack , C'236,233,235' , clrNONE , false );
   ButtonCreate( "V_5_sell" , 60 , 50 , 50 , 20 , "SELL" , 9 , clrBlack , C'236,233,235' , clrNONE , false ); 
     
   test_ticket= OrderSend ( _Symbol ,OP_BUYLIMIT, SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ), _Point , 30 , 0.0 , 0.0 , "NZT-48_test" ,iMagicNumber, 0 , clrNONE );
   
   return ( INIT_SUCCEEDED );
} //-------------------------------------- End OnInit ---------------------------------------- 

Alexey Viktorov :

코드를 헛되이 게시하고 있습니다. 읽는 것은 완전히 불가능합니다. 그리고 문제는 이 코드에 있지 않습니다. 문제는 일부 입력 매개변수에 대해 일부 조건이 충족되지 않고 이에 대한 알림이 없다는 것입니다.

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

 
Andrey Kaunov :

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

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

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


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

고문에서 다른 주문이 어떻게 이루어지는지 확인하십시오. 어디에서 주문을 마감/변경할 예정이셨습니까? 어드바이저가 유일하고 독점적으로 오픈한다고 생각하지 않습니다

티켓 <0은 오프닝에서 설정되었습니다 - 다른 논리를 살펴보십시오. 실제로 이에 대해 어떻게 반응할지 살펴보십시오.

사유: