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

 
Alexander Antoshkin :

안녕하세요 블라디미르

분명히 질문을 잘못 공식화했는데 이해하지 못했습니다.

하위 창은 필요하지 않습니다. 표준 눈금이 놓일 때 가격 차트에 표시기를 넣어야 합니다.

나는 이것을 예로 들어 이해하려고 노력한다.

그리고 최종 결과 차트에 설치된 표시기에 고유한 번호가 있기를 원하므로 차트에 생성된 "추가" 버튼을 사용하여 필요한 사본 수를 다이얼하고 .... 십자 버튼 ........ 글쎄요 다른 환상이 너무 많아서 아직 쓰고 싶지 않습니다))

표시기를 기본 차트 창에 추가해야 하는 경우 다음을 수행합니다 .

하위 창

【인】 차트 하위 창 번호입니다. 0은 기본 차트 창을 의미합니다 . 새 창에 표시기를 추가하려면 매개변수가 마지막 기존 창의 인덱스보다 하나 더 커야 합니다. 즉, CHART_WINDOWS_TOTAL 과 동일해야 합니다 . 매개변수 값이 CHART_WINDOWS_TOTAL 값을 초과하면 새 창이 생성되지 않고 표시기가 추가되지 않습니다.

이 단계에서 Expert Advisor가 아직 구성되지 않았기 때문에 OnInit()에 표시기를 추가하는 것은 불가능합니다. 그러나 OnTick()이라는 함수는 Expert Advisor가 본격 가동되고 있다는 신호다.

 //+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

input int MA_Period= 21 ;
input int MA_Shift= 0 ;
input ENUM_MA_METHOD MA_Method= MODE_SMA ;
//--- variables
int MA_handle= INVALID_HANDLE ;
bool first_start= false ;
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit ()
  {
   Print ( __FUNCTION__ , ", first_start = " ,first_start);
   MA_handle= iCustom ( NULL , 0 , "Examples\\Custom Moving Average" ,MA_Period,MA_Shift,MA_Method, PRICE_CLOSE );
   if (MA_handle== INVALID_HANDLE )
       return ( INIT_FAILED );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (!first_start)
     {
       if (AddIndicator()) //попробуем добавить индикатор на график 
         first_start= true ;
     }
  }
//+------------------------------------------------------------------+ 
//| Функция проверки и добавления индикатора на график               | 
//+------------------------------------------------------------------+ 
bool AddIndicator()
  {
//--- сбросим код ошибки 
   ResetLastError ();
//--- накладываем индикатор на график   
   int subwindow= 0 ;
   PrintFormat ( "Добавляем индикатор на окно %d графика" ,subwindow);
   if (! ChartIndicatorAdd ( 0 ,subwindow,MA_handle))
     {
       PrintFormat ( "Не удалось добавить индикатор  на окно %d графика. Код ошибки  %d" ,
                  subwindow, GetLastError ());
     }
   return ( true );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
그리고 AddIndicator() 함수를 다시 작성하여 표시기를 추가하려는 시도가 실패하면 false를 반환합니다.
 
Alexander Antoshkin :

안녕하세요 블라디미르

분명히 질문을 잘못 공식화했는데 이해하지 못했습니다.

하위 창은 필요하지 않습니다. 표준 눈금이 놓일 때 가격 차트에 표시기를 넣어야 합니다.

나는 이것을 예로 들어 이해하려고 노력한다.

그리고 최종 결과 차트에 설치된 표시기에 고유한 번호가 있기를 원하므로 차트에 생성된 "추가" 버튼을 사용하여 필요한 사본 수를 다이얼하고 .... 십자 버튼 ........ 글쎄요 다른 환상이 너무 많아서 아직 쓰고 싶지 않습니다))

표시기는 이름을 가질 수 있습니다. 숫자가 마음에 들면 숫자로 지정하십시오. 그러나 숫자는 숫자가 아니라 텍스트가 됩니다. 하나 이상의 표시기 번호를 추가할 수 있는 사용자 지정 제어판이 필요하십니까?
 
날짜의 서수로 필터를 만드는 방법과 해당 월의 주를 별도로 만드는 방법을 알려주세요. 낮에는 이렇게 했습니다.


bool TimeStart=false;

int hour=12;


//--Фильтр по ремени открытия бара внутри дня

if (TimeStart==true)

{      

      datetime  Open_timePos=iTime(_Symbol,0,0);

      MqlDateTime str1; 

      TimeToStruct(Open_timePos,str1);

      str1.hour=hour;

      str1.min=0;

      str1.sec=0;


      datetime start_time=StructToTime(str1);

      if (start_time>iTime(_Symbol,0,0))

      {

            BuyPrIMA=false;

            SellPrIMA=false;      

      

      } 

 

 

 
-Aleks- :
날짜의 서수로 필터를 만드는 방법과 해당 월의 주를 별도로 만드는 방법을 알려주세요. 낮에는 이렇게 했습니다.

int НомерДНЯвМесяце= TimeDay ( iTime ( _Symbol , 0 , 0 ));

int НомерДняНедели= TimeDayOfWeek ( iTime ( _Symbol , 0 , 0 )); int НомерНеделиВмесяце= NormalizeDouble (НомерДНЯвМесяце/ 7 , 0 );

 
new-rena :
그는 그 달의 주에 대해 묻는다.
 
pako :
그는 그 달의 주에 대해 묻는다.

세 가지 옵션을 모두 수행했습니다. 그가 기초로 삼고 싶은 pliz를 지정하십시오.

이것?

 int НомерНеделиВмесяце= NormalizeDouble (НомерДНЯвМесяце/ 7 , 0 );
 
new-rena :
세 가지 옵션을 모두 수행했습니다. 플리즈 지정

한 달에 5주에서 6주가 있고, 오늘이 그 달의 네 번째 주입니다.

str.day 날짜

str.day_of_week 요일

 
new-rena :
고맙습니다.
 
pako :
한 달에 4개의 5주가 있고 오늘이 그 달의 네 번째 주입니다.
이해했다. 즉, 그는 이전 달의 29일(예: 월요일)과 이번 달의 31일(예: 월요일)에 이러한 특성의 주를 고려하려고 합니다. 지금 한 달 넘게 진행 중입니다. 그러한 주를 계산하는 것은 논리적이지 않습니다. 그렇지 않으면 한 주가 전체가 아닐 것입니다. 헐 말도안돼....
 
new-rena :

세 가지 옵션을 모두 수행했습니다. 그가 기초로 삼고 싶은 pliz를 지정하시겠습니까?

이것?

이것은 작동하지 않습니다
사유: