MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 608

 
for ( int h = OrdersTotal ()- 1 ; h >= 0 ; h--) // Начинаем цикл перебора ордеров
    {
     if ( OrderSelect (h, SELECT_BY_POS )) //Выбираем ордер с индексом h
      {
       if ((cnt_OO >= 2 ))//Если cnt_OO больше либоравно 2 выполняем блок иначе переходим к Метке 1
        {
       if (( OrderMagicNumber () == Magic)&&( OrderLots () <= Lots/Prikup - Dplus))//Если мейджик выбраного ордера совпадает и лотность совпадает с Lots/Prikup - Dplus
//(если переменные типа double необходимо обязательно нормализовать) выполняем блок иначе переходим к Метке 1
        {
         Nextstep  = NextStep;
         BaseNext  = OrderOpenPrice ();
         LotsNext  = NormalizeDouble ( OrderLots ()*K,lotDigit);
         if (NewPB > 0 )
          PBcloseON = true ;
         Alert ( "Pospedny Order NEXT  " , OrderTicket ());
         Alert ( "Otkritih orderov  " ,cnt_OO);
         break ; //Прерываем цикл
        }}
//Метка 1
         LotsNext    = NormalizeDouble (Lots*Prikup,lotDigit); 
         Alert ( "Otkritih orderov NEXT net " );
         Alert ( "Otkritih orderov  " ,cnt_OO);
         break ;// Прерываем цикл 
     
        }}

Lot/Prikup의 첫 번째 문제는 Dplus 를 정규화해야 한다는 것입니다. 자세히 읽어 보십시오. 변수 가 이중 유형 인 경우 4/2가 예상한 2가 아니라 1.9999999999를 생성한다는 사실에 놀랄 것입니다. 이 문제는 아직

따라서 if (( OrderMagicNumber () == Magic)&&( OrderLots () <= Lottes/Prikup - Dplus)) 가 거짓이고 거짓일 확률이 높다고 말할 수 있습니다. cnt_OO가 1보다 크면 Mark 1 이후에 블록에 올 것이 보장됩니다. 따라서 모든 것이 오류 없이 작동하므로 문제는 데이터 처리 논리에 있습니다.

두 번째 문제는 목록의 마지막 순서만 처리하도록 보장된다는 것입니다. 그렇다면 for 루프를 사용하는 이유는 무엇입니까?

테스터에 대해서만 이 작업을 수행하는 경우 목록에서 마지막 주문을 선택하면 실제로 올바른 순서를 얻을 수 있으며 항상 그런 것은 아닙니다. 실제 시장에서 여러 어드바이저가 실행 중이더라도 예상과 완전히 다른 것을 얻을 수 있음을 보장하고 break 명령에 의해 첫 번째 패스 이후에 주기가 중단됨을 보장합니다.

 
Vitaly Gorbunov :

첫 번째 문제는 lot/Prikup입니다. Dplus 를 정규화해야 합니다. 자세히 읽어보세요. 변수 가 이중 유형 인 경우 4/2가 예상한 2를 제공하지만 1.9999999999를 제공한다는 사실에 놀랄 것입니다. 이 문제는 아직

따라서 if (( OrderMagicNumber () == Magic)&&( OrderLots () <= Lottes/Prikup - Dplus)) 가 거짓이고 거짓일 확률이 높다고 말할 수 있습니다. cnt_OO가 1보다 크면 Mark 1 이후에 블록에 올 것이 보장됩니다. 따라서 모든 것이 오류 없이 작동하므로 문제는 데이터 처리 논리에 있습니다.

두 번째 문제는 목록의 마지막 순서만 처리하도록 보장된다는 것입니다. 그렇다면 for 루프를 사용하는 이유는 무엇입니까?

테스터에 대해서만 이 작업을 수행하는 경우 목록에서 마지막 주문을 선택하면 실제로 올바른 순서를 얻을 수 있으며 항상 그런 것은 아닙니다. 실제 시장에서 여러 어드바이저가 실행 중이더라도 예상과 완전히 다른 것을 얻을 수 있으며 첫 번째 명령 전달 후 사이클이 중단되는 것이 보장됩니다.

비탈리 고르부노프 :

첫 번째 문제는 lot/Prikup입니다. Dplus 를 정규화해야 합니다. 자세히 읽어보세요. 변수 가 이중 유형 인 경우 4/2가 예상한 2를 제공하지만 1.9999999999를 제공한다는 사실에 놀랄 것입니다. 이 문제는 아직

따라서 if (( OrderMagicNumber () == Magic)&&( OrderLots () <= Lottes/Prikup - Dplus)) 가 거짓이고 거짓일 확률이 높다고 말할 수 있습니다. cnt_OO가 1보다 크면 Mark 1 이후에 블록에 올 것이 보장됩니다. 따라서 모든 것이 오류 없이 작동하므로 문제는 데이터 처리 논리에 있습니다.

두 번째 문제는 목록의 마지막 순서만 처리하도록 보장된다는 것입니다. 그렇다면 for 루프를 사용하는 이유는 무엇입니까?

테스터에 대해서만 이 작업을 수행하는 경우 목록에서 마지막 주문을 선택하면 실제로 올바른 순서를 얻을 수 있으며 항상 그런 것은 아닙니다. 실제 시장에서 여러 어드바이저가 실행 중이더라도 예상과 완전히 다른 것을 얻을 수 있음을 보장하고 break 명령에 의해 첫 번째 패스 이후에 주기가 중단됨을 보장합니다.

정규화에 대해 - 감사합니다. 그렇지 않다는 것을 알지 못했습니다. 눈이 흐려질 뿐이었다.

for 루프에 대해: 아카이브에는 다른 마법과 다른 쌍의 다른 주문이 있습니다. 나는 올바른 것을 찾을 때까지 끝에서 반복합니다. 이것은 고문이 작업을 시작하지 않았고 내가 필요한 새 주문이 목록에 나타나지 않는 순간에 발생합니다. 사이클은 첫 번째 패스가 아니라 필요한 주문을 찾았을 때 중단됩니다.

Onlinit 및 OnDeinit 기능은 제대로 파악해야 합니다. 이들의 필요성은 분명합니다.

 

이 구현에서는 루프가 작동하지 않습니다. 다양한 변형으로 코드를 실행했는데 항상 한 번만 통과했습니다.

그리고 이제 당신이 어디에서 잘못되었는지 분명합니다!

 for ( int h = OrdersTotal ()- 1 ; h >= 0 ; h--) // Начинаем цикл перебора ордеров
    {
     if ( OrderSelect (h, SELECT_BY_POS )) //Выбираем ордер с индексом h
      {
       if ((cnt_OO >= 2 )) //Если cnt_OO больше либоравно 2 выполняем блок иначе переходим к Метке 1
        {
       if (( OrderMagicNumber () == Magic)&&( OrderLots () <= Lots/Prikup - Dplus)) //Если мейджик выбраного ордера совпадает и лотность совпадает с Lots/Prikup - Dplus
//(если переменные типа double необходимо обязательно нормализовать) выполняем блок иначе переходим к команде continue
        {
         Nextstep  = NextStep;
         BaseNext  = OrderOpenPrice ();
         LotsNext  = NormalizeDouble ( OrderLots ()*K,lotDigit);
         if (NewPB > 0 )
          PBcloseON = true ;
         Alert ( "Pospedny Order NEXT  " , OrderTicket ());
         Alert ( "Otkritih orderov  " ,cnt_OO);
         break ; //Прерываем цикл
        }

         continue ; //Вернёмся в цикл за следующим ордером если предыдущий не прошёл проверку
       }
//Метка 1
         LotsNext    = NormalizeDouble (Lots*Prikup,lotDigit); 
         Alert ( "Otkritih orderov NEXT net " );
         Alert ( "Otkritih orderov  " ,cnt_OO);
         break ; // Прерываем цикл 
     
        }}

모든 항목에 대해 가장 많은 의견을 남겼습니다! 노력하다!

 
Vitaly Gorbunov :

이 구현에서는 루프가 작동하지 않습니다. 다양한 변형으로 코드를 실행했는데 항상 한 번만 통과했습니다.

그리고 이제 당신이 어디에서 잘못되었는지 분명합니다!

모든 항목에 대해 가장 많은 의견을 남겼습니다! 노력하다!

덕분에 알았습니다. 여기에 정규화의 부재와 관련된 오류의 우회가 있습니다. 복구 알고리즘에 대한 보다 철저한 연구를 통해 Condition &&( OrderLots () <= lot/Prikup - Dplus)가 불필요한 것으로 나타났습니다.

좋은 조언 주셔서 모두 감사합니다



여기 테스트 결과가 있습니다. 실제로는 거의 비슷하고 훨씬 더 좋습니다. 미리 경고합니다. 이것은 마틴게일이 아닙니다. 당신이 생각하는 것보다 훨씬 더 나쁘다:=). 드로다운 1.3% 이익 507$

 
좋은 결과! 더 많은 문제가 있을 것입니다. 문의하시기 바랍니다. 그러나 문제를 식별하는 데 필요한 정보를 가져오는 것은 매우 어렵습니다. 원하는 경우 길을 잃지 않도록 친구로 추가할 수 있습니다.
 
Vitaly Muzichenko :

그것이 효과가 있고 결과를 공유하는 것이 유감스럽지 않다면 - 문제에 대한 해결책을 작성하십시오

작동하지 않았습니다(php openssl 라이브러리를 사용했습니다). 다른 방식으로 문제를 해결했습니다.

 
Juer :

작동하지 않았습니다(php openssl 라이브러리를 사용했습니다). 다른 방식으로 문제를 해결했습니다.

즉, 결과적으로 MT에서 암호화하고 .php에서 복호화할 수 있었습니까? 어떤 방법이 사용되었습니까?

 
Vitaly Muzichenko :

즉, 결과적으로 MT에서 암호화하고 .php에서 복호화할 수 있었습니까? 어떤 방법이 사용되었습니까?

아니, 잘 못 썼어. 나는 이 문제에 대해 점수를 매겼다. 내 작업에는 해시로 충분했습니다. 해시를 보내고 받았으며 확인으로 다른 해시를 반환했습니다.

그리고 그것은 PHP에서 해독되지 않았습니다. 누군가이 문제에 대해 밝힐 수 있다면 좋을 것입니다. 어쩌면 개발자 또는 무언가.

 
Juer :

아니, 잘 못 썼어. 나는 이 문제에 대해 점수를 매겼다. 내 작업에는 해시로 충분했습니다. 해시를 보내고 받았으며 확인으로 다른 해시를 반환했습니다.

그리고 그것은 PHP에서 해독되지 않았습니다. 누군가이 문제에 대해 밝힐 수 있다면 좋을 것입니다. 어쩌면 개발자 또는 무언가.

암호화 기능을 퍼프로 작성하고 mq로 이식하십시오. 따라서 그들은 그것을 확실히 해독하지 않을 것이며 어떤 시나리오에서도 100% 작동할 것입니다.

 
Vitaly Muzichenko :

그것이 효과가 있고 결과를 공유하는 것이 유감스럽지 않다면 - 문제에 대한 해결책을 작성하십시오

구글 "PKCS#7 패딩 형식"