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

 
Pineapple88 :

안녕하세요!

배열을 처리하려고하는데 다음 질문이 생겼습니다.

이 예제에서 ArraySetAsSeries 를 사용하고 CopyRates 가 현재에서 과거로 계산되는 경우 플래그를 true로 설정하는 이유는 무엇입니까?

현재에서 과거로 배열을 반복하려면 ArraySetAsSeries 함수가 필요하다는 것을 이해합니다.

이 예제에서 이 함수의 목적을 이해하고 싶습니다.

후에

 ArraySetAsSeries (rates, true ); 

rate[0]은 차트의 가장 오른쪽 막대에 해당합니다. 이것은 "현재"와 "미래"라는 혼란스러운 용어가 없는 가장 간단한 설명입니다.

 
Vladimir Karputov :

후에

rate[0]은 차트의 가장 오른쪽 막대에 해당합니다. 이것은 "현재"와 "미래"라는 혼란스러운 용어가 없는 가장 간단한 설명입니다.

답변 해주셔서 감사합니다!

그러나 ArraySetAsSeries 사용하지 않으면 CopyRates는 차트의 가장 오른쪽 막대에 rate[0]도 할당합니다.

ArraySetAsSeries 함수 없이 모든 것이 동일한 방식으로 작동하는 경우ArraySetAsSeries 함수가 필요한지 이해하려고 합니다.

아니면 그냥 허용되는 코딩 형식입니까?

 
Pineapple88 :

답변 해주셔서 감사합니다!

그러나 ArraySetAsSeries 사용하지 않으면 CopyRates는 차트의 가장 오른쪽 막대에 rate[0]도 할당합니다.

ArraySetAsSeries 함수 없이 모든 것이 동일한 방식으로 작동하는 경우ArraySetAsSeries 함수가 필요한지 이해하려고 합니다.

아니면 그냥 허용되는 코딩 형식입니까?

당신이 틀렸습니다. CopyRates 는 rate[] 배열의 크기 때문에 rate[0]을 가장 오래된 값으로 설정했습니다.
 
Anatolii Zainchkovskii :
틀렸습니다. CopyRates는 rate[] 배열의 크기 때문에 rate[0]을 가장 오래된 값으로 설정합니다.

고맙습니다!

이제 이해했어 내가 틀렸어

 

안녕하세요!

다시 한 번 도움을 요청합니다!

MA(20)가 MA(50)를 아래에서 위로 교차할 때 "buy"를 인쇄하도록 조건을 지정하는 코드를 작성했습니다.

 input int SmallMovingAverage = 20 ;
input int BigMovingAverage   = 50 ;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {

   double Ask = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits );
   double Bid = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits );

   string signal = "" ;

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   int SmallMovingAverageDefinition = iMA ( _Symbol , _Period ,SmallMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );
   int BigMovingAverageDefinition   = iMA ( _Symbol , _Period ,BigMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );

   CopyBuffer (SmallMovingAverageDefinition, 0 , 0 , 3 ,SmallMovingAverageArray);
   CopyBuffer (BigMovingAverageDefinition, 0 , 0 , 3 ,BigMovingAverageArray);

   if (BigMovingAverageArray[ 1 ] < SmallMovingAverageArray[ 1 ])
   if (BigMovingAverageArray[ 2 ] > SmallMovingAverageArray[ 2 ])
        {
         Print ( "buy" );
        }
  }

그리고 실제로 실행은 다음과 같이 진행됩니다.

파일:
n2b3h1.png  140 kb
 
Pineapple88 :

안녕하세요!

다시 한 번 도움을 요청합니다!

MA(20)가 MA(50)를 아래에서 위로 교차할 때 "buy"를 인쇄하도록 조건을 지정하는 코드를 작성했습니다.

그리고 실제로 실행은 다음과 같이 진행됩니다.

가장 큰 실수: 각 눈금 에 두 개의 표시기 핸들을 만듭니다. 올바른 방법: 차단

   int SmallMovingAverageDefinition = iMA ( _Symbol , _Period ,SmallMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );
   int BigMovingAverageDefinition   = iMA ( _Symbol , _Period ,BigMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );

OnInit로 이동하고 핸들 유효성 검사를 추가합니다.


또한 IMA에서 값을 취하는 배열은 다음을 수행해야 합니다.

 ArraySetAsSeries (SmallMovingAverageArray, true );  
ArraySetAsSeries (BigMovingAverage, true )
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 

신속한 응답에 감사드립니다!

ArraySetAsSeries 에 대해서는 명확합니다.

인디케이터를 OnInit으로 옮기고 핸들을 확인하는 방법을 알아보겠습니다.

***

 
Pineapple88 :

신속한 응답에 감사드립니다!

ArraySetAsSeries 에 대해서는 명확합니다.

인디케이터를 OnInit으로 옮기고 핸들을 확인하는 방법을 알아보겠습니다.

***

모든 것이 원래

  • 문서: iMA
  • MetaEditor에서 - Expert Advisor [데이터 폴더]MQL5\Experts\Examples\Moving Average\Moving Average.mq5
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
 
Vladimir Karputov :

모든 것이 원래

  • 문서: iMA
  • MetaEditor에서 - Expert Advisor [데이터 폴더]MQL5\Experts\Examples\Moving Average\Moving Average.mq5

감사합니다 공부하겠습니다

 

수정했습니다. 모든 것이 제대로 작동하는 것 같습니다!

두 개의 MA 표시기를 OnInit 기능 으로 이동했습니다.

내가 이해하는 것처럼 OnInit 함수에서는 표시기 핸들만 만들고 배열을 사용하는 다른 모든 조작은 OnTick 함수에 입력되고 각 틱에서 확인됩니까?

 int SmallMovingAverageDefinition = 0 ;
int BigMovingAverageDefinition   = 0 ;
input int SmallMovingAverage = 20 ;
input int BigMovingAverage   = 50 ;


int OnInit ()
  {
//---
   SmallMovingAverageDefinition = iMA ( _Symbol , _Period ,SmallMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );
   BigMovingAverageDefinition   = iMA ( _Symbol , _Period ,BigMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );

   if (SmallMovingAverageDefinition== INVALID_HANDLE   || BigMovingAverageDefinition== INVALID_HANDLE )
     {
       Print ( "Ошибка создания хендла" );
     }
//---
   return ( INIT_SUCCEEDED );
  }


void OnDeinit ( const int reason)
  {
//---

  }


void OnTick ()
  {

   double Ask = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits );
   double Bid = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits );

   string signal = "" ;

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   ArraySetAsSeries (SmallMovingAverageArray, true );
   ArraySetAsSeries (BigMovingAverageArray, true );

   CopyBuffer (SmallMovingAverageDefinition, 0 , 0 , 3 ,SmallMovingAverageArray);
   CopyBuffer (BigMovingAverageDefinition, 0 , 0 , 3 ,BigMovingAverageArray);

   if (SmallMovingAverageArray[ 1 ] > BigMovingAverageArray[ 1 ])
       if (SmallMovingAverageArray[ 2 ] < BigMovingAverageArray[ 2 ])
        {
         Print ( "buy" );
        }
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
사유: