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

 
Alexey Kozitsyn :
그리고 포지션이 아니라 거래가 아니라 주문을 분류해야 하기 때문입니다. 먼저 주문이 오고 그 다음이 거래, 그 다음이 포지션입니다.

왜 주문만? 거래에 포지션 ID(티켓)가 없나요?

 
Alexey Viktorov :

왜 주문만? 거래에 포지션 ID(티켓)가 없나요?

그래, 너가 맞아. 주문과 거래 모두 위치 ID가 있습니다. 그러나 일반적으로 거래를 시작한 첫 번째 주문의 ID가 해당 위치에 할당되었음을 알아야 합니다. 따라서 포지션을 개시하는 "엔티티"는 거래가 아니라 주문입니다. 그리고 거래가 아닌 주문을 통해 정렬해야 합니다.

문서에서:

Position ID는 새로 개설된 각 Position에 할당되는 고유 번호로 평생 동안 변경되지 않습니다. 위치를 연 주문 티켓에 해당합니다.

 

포지션 ID는 각 주문(ORDER_POSITION_ID)과 거래(DEAL_POSITION_ID)를 개설, 변경 또는 마감한 순서로 표시됩니다. 이 속성을 사용하여 위치와 연결된 주문 및 거래를 검색합니다.

 
Alexey Kozitsyn :

그래, 너가 맞아. 주문과 거래 모두 위치 ID가 있습니다. 그러나 일반적으로 거래를 시작한 첫 번째 주문의 ID가 해당 위치에 할당되었음을 알아야 합니다. 따라서 포지션을 개시하는 "엔티티"는 거래가 아니라 주문입니다. 그리고 거래가 아닌 주문을 통해 정렬해야 합니다.

문서에서:

나는 논쟁하지 않을 것입니다. 그것이 바로 문서에 쓰여진 내용입니다. 그러나 동일한 문서의 다른 위치에는 " 원칙적으로 ..."라고 표시되어 있는데, 이는 불일치가 있을 수 있음을 의미합니다. 그리고 한 번 그런 "규칙"에 부딪쳤습니다 ...

위치

포지션 티켓. 명확한 식별을 위해 위치를 변경하거나 닫을 때 기입해야 합니다. 일반적으로 , 주문 티켓에 해당하므로 결과적으로 포지션이 열렸습니다.

아니면 방금 잘못된 순서의 티켓을 사용하려고했는데 기억이 나지 않고 거의 이해하지 못하고 읽고 수정하고 잊어 버렸습니다. 일반적으로 그 이후로 나는 이것에 더 주의를 기울이게 되었습니다.
 
Vitaly Muzichenko :
거래 중이었던 이력에서 티켓을 얻는 방법을 알려주세요. 화면에는 "63214735"입니다.

여기서 거래 목록에서 포지션 번호를 찾고 있습니다. 그렇지 않으면 잘못된 것입니다.

다음은 HistorySelectByPosition 이 제공 하는 것을 보여주는 스크립트입니다.

 //--- input parameters
input int       Position;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{ ulong Ticket;
   if ( HistorySelectByPosition (Position) )
  { Print ( "Position = " + IntegerToString (Position));
     int o= HistoryOrdersTotal ()- 1 ;
     while ( o>= 0 )
    { Ticket= HistoryOrderGetTicket (o);
       Print ( "Order " + IntegerToString (o)+ " = " + IntegerToString (Ticket));
      o--;
    }
     int d= HistoryDealsTotal ()- 1 ;
     while ( d>= 0 )
    { Ticket= HistoryDealGetTicket (d);
       Print ( "Deal " + IntegerToString (d)+ " = " + IntegerToString (Ticket));
      d--;
    }
  }
}

결과는 다음과 같습니다.

Position = 65328142
Order 1 = 65347809
Order 0 = 65328142
Deal 1 = 4070777
Deal 0 = 4051254

0 = 오픈 포지션

1 = 클로즈 포지션

결과를 얻지 못하면 = 포지션 티켓을 입력하지 않은 것입니다.

티켓 거래로 시작하면 비슷한 결과를 얻을 수 있습니다.

HistoryDealGetInteger() 함수의 경우

ENUM_DEAL_PROPERTY_INTEGER

식별자

설명

유형

DEAL_TICKET

딜 티켓. 각 거래에 할당되는 고유 번호

DEAL_ORDER

주문 , 거래가 실행된 기준

DEAL_TIME

거래 시간

날짜 시간

DEAL_TIME_MSC

1970년 1월 1일부터 트랜잭션 시간(밀리초)

DEAL_TYPE

거래 유형

ENUM_DEAL_TYPE

DEAL_ENTRY

거래 방향 – 시장 진입, 시장 퇴출 또는 반전

ENUM_DEAL_ENTRY

DEAL_MAGIC

거래에 대한 매직 넘버( ORDER_MAGIC 참조 )

DEAL_REASON

거래의 이유 또는 출처

ENUM_DEAL_REASON

DEAL_POSITION_ID

이 거래에 의해 개설, 수정 또는 마감된 직위 ID 입니다. 각 포지션에는 포지션의 전체 수명 동안 금융 상품에서 이루어진 모든 거래에 할당되는 고유 식별자가 있습니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Ivanov :

고맙습니다!

나는 이것을 필요로 했다: HistoryOrderGetTicket

 
Vitaly Muzichenko :

고맙습니다!

나는 이것을 필요로 했다: HistoryOrderGetTicket

주문은 1.0 로트가 될 수 있습니다. 그러나 예를 들어 로트 0.9로 부분적으로 실행할 수 있습니다. 나머지는 거부됩니다(실행 모드에 따라 다름). 그러면 거래는 0.9랏이 됩니다. 그리고 순서대로 많이 찾기 시작하면 불일치가있을 것입니다.

 

도움을 요청합니다 - OHLC 환경의 가치를 얻으려면 정상적인 코드가 필요합니다 - 기존 환경은 매우 느립니다

옵션 1

 //-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open ( int index)
  {
   double open= 0 ;
   ArraySetAsSeries ( Open , true );
   int copied= CopyOpen ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), Open );
   if (copied> 0 && index<copied) open= Open [index];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low ( int index)
  {
   double low= 0 ;
   ArraySetAsSeries ( Low , true );
   int copied= CopyLow ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), Low );
   if (copied> 0 && index<copied) low= Low [index];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High ( int index)
  {
   double high= 0 ;
   ArraySetAsSeries ( High , true );
   int copied= CopyHigh ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), High );
   if (copied> 0 && index<copied) high= High [index];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close ( int index)
  {
   double close= 0 ;
   ArraySetAsSeries ( Close , true );
//   int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),Close);
   int copied= CopyClose ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), Close );
   if (copied> 0 && index<copied) close= Close [index];
   return (close);
  }
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double open= 0 ;
   ArraySetAsSeries (OpenI, true );
   int copied= CopyOpen (symbol,timeframe, 0 , Bars (symbol,timeframe),OpenI);
   if (copied> 0 && index<copied) open=OpenI[index];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double low= 0 ;
   ArraySetAsSeries (LowI, true );
   int copied= CopyLow (symbol,timeframe, 0 , Bars (symbol,timeframe),LowI);
   if (copied> 0 && index<copied) low=LowI[index];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double high= 0 ;
   ArraySetAsSeries (HighI, true );
   int copied= CopyHigh (symbol,timeframe, 0 , Bars (symbol,timeframe),HighI);
   if (copied> 0 && index<copied) high=HighI[index];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double close= 0 ;
   ArraySetAsSeries (CloseI, true );
   int copied= CopyClose (symbol,timeframe, 0 , Bars (symbol,timeframe),CloseI);
   if (copied> 0 && index<copied) close=CloseI[index];
   return (close);
  }


옵션 2

 //-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open ( int index)
  {
   double open= 0 ;
   int copied= CopyOpen ( Symbol (), 0 ,index, 1 , Open );
   if (copied> 0 ) open= Open [ 0 ];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low ( int index)
  {
   double low= 0 ;
   int copied= CopyLow ( Symbol (), 0 ,index, 1 , Low );
   if (copied> 0 ) low= Low [ 0 ];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High ( int index)
  {
   double high= 0 ;
   int copied= CopyHigh ( Symbol (), 0 ,index, 1 , High );
   if (copied> 0 ) high= High [ 0 ];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close ( int index)
  {
   double close= 0 ;
   int copied= CopyClose ( Symbol (), 0 ,index, 1 , Close );
   if (copied> 0 ) close= Close [ 0 ];
   return (close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double open= 0 ;
   int copied= CopyOpen (symbol,timeframe,index, 1 ,OpenI);
   if (copied> 0 ) open=OpenI[ 0 ];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double low= 0 ;
   int copied= CopyLow (symbol,timeframe,index, 1 ,LowI);
   if (copied> 0 ) low=LowI[ 0 ];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double high= 0 ;
   int copied= CopyHigh (symbol,timeframe,index, 1 ,HighI);
   if (copied> 0 ) high=HighI[ 0 ];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double close= 0 ;
   int copied= CopyClose (symbol,timeframe,index, 1 ,CloseI);
   if (copied> 0 ) close=CloseI[ 0 ];
   return (close);
  }
 
Aleksey Vyazmikin :

도움을 요청합니다 - OHLC 환경의 가치를 얻으려면 정상적인 코드가 필요합니다 - 기존 환경은 매우 느립니다

옵션 1


옵션 2

사용 방법에 대한 코드를 게시하십시오.
 
Vitaly Muzichenko :
사용 방법에 대한 코드를 게시하십시오.

어떤 부분이 느려지는지 모르겠습니다. 주기를 포함하여 다양한 방식으로 사용합니다...


여기 예가 있습니다


             for ( int X= 1 ;X<DonchianBarStart+ 1 ;X++)
              {
               PricePeresek=Donchianf( 0 ,X+ 1 );
               if (( Low (X)>PricePeresek && High (X)>PricePeresek) || 
                  ( Low (X)<PricePeresek && High (X)<PricePeresek))
                  calcBarPeresek++;
               else break ;
              }
 
Aleksey Vyazmikin :

어떤 부분이 느려지는지 모르겠습니다. 주기를 포함하여 다양한 방식으로 사용합니다...

사이클에서는 그렇게 보이며 기능 없이도 할 수 있습니다.

             double LOW[ 1 ],HIGH[ 1 ];
             for ( int X= 1 ;X<DonchianBarStart+ 1 ;X++)
              {
               PricePeresek=Donchianf( 0 ,X+ 1 );
               CopyLow ( Symbol (), PERIOD_CURRENT ,X, 1 ,LOW);
               CopyHigh ( Symbol (), PERIOD_CURRENT ,X, 1 ,HIGH);
               if ((LOW[ 0 ]>PricePeresek && HIGH[ 0 ]>PricePeresek) || 
                  (LOW[ 0 ]<PricePeresek && HIGH[ 0 ]<PricePeresek))
                  calcBarPeresek++;
               else break ;
              }
사유: