찻주전자의 질문 - 페이지 57

 
Lizar :

이제 기사에 게시된 버전을 살펴보겠습니다. 현재 여러 스파이 전문가가 만들어졌으며 훌륭하게 작동합니다.

메타드라이버:

이 기술은 테스터에서 작동하지 않을 것이라고 생각합니다.

공장.

이것이 테스터에서 작동하는 것이 좋습니다. 나는 이것을 아직 구현하지 못했습니다. 그러나 이것은 아마도 경험 부족 때문일 것입니다. 타이머 도중에 멈췄지만 오랜만입니다.

차트에 전문 상담원을 추가하려고 하면 다음 메시지가 나타납니다.

USDJPY가 그것과 어떤 관련이 있는지 알 수 없습니다. 코드에서 초기화하는 동안 핸들 수신을 주석 처리했는데도 이 메시지가 나옵니다.

 
Lizar :

공장.

Konstantin, 일반적으로 OnTick() 함수 또는 OnTimer() 에 있는 Expert Advisor의 실행 코드를 OnChartEvent() 에 배치해야 구성표가 다중 통화 모드에서 작동한다는 것을 올바르게 이해하고 있습니까? 실시간으로 테스터에서.
 
tol64 :

이것이 테스터에서 작동하는 것이 좋습니다. 나는 이것을 아직 구현하지 못했습니다. 그러나 이것은 아마도 경험 부족 때문일 것입니다. 타이머 중에 멈췄지만 깁니다.

차트에 전문 상담원을 추가하려고 하면 다음 메시지가 나타납니다.

USDJPY가 그것과 어떤 관련이 있는지 알 수 없습니다. 코드에서 초기화하는 동안 핸들 수신을 주석 처리했는데도 이 메시지가 나옵니다.

아직 보지 않았습니다.

톨64 :
Konstantin, 일반적으로 OnTick() 함수 또는 OnTimer() 에 있는 Expert Advisor의 실행 코드를 OnChartEvent() 에 배치해야 구성표가 다중 통화 모드에서 작동한다는 것을 올바르게 이해하고 있습니까? 실시간으로 테스터에서.

네.

 
tol64 :

이것이 테스터에서 작동하는 것이 좋습니다. 나는 이것을 아직 구현하지 못했습니다. 그러나 이것은 아마도 경험 부족 때문일 것입니다. 타이머 도중에 멈췄지만 오랜만입니다.

차트에 전문 상담원을 추가하려고 하면 다음 메시지가 나타납니다.

USDJPY가 그것과 어떤 관련이 있는지 알 수 없습니다. 코드에서 초기화하는 동안 핸들 수신을 주석 처리했는데도 이 메시지가 나옵니다.

보았다. 전문 작업자. 오류 메시지 에 오타가 있습니다.

그가 당신에게 준 것은 MarketWatch 창에서 기호가 선택되지 않았다는 메시지였습니다. Expert Advisor가 작동하는 기호를 MarketWatch 창으로 설정하거나 OnInit()에서 해당 기호에 대한 스파이 호출을 주석 처리합니다.

exSpy Control panel MCM.mq5의 수정된 버전을 첨부합니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
Lizar :

보았다. 전문 작업자. 오류 메시지 에 오타가 있습니다.

그가 당신에게 준 것은 MarketWatch 창에서 기호가 선택되지 않았다는 메시지였습니다. Expert Advisor가 작동하는 기호를 MarketWatch 창으로 설정하거나 OnInit()에서 해당 기호에 대한 스파이 호출을 주석 처리합니다.

exSpy Control panel MCM.mq5의 수정된 버전을 첨부합니다.

부주의해서 웃기까지 했습니다.))) 결국 USDJPY는 Market Watch 창에 있었습니다. 다른 기호는 없었고 지문에는 동일한 메시지만 있었습니다. )))

고맙습니다.

 
tol64 :
Konstantin, 일반적으로 OnTick() 함수 또는 OnTimer() 에 있는 Expert Advisor의 실행 코드를 OnChartEvent() 에 배치해야 구성표가 다중 통화 모드에서 작동한다는 것을 올바르게 이해하고 있습니까? 실시간으로 테스터에서.

필요한 모든 기능을 별도의 프로시저와 기능으로 구현한 다음(후자를 권장합니다) Expert Advisor의 아무 곳에서나 호출하는 것이 좋습니다.

OOP를 사용하면 필요한 모든 기능을 기본 클래스의 여러 메서드 집합으로 구현할 수 있습니다(일반적으로 이것은 전문가 클래스의 후손임).

 
Interesting :

필요한 모든 기능을 별도의 프로시저와 기능으로 구현한 다음(후자를 권장합니다) Expert Advisor의 아무 곳에서나 호출하는 것이 좋습니다.

OOP를 사용하면 필요한 모든 기능을 기본 클래스의 여러 메서드 집합으로 구현할 수 있습니다(일반적으로 이것은 전문가 클래스의 후손임).

현재 거의 모든 기능이 이런 식으로 구현되어 있습니다. 거의. 즉, 전체 코드는 주요 계산을 포함하는 몇 가지 함수입니다. 나는 아직 OOP를 완전히 이해하지 못했지만 이미 OOP를 사용하는 이점을 알고 있습니다. 코드는 나날이 성장하고 있고 곧 OOP 없이 사용하는 것은 매우 불편할 것입니다.

다양한 다중 통화 테스트 방법의 결과를 제공하는 별도의 주제를 만들었습니다. 다중 통화 Expert Advisors의 테스트 결과 . 이 주제에 대한 많은 부분이 나에게 여전히 불분명합니다.

 

내 견적이 로드되지 않는 이유는 무엇입니까? 예를 들어 EURUSD는 그해 8월까지만 로드되었습니다. 그리고 그게 전부입니다. 그들은 더 이상 로드하고 싶지 않습니다. 어딘가에 따옴표가 있는 파일이 게시되었을 수 있습니까?

나는 막대 수를 무제한으로 설정했습니다. 여러 번 업데이트되었습니다. HOME 버튼을 반복해서 눌렀습니다. 여전히 로드되지 않습니다

 

그리고 모든 MT5 파일과 해당 세부 정보의 "전체 목록"은 어디에 있습니까?

오늘에서야 바오밥을 끊었습니다. 죄송합니다.

 

다중 시간 프레임 프랙탈 표시기.

표시기의 핵심은 한 시간대(또는 한 번에 여러 개)의 프랙탈을 다른 시간대에 표시하는 것입니다.

소스 문서: https://www.mql5.com/en/code/7304 , MQL4의 표시기 코드

처음에는 .mq5에 대한 미세 수정으로 .mq4 버전에서 청사진을 만들려고 했습니다(이 코드도 제공하지 않습니다. MQL4 소스에서 High[shift+ i] 안에 입력

 bool Fractal ( string F, int Per, int shift) {...}

, 내가 이해하는 것처럼 MQL5에서는 그렇게 쉽게 수행할 수 없습니다. 즉, OnCalculate 외부에 이러한 배열의 기본 가시성이 없습니다.

그런 다음 다른 PERIOD_... 매개변수를 사용하여 여러 iFractals 핸들을 호출하여 MQL5에서 다시 작성하려고 했습니다.결과적으로 프랙탈이 떨어져 나갔지만 때로는 해당 TF에서 한 시리즈의 프랙탈 화살표만 적절하게 착지할 수 있었습니다. 주목할만한 것은 다른 다른 것들에서 터미널의 같은 시간 프레임으로 돌아갈 때 파쇄도가 다르게 그려졌다는 것입니다. 이것은 마음에 가져 오지 않은이 지표의 터미널 데이터가 완전히 이해할 수없는 방식으로 걷고 있음을 시사합니다. 나는 항상 그것이 하나의 동일한 잘못된 그림을 안정적으로 반복해야한다고 생각했지만 더 이상은 아닙니다. 물론 두 번째 변형에서는 bool Fractal ( string F, int Per, int shift) {...} 에도 도달하지 않았습니다. 사실 숙련된 지표 개발자에게 문의하고 싶습니다.

내가 그릴 수 있었던 것은 다음과 같다.

 #property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1   "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1   2

#property indicator_label2   "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2   2

#property indicator_label3   "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3   2

#property indicator_label4   "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4   2

#property indicator_label5   "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5   2

#property indicator_label6   "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6   2

#property indicator_label7   "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7   2

#property indicator_label8   "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8   2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=- 10 ;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit ()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer ( 0 ,ExtMapBuffer1, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,ArrowShift);
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer1, EMPTY_VALUE );

   SetIndexBuffer ( 1 ,ExtMapBuffer2, INDICATOR_DATA );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT ,-ArrowShift);
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer2, EMPTY_VALUE );

//---
   SetIndexBuffer ( 2 ,ExtMapBuffer3, INDICATOR_DATA );
   PlotIndexSetInteger ( 2 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 2 , PLOT_ARROW_SHIFT ,ArrowShift);
   PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer3, EMPTY_VALUE );

   SetIndexBuffer ( 3 ,ExtMapBuffer4, INDICATOR_DATA );
   PlotIndexSetInteger ( 3 , PLOT_ARROW , 218 );
   PlotIndexSetInteger ( 3 , PLOT_ARROW_SHIFT ,-ArrowShift);
   PlotIndexSetDouble ( 3 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer4, EMPTY_VALUE );

//---
   SetIndexBuffer ( 4 ,ExtMapBuffer5, INDICATOR_DATA );
   PlotIndexSetInteger ( 4 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 4 , PLOT_ARROW_SHIFT ,ArrowShift);
   PlotIndexSetDouble ( 4 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer5, EMPTY_VALUE );

   SetIndexBuffer ( 5 ,ExtMapBuffer6, INDICATOR_DATA );
   PlotIndexSetInteger ( 5 , PLOT_ARROW , 218 );
   PlotIndexSetInteger ( 5 , PLOT_ARROW_SHIFT ,-ArrowShift);
   PlotIndexSetDouble ( 5 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer6, EMPTY_VALUE );

//---
   SetIndexBuffer ( 6 ,ExtMapBuffer7, INDICATOR_DATA );
   PlotIndexSetInteger ( 6 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 6 , PLOT_ARROW_SHIFT ,ArrowShift);
   PlotIndexSetDouble ( 6 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer7, EMPTY_VALUE );

   SetIndexBuffer ( 7 ,ExtMapBuffer8, INDICATOR_DATA );
   PlotIndexSetInteger ( 7 , PLOT_ARROW , 218 );
   PlotIndexSetInteger ( 7 , PLOT_ARROW_SHIFT ,-ArrowShift);
   PlotIndexSetDouble ( 7 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArrayInitialize (ExtMapBuffer8, EMPTY_VALUE );

   handle1= iFractals ( _Symbol , PERIOD_M15 );
   handle2= iFractals ( _Symbol , PERIOD_H1 );
   handle3= iFractals ( _Symbol , PERIOD_H4 );
   handle4= iFractals ( _Symbol , PERIOD_D1 );

   return ( 0 );
  }

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int B1 = BarsCalculated (handle1);
   int B2 = BarsCalculated (handle2);
   int B3 = BarsCalculated (handle3);
   int B4 = BarsCalculated (handle4);

   CopyBuffer (handle1, 0 , 0 ,B1,ExtMapBuffer1);
   CopyBuffer (handle1, 1 , 0 ,B1,ExtMapBuffer2);
   CopyBuffer (handle2, 2 , 0 ,B2,ExtMapBuffer3);
   CopyBuffer (handle2, 3 , 0 ,B2,ExtMapBuffer4);
   CopyBuffer (handle3, 4 , 0 ,B3,ExtMapBuffer5);
   CopyBuffer (handle3, 5 , 0 ,B3,ExtMapBuffer6);
   CopyBuffer (handle4, 6 , 0 ,B4,ExtMapBuffer7);
   CopyBuffer (handle4, 7 , 0 ,B4,ExtMapBuffer8);

   return (rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   return ;
  }
 

분명히 OnCalculate 내부와 외부 bool 함수에서 일부 조건부 검사가 누락되었거나 이미 코드에 있는 것을 올바르게 사용하지 않고 있습니다. 또한 배열을 올바른 위치에서 올바르게 초기화하고 시계열로 설정해야 하지 않을까요?