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

 
EVGENII SHELIPOV # :

좋은 하루 프로그래머!!!!

내 질문을 다시 표현하려고 하지만 조금 바꿔 보겠습니다.

그리드 Expert Advisor에서 끝에서 두 번째 순서의 티켓을 찾아야 합니다. 최대 주문 티켓에서 -1과 같은 솔루션이 작동하지 않습니다. 아마도 전략 테스터에서는 작동하지만 데모 및 실제 계정에서는 작동하지 않습니다. 사진을 첨부하면 이유가 명확해질 것입니다.

두 번째 순서의 티켓을 결정하기 위한 함수 코드를 작성했습니다. 논리는 다음과 같습니다. 그리드의 모든 미결 주문을 반복한 후 가장 높은 주문을 찾고 필요한 주문 티켓이 있습니다.

하지만 내 프로그래밍 수준이 높지 않고 코드에 일종의 오류가 슬그머니 들어옵니다. 이 기능의 결과는 가장 최소의 티켓입니다. 이 두 가지 기능은 최대 티켓과 끝에서 두 번째 티켓입니다. 최대 티켓은 완벽하게 작동합니다.

어떤 오류가 있는지 묻습니다. 고맙습니다.

이것은 최대 티켓이 필요하지 않고 최대 개장 시간이 필요하지 않지만 Buy 주문에 대한 최소 개시 가격과 Sell 주문에 대해 최대 개시 가격을 선택해야 한다고 말하는 두 번째 스냅샷입니다.
 
Alexey Viktorov # :
이것은 최대 티켓이 필요하지 않고 최대 개장 시간이 필요하지 않지만 Buy 주문에 대한 최소 개시 가격과 Sell 주문에 대해 최대 개시 가격을 선택해야 한다고 말하는 두 번째 스냅샷입니다.

Aleksey, 이 가격을 결정하는 기능이 있습니다. 이를 통해 원하는 티켓에 도달하는 방법을 설명할 수 있습니까 ???

 
Alexey Viktorov # :
이것은 최대 티켓이 필요하지 않고 최대 개장 시간이 필요하지 않지만 Buy 주문에 대한 최소 개시 가격과 Sell 주문에 대해 최대 개시 가격을 선택해야 한다고 말하는 두 번째 스냅샷입니다.
 //+----------------------------------------------------------------------------+
//| Определение цены открытия макс лота                                        |
//+----------------------------------------------------------------------------+
double PriceMaxOrder()
  {
   double max_price = 0 ;
   max_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > max_ticket)
                    {
                     max_ticket = OrderTicket();
                     max_price = OrderOpenPrice();
                    }
                 }
              }
           }
        }
     }
   return (max_price);
  }
 
EVGENII SHELIPOV # :

Aleksey, 이 가격을 결정하는 기능이 있습니다. 이를 통해 원하는 티켓에 도달하는 방법을 설명할 수 있습니까 ???

이와 같이

 //+------------------------------------------------------------------+
//| Расчет тикета нижнего ордера BUY в сетке                         |
//+------------------------------------------------------------------+
int GetTicketMaxOrder( int Magic) // int Magic вставлен только для компиляции без ошибок.
 {
   int total = OrdersTotal (),
      my_ticket = 0 ;
   double minPrice = DBL_MAX ;
   for ( int cnt = total; cnt-- > 0 ;)
   {
     if ( OrderSelect (cnt, SELECT_BY_POS) && OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
     {
       if (OrderType() == OP_BUY)
       {
         if (OrderOpenPrice() < minPrice)
          my_ticket = OrderTicket();
       }
     }
   }
   return (my_ticket);
 }
/*****************************End program****************************/
 
Alexey Viktorov # :

이와 같이

고마워 알렉세이!!! 그러나 기능의 본질을 탐구하기 전에 나는 명확히하고 싶었습니다.이 기능이 마지막에서 두 번째 순서의 티켓을 선택하기위한 기능입니까?

 
EVGENII SHELIPOV # :

고마워 알렉세이!!! 그러나 기능의 본질을 탐구하기 전에 나는 명확히하고 싶었습니다.이 기능이 마지막에서 두 번째 순서의 티켓을 선택하기위한 기능입니까?

아니요, 가장 낮은 가격의 BUY 주문 티켓을 찾습니다. 그런 다음 Makar 또는 자신이 훈련하게하십시오.

 
Alexey Viktorov # :

아니요, 가장 낮은 가격의 BUY 주문 티켓을 찾습니다. 그런 다음 Makar 또는 자신이 훈련하게하십시오.

예, Alexei는 이틀째 당신들 사이에서 적절한 사람이 아니라고 느낍니다. 최소 최대 티켓을 계산하는 기능은 Kalashnikov 돌격 소총처럼 완벽하게 작동합니다. 아무에게도 묻지 않았지만 두 번째 날 방해가됩니다 !!!

 //+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return (max_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета минимального ордера в сетке                                  |
//+----------------------------------------------------------------------------+
int GetTicketMinOrder()
  {
   min_ticket= INT_MAX ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() < min_ticket)
                     min_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return (min_ticket);
  }

어쨌든 관심을 가져주셔서 감사합니다.

 
EVGENII SHELIPOV # :

예, Alexei는 이틀째 당신들 사이에서 적절한 사람이 아니라고 느낍니다. 최소 최대 티켓을 계산하는 기능은 Kalashnikov 돌격 소총처럼 완벽하게 작동합니다. 아무에게도 묻지 않았지만 두 번째 날 방해가됩니다 !!!

어쨌든 관심을 가져주셔서 감사합니다.

이 사진에 있나요

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

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

EVGENII 셸리포프 , 2021.11.07 06:43

좋은 하루 프로그래머!!!!

내 질문을 다시 표현하려고 하지만 조금 바꿔 보겠습니다.

그리드 Expert Advisor에서 끝에서 두 번째 순서의 티켓을 찾아야 합니다. 최대 주문 티켓에서 -1과 같은 솔루션이 작동하지 않습니다. 아마도 전략 테스터에서는 작동하지만 데모 및 실제 계정에서는 작동하지 않습니다. 사진을 첨부하면 이유가 명확해질 것입니다.

두 번째 순서의 티켓을 결정하기 위한 함수 코드를 작성했습니다. 논리는 다음과 같습니다. 그리드의 모든 미결 주문을 반복한 후 가장 높은 주문을 찾고 필요한 주문 티켓이 있습니다.

하지만 내 프로그래밍 수준이 높지 않고 코드에 일종의 오류가 슬그머니 들어옵니다. 이 함수의 결과는 가장 최소한의 티켓입니다. 이 두 가지 기능은 최대 티켓과 끝에서 두 번째 티켓입니다. 최대 티켓은 완벽하게 작동합니다.

 //+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return (penultimate_ticket);
  }
 //+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return (max_ticket);
  }

어떤 오류가 있는지 묻습니다. 고맙습니다.


화살표는 최대 티켓을 표시합니까? 아래에서 두 번째 주문 가격을 가리키는 화살표가 있습니다. 뭐가 문제 야?
 
Alexey Viktorov # :

이 사진에 있나요


화살표는 최대 티켓을 표시합니까? 아래에서 두 번째 주문 가격을 가리키는 화살표가 있습니다. 뭐가 문제 야?

Alex 사진을 확대하십시오

 
EVGENII SHELIPOV # :

Alex 사진을 확대하십시오

마지막 주문입니다.