초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1054

 

Igor Makanu :

표준 CTrade는 기성품 서비스를 제공하지 않습니다.

MT4 에는 한 줄로 인코딩된 거래 항목이 있습니다. MT5에서는 백 라인 이라도 SB를 통해 동일한 작업을 수행할 수 없으며, 순수 MQL5에서는 훨씬 더 나쁩니다. 글쎄, 알았어.

 

감사합니다. 좋은 예를 살펴보겠습니다. 여기에서 MT4의 스크립트를 스케치했습니다. 이익을 포인트로 결정합니다.

 //+------------------------------------------------------------------+
//|                                        LastOrderProfitInPips.mq4 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   printf ( "Прибыль последнего закрытого ордера %d пунктов" ,LastHistoryProfit());

  }
//+------------------------------------------------------------------+
int LastHistoryProfit( int magic_=- 1 )
  {
   datetime t= 0 ;
   int profit=0;
   for ( int i= 0 ; i<OrdersHistoryTotal(); i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if ((OrderMagicNumber()==magic_ || magic_==- 1 ) && (OrderSymbol()== _Symbol ))
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (OrderCloseTime()>t)
                 {
                  t=OrderCloseTime();
                  profit= ( int )( fabs (OrderOpenPrice()-OrderClosePrice())/ _Point );
                  profit= OrderProfit()>= 0.0 ? profit : -profit;
                 }
              }
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+

10분 만에 처음부터 썼다? - 글쎄요, 이런 식으로 논리는 간단하고 이해할 수 있습니다. MT5에서 우리는 지금까지 진공 상태의 구형 말에 대해서만 논의하고 있습니다 ... 거래가 있고 주문이 있는지 여부는 논의해야합니다. 네팅 또는 헤지 계정 유형 .... 글쎄, 아침까지 뭔가 - 우리는 쓸 것입니다

 
Igor Makanu :

감사합니다. 좋은 예를 연구하겠습니다. 여기에서 MT4의 스크립트를 스케치했습니다. 이익을 포인트로 결정합니다.

글쎄, MT5에서 이 스크립트를 실행하는 방법을 말할 필요가 없습니다. 그러나 스크립트 자체에 오류가 있습니다.

먼저 이야기를 보여드리자면

및 실행 결과

Прибыль последнего закрытого ордера - 259 пунктов


그리고 실수는 여기에 있습니다

 int LastHistoryProfit( int magic_=- 1 )
  {
   datetime t= 0 ;
   int profit= 0 ;
   for ( int i= 0 ; i<OrdersHistoryTotal(); i++) // Надо бежать в обратную сторону, т.к. последняя позиция может быть закрыта в ту же секунду, что и предпоследняя.
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if ((OrderMagicNumber()==magic_ || magic_==- 1 ) && (OrderSymbol()== _Symbol ))
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (OrderCloseTime()>t) // В отличие от MT4, в MT5 это можно не делать - сортировка по времени закрытия есть.
                 {
                  t=OrderCloseTime();
                  profit= ( int )( fabs (OrderOpenPrice()-OrderClosePrice())/ _Point ); // При таком вычислении легко потерять один пункт.
                  profit= OrderProfit()>= 0.0 ? profit : -profit;
                 }
              }
           }
        }
     }
   return (profit);
  }
 
fxsaber :

그리고 실수는 여기에 있습니다

 При таком вычислении легко потерять один пункт.

어떻게 고치는 지? 그것에 대해 생각한 적이 없지만 계획은 표준 인 것 같습니다. 2 개의 가격 - 차이를 발견하고 포인트로 나눕니다.

나머지는 동의하지만 순서 정렬 방식은 고전적이며 가장 긴 시간을 비교하고 싶을 때를 대비하여 .... 그런 작업은 처음이지만 생각해야합니다. 99.99%의 경우 MT4의 아무도 hft TS를 거래하려고 시도하지 않습니다.

 
Igor Makanu :

어떻게 고치는 지? 그것에 대해 생각한 적이 없지만 계획은 표준 인 것 같습니다. 2 개의 가격 - 차이를 발견하고 포인트로 나눕니다.

더블 캐스팅 시 손실 -> int.

나머지는 동의하지만 순서 정렬 방식은 고전적이며 가장 긴 시간을 비교하고 싶을 때를 대비하여 .... 그런 작업은 처음이지만 생각해야합니다. 99.99%의 경우 MT4의 아무도 hft TS를 거래하려고 시도하지 않습니다.

HFT는 그것과 아무 관련이 없습니다. CloseAll 스크립트는 1초 내에 두 위치를 닫을 수 있습니다. MT4에서는 비교해야 하지만 MT5에서는 불필요합니다. 음, 아마도 ArraySort를 사용하여 비교하는 것이 더 쉬울 것입니다(예를 들어, 끝에서 두 번째 닫힌 위치 로 빠르게 변경해야 하는 경우).

 
fxsaber :

더블 캐스팅 시 손실 -> int.

이것은 모두 명확하지만 전체 포인트에서 두 가격 간의 차이를 올바르게 계산하는 방법은 무엇입니까?

 
Igor Makanu :

이것은 모두 명확하지만 전체 포인트에서 두 가격 간의 차이를 올바르게 계산하는 방법은 무엇입니까?

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

오늘 마감된 주문(Mql5)에 대해 계산된 총 핍에 대한 도움이 필요합니다.

fxsaber , 2017.10.25 01:00

 #include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006

int PriceToInteger( const double Price, const double point )
{
   return (( int )(Price / point + 0.1 ));
}

int GetTotalPips( const datetime From = 0 )
{
   int Res = 0 ;
  
   for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
       if ( OrderCloseTime () < From)
         break ;
       else if ( OrderType () <= OP_SELL )
      {
         const double point = SymbolInfoDouble ( OrderSymbol (), SYMBOL_POINT );
        
        Res += OrderType () ? PriceToInteger( OrderOpenPrice (), point) - PriceToInteger( OrderClosePrice () , point)
                           : PriceToInteger( OrderClosePrice (), point) - PriceToInteger( OrderOpenPrice (), point);
      }
        
   return (Res);
}

void OnStart ()
{
   datetime Today = TimeCurrent ();
  
  Today -= Today % PeriodSeconds ( PERIOD_D1 );
  
   Alert (GetTotalPips(Today));
}
 
fxsaber :

감사하다!

특히 좋아하는

 const double point = SymbolInfoDouble ( OrderSymbol (), SYMBOL_POINT );

나는 그것을 서비스로 가져갈 것입니다. 나는 일반적으로 글로벌 가시성에서 한 번 계산될 모든 것을 씁니다. 귀하의 예는 훨씬 더 잘 읽힙니다.


....


그리고 그게 맞나요? 주문 루프에서 SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT ); OrderSymbol ()이 매번 다르기 때문에 다시 계산합니까?

 

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

초보자의 질문 MQL5 MT5 MetaTrader 5

이고르 마카누 , 2019.06.04 18:43

감사합니다. 좋은 예를 살펴보겠습니다. 여기에서 MT4의 스크립트를 스케치했습니다. 이익을 포인트로 결정합니다.

 //+------------------------------------------------------------------+
//|                                        LastOrderProfitInPips.mq4 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   printf ( "Прибыль последнего закрытого ордера %d пунктов" ,LastHistoryProfit());

  }
//+------------------------------------------------------------------+
int LastHistoryProfit( int magic_=- 1 )
  {
   datetime t= 0 ;
   int profit=0;
   for ( int i= 0 ; i<OrdersHistoryTotal(); i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if ((OrderMagicNumber()==magic_ || magic_==- 1 ) && (OrderSymbol()== _Symbol ))
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (OrderCloseTime()>t)
                 {
                  t=OrderCloseTime();
                   profit= ( int )( fabs (OrderOpenPrice()-OrderClosePrice())/ _Point );
                   profit= OrderProfit()>= 0.0 ? profit : -profit;
                 }
              }
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+

10분 만에 처음부터 썼다? - 글쎄요, 이런 식으로 논리는 간단하고 이해할 수 있습니다. MT5에서 우리는 지금까지 진공 상태의 구형 말에 대해서만 논의하고 있습니다 ... 거래가 있고 주문이 있는지 여부는 논의해야합니다. 네팅 또는 헤지 계정 유형 .... 글쎄, 아침까지 뭔가 - 우리는 쓸 것입니다

그리고 당신은 질문할 수 있습니다: 왜 개시 가격과 종가 사이의 차이의 절대값을 취한 다음, 포지션의 이익이 0보다 작으면 값을 빼기 기호로 대체하십시오.
 
Alexey Viktorov :
그리고 당신은 질문할 수 있습니다: 왜 개시 가격과 종가 사이의 차이의 절대값을 취한 다음, 포지션의 이익이 0보다 작으면 값을 빼기 기호로 대체하십시오.

즉석에서 쓰고 싶은대로 썼어요 - +100pp나 -100pp를 출력하고 싶었어요, 취향문제라고 합시다 - 오더의 종류를 결정 하고 오프닝과 클로징 을 비교하기 위한 특별한 작업과 작성조건은 없었어요 가격 은 추가 라인이 많이있을 것 같았습니다 ...

추신: 여기에 프로그래머 포럼이 있습니까? - 그들은 이런 식으로 하나의 코드(특히 다른 사람의 코드)를 10번 최적화할 수 있으므로 5줄 대신 4)))

사유: