실수로 고통받는 거래가 없습니다. - 페이지 14

 
Maxim Kuznetsov :

Stop Out으로 어떤 일이 일어날지 생각해 보십시오. (이미 마진 콜이 있습니다. 탭핑이 그 어느 때보다 가깝습니다)

당신의 거래는 강제로 닫힐 것이지만, 당신은 그러한 옵션을 무시하고 매 틱 이후에 올라갈 것이고(역사에, 이것은 오랜 시간이 걸립니다) 잘못된 주문을 보낼 것입니다.

"MQL 프로그래밍 분야에서 10년 이상의 경험"이 있는 모든 사람을 위해 추가합니다.

어떤 일이 일어날 수 있다면 반드시 일어날 것입니다.

Stop Out 및 Margin Call은 완전히 정상적이지는 않지만 자연스러운 현상이며, Advisor는 이에 대한 준비가 되어 있어야 합니다.

거래 조건은 변경될 수 있으며 일정하지 않습니다. StopLevel이 점프하고 어깨도 가끔 바뀝니다.

사용자는 우발적으로라도 Stop/Take 또는 거래를 쉽게 설정/변경할 수 있습니다. 고문은 이에 대응해야 합니다.

사용자는 Expert Advisor의 Magic으로 주문을 열거나 닫을 수 있습니다(또는 실수로 Magic=0으로 설정하고 "손"을 거래). 로봇은 무엇을 할까요?

어드바이저를 다시 시작하지 않고 잔액이 보충/제거됩니다. 로봇이 이를 수행할 수 있는 것이 매우 중요합니다(최근에 주제가 있었습니다. 사람이 정말 돈을 잃었습니다)

터미널을 재부팅하고 오랫동안 업데이트하거나 상당한 시간 동안 연결이 끊어질 수 있습니다. 이 모든 것과 오프라인에서 발생한 모든 것을 고려해야 합니다.

검증인은 '최소후보'의 1~2%만 확인하는데, 사람들은 여전히 불평불만...

 
Renat Akhtyamov :

순차적으로 쓰여진 것 같은데 질문이 답이다

모든 테마 페이지를 사용할 수 있습니다

Renat, 당신이 주문을 세고 있다는 것을 이해합니다. 나는 왜 이해하지 못했는가?


막심 쿠즈네초프 :

"MQL 프로그래밍 분야에서 10년 이상의 경험"이 있는 모든 사람을 위해 추가합니다.

어떤 일이 일어날 수 있다면 반드시 일어날 것입니다.

Stop Out 및 Margin Call은 완전히 정상적이지는 않지만 자연스러운 현상이며, Advisor는 이에 대한 준비가 되어 있어야 합니다.

거래 조건은 변경될 수 있으며 일정하지 않습니다. StopLevel이 점프하고 어깨도 가끔 바뀝니다.

사용자는 우발적으로라도 Stop/Take 또는 거래를 쉽게 설정/변경할 수 있습니다. 고문은 이에 대응해야 합니다.

사용자는 Expert Advisor의 Magic으로 주문을 열거나 닫을 수 있습니다(또는 실수로 Magic=0으로 설정하고 "손"을 거래). 로봇은 무엇을 할까요?

어드바이저를 다시 시작하지 않고 잔액이 보충/제거됩니다. 로봇이 이를 수행할 수 있는 것이 매우 중요합니다(최근에 주제가 있었습니다. 사람이 정말 돈을 잃었습니다)

터미널을 재부팅하고 오랫동안 업데이트하거나 상당한 시간 동안 연결이 끊어질 수 있습니다. 이 모든 것과 오프라인에서 발생한 모든 것을 고려해야 합니다.

검증인은 '최소후보'의 1~2%만 확인하는데, 사람들은 여전히 불평불만...

맥심, 무슨 소리야?! 나는 스톱 아웃으로 무엇을해야하는지 조언을 구했습니다. 6 페이지에서 포럼을 읽으십시오. 제 생각에는 제 질문에 대해 자세히 설명했습니다.

 
Andrey Kaunov :

Renat, 당신이 주문을 세고 있다는 것을 이해합니다. 나는 왜 이해하지 못했는가?


맥심, 무슨 소리야?! 나는 스톱 아웃으로 무엇을해야하는지 조언을 구했습니다. 6 페이지에서 포럼을 읽으십시오. 제 생각에는 제 질문에 대해 자세히 설명했습니다.

실제 티켓은 0이 아니기 때문에,,,,N

 
아, 당신은 내 작은 코드에 대해 이야기하고 있습니다. 따라서 티켓의 종류는 중요하지 않습니다. Renat도 2차원 배열입니다. 셀 [0]에서 티켓을 작성하고 셀 [1]에서 주문을 계산합니다. 다양한 변수를 만들 수도 있었지만 저는 이렇게 결정했습니다.
 
Andrey Kaunov :

Renat, 당신이 주문을 세고 있다는 것을 이해합니다. 나는 왜 이해하지 못했는가?


맥심, 무슨 소리야?! 나는 스톱 아웃으로 무엇을해야하는지 조언을 구했습니다. 6 페이지에서 포럼을 읽으십시오. 제 생각에는 제 질문에 대해 자세히 설명했습니다.

글쎄, 당신의 10 년 경험으로 글쎄, 내가 무엇을 조언 할 수 있습니까 ... 그러나 원칙적으로는 아무 것도 없습니다 :-)

당신은 모든 조언을 무시하고 당신의 조언자를 위해 검증자를 수정하라고 요구합니다.

---

NZDUSD에 대한 스톱아웃이 있고 주문을 마감했으며 고문의 논리가 부적절합니다. 어쨌든 그것을 선택하고 OrderClose를 보내면 거짓이 됩니다. 매 틱마다 놀라운 작업을 반복하면 모든 것이 느려지고 수표가 취소됩니다. 그리고 이것은 가장 간단합니다.

거래 조건 확인에 대해 - 이전 14페이지 참조

 
Andrey Kaunov :

다음 게시물에 주목하세요.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

실수로 고통받는 거래가 없습니다.

안드레이 카우노프 , 2020.07.25 11:42

Renat, 조언 감사합니다. 시도해 보겠습니다.

블라디미르, 당신은 문제를 건설적으로 이해할 수 있습니까?! 마진과 물건에 대해 로트를 확인하지 않습니까? 나에게 "어떤 수표는 통과해야 ..."라는 기사는 이미 성경과 같습니다. 위에 게시된 코드 조각. 완전한 규정 준수를 위해 기사의 권장 사항에 따라 코드를 변경했습니다.

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots( string symbol, double lot, int direction, 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;
   ResetLastError ();
   if (is_margin && ( AccountFreeMarginCheck( Symbol (),direction,_lot)<= 0 || GetLastError ()== 134 )) _lot= 0.0 ;
   return (_lot);
}

하지만 여전히 "거래 없음"이 표시됩니다.

글쎄, 함수가 항상 0.0을 많이 보내서 거래 시작을 막는다면 최소 랏을 보내도록 변경합니다.

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots( string symbol, double lot, int direction, 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;
   ResetLastError ();
   if (is_margin && (AccountFreeMarginCheck( Symbol (),direction,_lot)<= 0 || GetLastError ()== 134 )) _lot= min ;
   return (_lot);
}

그리고 거래가 여전히 진행 중이라는 이야기를 들었습니다(아래 스크린샷 참조). 그러나 최소 제비는 물론 매우 이상하지만 오게 하십시오. 그러나 거래가 있습니다!

이 상황에서 검증인은 매우 이상하게 행동하여 $1 보증금으로 최소 0.2 랏을 만듭니다.


당연히 이 접근 방식을 사용하면 거래가 없을 것입니다! 그리고 이것은 완벽하게 적절한 코드입니다. 그건 그렇고 테스트를 위해 지표 등의 모든 조건을 제거했습니다. 어드바이저 출시 직후 거래가 시작됩니다.

그럼 검증인이 하는 일은?! 프로그래머의 두뇌를 날려 버리기 위해 지금까지 본 것뿐입니다!

유효성 검사기에서 무언가를 변경하도록 요청하는 것이 아닙니다. 테스트 로그만 볼 수 있습니다. 그러면 어떤 매개 변수가 어떤 예금에 대해 통과했는지 명확해질 것입니다. 결국 인쇄물은 최소한 코드에서 오류가 있는 위치를 추적하고 신속하게 수정할 수 있습니다. 일주일 내내 손가락으로 하늘을 가리키는 대신 오류를 현지화하기 위해 노력하십시오. 우리는 서로 반대하지 않습니다! 이해합니다. 함께 무언가를 벌기 위해 노력하고 있습니다.

첫 스크린샷입니다. NZDUSD에 거래가 없다는 메시지가 첨부되었습니다. 그리고 14페이지 동안 당신은 이 풍차와 싸워왔습니다.

그리고 첫 화면의 주요 실수는 이것이 전혀 아니라는 것입니다. 그리고 GBPUSD에 대한 너무 긴 테스트에 대해 알려줍니다. 바로 거기에서 테스트가 매우 오래 지속되었기 때문에 유효성 검사기가 시간 초과로 테스트를 중단했습니다.

GBPUSD, M30에서 코드 프로파일러를 실행하고 3시간 동안 거래하도록 합니다. 다음으로 병목 현상을 확인하고 수정합니다.

 
Maxim Kuznetsov :


---

NZDUSD에 대한 스톱아웃이 있고 주문을 마감했으며 고문의 논리가 부적절합니다. 어쨌든 그것을 선택하고 OrderClose를 보내면 거짓이 됩니다. 매 틱마다 놀라운 작업을 반복하면 모든 것이 느려지고 수표가 취소됩니다. 그리고 이것은 가장 간단합니다.

거래 조건 확인에 대해 - 이전 14페이지 참조

Maxim, 당신은 코드를 매우 부주의하게 읽었습니다.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   gl_lots= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
   gl_ask= NormalizeDouble (Ask, _Digits );
   gl_bid= NormalizeDouble (Bid, _Digits );
   gl_comm= "test" ;
//---
   if (AccountFreeMarginCheck( _Symbol ,OP_BUY,gl_lots)<= 0 || GetLastError ()== 134 ) {
       printf ( "Not enough money for the minimum lot: %.4f" ,gl_lots); 
       return ;
   }
   if (test_ticket[ 1 ]< 8 && test_ticket[ 0 ]== 0 ) {
      test_ticket[ 0 ]= OrderSend (( StringCompare ( _Symbol , "NZDUSD" )== 0 ? "NZDUSD" : _Symbol ),OP_BUY,gl_lots,gl_ask, 30 , 0.0 , 0.0 ,gl_comm, 33333 , 0 , clrNONE );
       if (test_ticket[ 0 ]> 0 ) test_ticket[ 1 ]++;
       else if (Fun_Error( GetLastError ())== 1 ) return ; 
   }   
   if (test_ticket[ 0 ]> 0 )
       if ( OrderSelect (test_ticket[ 0 ],SELECT_BY_TICKET)) {
         if ( OrderCloseTime()== 0 && OrderOpenTime()+ 300 < TimeCurrent ())
             if (OrderClose(test_ticket[ 0 ],OrderLots(),gl_bid, 30 , clrNONE )) {
               printf ( "Test order closed, ticket #%d" ,test_ticket[ 0 ]);
               test_ticket[ 0 ]= 0 ;
            } else if (Fun_Error( GetLastError ())== 1 ) return ;
      } else if (Fun_Error( GetLastError ())== 1 ) return ;
}

마커에 의해 지정된 조건으로 인해 OrderClose() 함수로 이동할 수 없습니다. 주문이 마감된 경우 이것이 첫 번째 것입니다. 두 번째로, NZDUSD에 대해 하나 이상의 주문이 개설된 경우 유효성 검사기는 "거래 작업 없음"을 반환하지 않습니다.

Artyom Trishkin :

...

GBPUSD, M30에서 코드 프로파일러를 실행하고 3시간 동안 거래하도록 합니다. 다음으로 병목 현상을 확인하고 수정합니다.

알았어, 아르티옴. 노력하겠습니다.

 
Andrey Kaunov :

Maxim, 당신은 코드를 매우 부주의하게 읽었습니다.

마커에 의해 지정된 조건으로 인해 OrderClose() 함수로 이동할 수 없습니다. 이것이 첫 번째 함수입니다. 두 번째로, NZDUSD에 대해 하나 이상의 주문이 개설된 경우 유효성 검사기는 "거래 작업 없음"을 반환하지 않습니다.


솔직히 말하면 비뚤어진 코드의 디버거 역할을 하고 작성자의 자신감을 극복하는 데 지쳤습니다. 오류가 있으니 직접 찾아보세요

"경험"을 버리고 고문을 자신에 대해 다시 작성하여 상당한 개인 계정에 두는 것이 무섭지 않도록하십시오. 검증자

 
네, 개인적으로 Maxim에게 디버그를 요청하는 것이 아닙니다. 곡선 코드는 훌륭 하지만 유효성 검사를 통과한 사람은 바로 그 사람 입니다. 질문은 완전히 다릅니다.
 
Artyom Trishkin :

...

GBPUSD, M30에서 코드 프로파일러를 실행하고 3시간 동안 거래하도록 합니다. 다음으로 병목 현상을 확인하고 수정합니다.

Artyom, 병목 프로파일러 가 표시되지 않았습니다. 모든 코드는 병리학적으로 긴 프로세스 없이 원활하게 작동합니다.

그리고 이 이야기의 끝은 이것입니다. 후크 또는 사기꾼에 의해 여전히 유효성 검사를 통과했습니다. 코드에 전혀 의존하지 않습니다(글에 명시된 명백한 오류 없이 올바른 경우). 유효성 검사기의 작동 방식은 분명히 작성자만 알고 있습니다. 코드는 2번, 세 번째에 테스트를 통과합니다. 몇 번 연속으로 발생하는 경우도 있고 발생하지 않는 경우도 있습니다. 또한, 입력 매개변수만 변경하거나(중요하지 않음), 재배열 시 아무 것도 변경되지 않는 행을 재배열하거나, 일반적으로 주석을 삭제 또는 추가(작업 파일에 전혀 영향을 미치지 않아야 함)합니다.

일반적으로 검증 통과 여부는 검증인의 "기분"(네트워크의 전압, 일종의 에너지 흐름 등)에만 의존합니다. 동시에 정상적인 매개 변수를 사용하는 일반 테스터의 코드는 쌍과 TF에서 끊지 않고 실패하지 않았습니다.