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

 
Василий :
예, MQL 5에 대해 묻고 있습니까? 예, 현재 기호의 데이터에 액세스해야 합니다. 데이터는 어드바이저 코드에 필요합니다. 예를 들어 현재 막대 앞에 있는 막대 의 종가 를 알아야 합니다.
CopyTime의 예 보기
 
Karputov Vladimir :
CopyTime의 예 보기
알겠습니다. 해결해 보겠습니다. 고맙습니다!
 
Василий :
예, MQL 5에 대해 묻고 있습니까? 예, 현재 기호의 데이터에 액세스해야 합니다. 데이터는 어드바이저 코드에 필요합니다. 예를 들어 현재 막대 앞에 있는 막대 의 종가 를 알아야 합니다.

문서를 조금 읽어야 합니다.

 int    CopyClose ( 
   string            symbol_name,       // имя символа 
   ENUM_TIMEFRAMES   timeframe,         // период 
   int               start_pos,         // откуда начнем  
   int               count,             // сколько копируем 
   double            close_array[]       // массив для копирования цен закрытия 
   );

다음은 종가 및 표시기 버퍼를 가져오는 예입니다.

 ENUM_ORDER_TYPE indicator_01()
  {
   double ma[ 2 ];
   double close[ 2 ];
   static int h_ma= INVALID_HANDLE ;
   if ( Bars ( _Symbol , PERIOD_CURRENT )<ma_period+ 1 ) return ( WRONG_VALUE );
   if (h_ma== INVALID_HANDLE || h_ma== 0 )
     {
      h_ma= iMA ( _Symbol , _Period ,ma_period,ma_shift,ma_method,ma_price);
       return ( WRONG_VALUE );
     }
   if ( CopyBuffer (h_ma, 0 , 1 , 2 ,ma)< 2 ) return ( WRONG_VALUE );
   if ( CopyClose ( _Symbol , PERIOD_CURRENT , 1 , 2 ,close)< 2 ) return ( WRONG_VALUE );

   if (close[ 1 ]>ma[ 1 ]&&close[ 0 ]<ma[ 0 ]) return ( ORDER_TYPE_BUY );
   if (close[ 1 ]<ma[ 1 ]&&close[ 0 ]>ma[ 0 ]) return ( ORDER_TYPE_SELL );

   return ( WRONG_VALUE );
  }
 
Sergey Gritsay :

...

다음은 종가 및 표시기 버퍼를 가져오는 예입니다.

나쁜 예. MQL5에 표시기 핸들을 저장하는 변수는 OnInit()에서 핸들을 수신하기 위해 전역 프로그램 변수 영역의 "헤더"에 선언되어야 합니다. 그런 다음에만 프로그램의 어느 곳에서나 데이터를 수신하기 위해 핸들에 액세스할 수 있습니다.
 

모두에게 경례!

OnTrade 이벤트를 통해 테스터에서 거래 내역에 대한 데이터를 수신합니다.

   for ( int i= 0 ;i< HistoryDealsTotal ();i++){
       ulong deal_ticket= HistoryDealGetTicket (i);
       Print ( "ticket=" ,deal_ticket);
       Print ( "price=" , HistoryDealGetDouble (deal_ticket, DEAL_PRICE ));
       Print ( "time=" , TimeToString ( HistoryDealGetInteger (deal_ticket, DEAL_TIME )));

그리고 이것은 내가 로그에서 얻은 것입니다.

0 22:58:16.487 Core 1 2016.04.01 00:00:00 현재 기호 기간 GBPUSD에 대한 터미널 기록의 막대 수 = 7729
JR 0 22:58:16.487 코어 1 2016.04.01 03:00:00 거래 시도 0 lot 0.01
EL 0 22:58:16.487 코어 1 2016.04.01 03:00:00 시장 매수 0.01 GBPUSD sl: 1.43033 tp: 1.44034 (1.43646 / 1.43654 / 1.436
GO 0 22:58:16.487 코어 1 2016.04.01 03:00:00 거래 #2 1.43654에 0.01 GBPUSD 매수 완료(주문 #2 기준)
GE 0 22:58:16.487 코어 1 2016.04.01 03:00:00 거래 수행 [#2 0.01GBPUSD에서 1.43654 구매]
NK 0 22:58:16.487 코어 1 2016.04.01 03:00:00 주문 수행 1.43654에서 0.01 구매 [#2 0.01 GBPUSD에서 1.43654 구매]
HI 0 22:58:16.487 코어 1 2016.04.01 03:00:00 티켓 = 1
HM 0 22:58:16.487 코어 1 2016.04.01 03:00:00 가격=0.0
HH 0 22:58:16.487 코어 1 2016.04.01 03:00:00 시간=2016.04.01 00:00
CR 0 22:58:16.487 코어 1 2016.04.01 03:00:00 티켓=2
ID 0 22:58:16.487 코어 1 2016.04.01 03:00:00 가격=1.43654
OP 0 22:58:16.487 코어 1 2016.04.01 03:00:00 시간=2016.04.01 03:00

최초의 제로 가격 거래는 어디에서 왔습니까? 하지 않습니다 :-).

설명해주세요.

Z.Y. 이해하는 것 같습니다. 첫 번째 거래의 이익은 10kg입니다. 하지만 여전히 이상합니다. 무엇을 위해?

그리고 여기에 또 다른 질문이 있습니다. 거래(내 것입니다 - 1.43654에서 구매)는 아직 해결되지 않았습니다. 그녀는 어떻게 역사에 남게 되었습니까?

MQL4에서처럼 닫힌 거래의 데이터만 어레이로 읽어야 합니다. 그것을하는 방법 ???

PS 필터 기준 DEAL_ENTRY_OUT ?

 
Alexandr Saprykin :
터미널을 다시 설치해 보셨습니까?
네 감사합니다. 그것만으로도 도움이 되었습니다.
 
Karputov Vladimir :
나쁜 예. MQL5에 표시기 핸들을 저장하는 변수는 OnInit()에서 핸들을 수신하기 위해 전역 프로그램 변수 영역의 "헤더"에 선언되어야 합니다. 그런 다음에만 프로그램의 어느 곳에서나 데이터를 수신하기 위해 핸들에 액세스할 수 있습니다.

OnInit() 함수가 한 번 실행되고 표시기가 처음 생성될 것이라는 100% 보장이 없기 때문에 핸들을 얻는 것에 대해서는 동의하지 않습니다. 변수 선언과 관련하여 당신이 옳을 수도 있지만 정적 변수를 사용하는 옵션이 더 나쁘면 문서에 다음과 같이 나와 있습니다.

static 키워드로 선언된 지역 변수는 함수의 수명 동안 값을 유지합니다. 이후에 함수를 호출할 때마다 이러한 지역 변수에는 이전 호출 중에 가졌던 값이 포함됩니다.

 

DEAL_ENTRY_OUT 기준 필터링

 
Sergey Gritsay :

OnInit() 함수가 한 번 실행되고 표시기가 처음 생성될 것이라는 100% 보장이 없기 때문에 핸들을 얻는 것에 대해서는 동의하지 않습니다. 변수 선언과 관련하여 당신이 옳을 수도 있지만 정적 변수를 사용하는 옵션이 더 나쁘면 문서에 다음과 같이 나와 있습니다.

...

이를 위해 표시기 핸들이 생성될 때 OnInit()에서 검사가 수행됩니다. 핸들이 생성되지 않은 경우 INIT_FAILED가 OnOnit()에서 반환되어야 합니다 . 즉, 표시기 핸들은 OnInit()에서 한 번만 생성됩니다. 이것은 "4"가 아닙니다. 프로그램의 모든 구석에 있는 엉망이고 비틀거리고 발표하는 핸들입니다.
 
Karputov Vladimir :
이를 위해 표시기 핸들이 생성될 때 OnInit()에서 검사가 수행됩니다. 핸들이 생성되지 않은 경우 INIT_FAILED가 OnOnit()에서 반환되어야 합니다 . 즉, 표시기 핸들은 OnInit()에서 한 번만 생성됩니다. 이것은 "4"가 아닙니다. 프로그램의 모든 구석에 있는 엉망이고 비틀거리고 발표하는 핸들입니다.
나는 내 진술에서 그렇게 범주적이지 않을 것입니다. 엉망이 옷장에 있지 않고, 엉망이 머리에 있습니다 (c)
사유: