오류, 버그, 질문 - 페이지 585

 
거래 신호 모듈 을 마법사가 만든 Expert Advisor와 별도로 사용할 수 있습니까? 테스트를 위해 내가 쓴


#include <Expert\Signal\SignalMA.mqh>


CSignalMA  SignalMA;
int        TickCount;
string     Str;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TickCount=0;
 
   SignalMA.Symbol(Symbol());
   SignalMA.Period(PERIOD_H1);
   SignalMA.Weight(0.5);
 
   SignalMA.PeriodMA(20);
   SignalMA.Shift(0);
   SignalMA.Method(MODE_SMA);
   SignalMA.Applied(PRICE_CLOSE);

 
   return(0);
 
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   TickCount++;
   Str = "LongCondition  = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
   Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
   Comment(Str);
 
  }
//+------------------------------------------------------------------+

그러나 굵게 강조 표시된 것은 CSignalMA 클래스에 없지만 컴파일되어 기호에 던지려고하면 다음을 제공합니다.


2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::기간: 기간 변경 금지
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: 기호 변경 금지

표준 거래 신호의 기호 및 기간을 변경하는 방법은 무엇입니까?
Использование прямого и обратного преобразований Фишера для анализа рынков в MetaTrader 5
Использование прямого и обратного преобразований Фишера для анализа рынков в MetaTrader 5
  • 2011.08.16
  • investeo
  • www.mql5.com
Функция распределения рыночных данных не является гауссовой, скорее она похожа на распределение синусоподобной волны. Поскольку большинство индикаторов базируются на предположении о нормальном распределении цен, их нужно "скорректировать". Решением является использование преобразования Фишера, которое преобразует данные таким образом, чтобы они имели распределение, близкое к нормальному. В статье рассмотрена теория прямого и обратного преобразования Фишера и ее применение в трейдинге, разработан модуль торговых сигналов.
 
Konstantin83 :
거래 신호 모듈 을 마법사가 만든 Expert Advisor와 별도로 사용할 수 있습니까? 테스트를 위해 내가 쓴


#include <Expert\Signal\SignalMA.mqh>


CSignalMA  SignalMA;
int        TickCount;
string     Str;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TickCount=0;
 
   SignalMA.Symbol(Symbol());
   SignalMA.Period(PERIOD_H1);
   SignalMA.Weight(0.5);
 
   SignalMA.PeriodMA(20);
   SignalMA.Shift(0);
   SignalMA.Method(MODE_SMA);
   SignalMA.Applied(PRICE_CLOSE);

 
   return(0);
 
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   TickCount++;
   Str = "LongCondition  = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
   Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
   Comment(Str);
 
  }
//+------------------------------------------------------------------+

그러나 굵게 강조 표시된 것은 CSignalMA 클래스에 없지만 컴파일되어 기호에 던지려고하면 다음을 제공합니다.


2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::기간: 기간 변경 금지
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: 기호 변경 금지

표준 거래 신호의 기호 및 기간을 변경하는 방법은 무엇입니까?
기본적으로 할 수 있습니다. 그러나 거래 신호 모듈의 초기화는 전체 "의식"입니다. "손가락으로" 초기화의 전체 순서를 설명할 수 없을 것 같습니다.
 

다음 코드:

RectLabel* GetLabel()
{
   static bool initialized = false ;
   static RectLabel label( "rectlabel sample" , 0 , 0 );
   
   if (!initialized)
   {
      Pos leftTop = { 100 , 100 };
      Rect rect(leftTop, 100 , 50 );
      
      label.Move(rect);
      label.SetBGColor( clrYellowGreen );
      label.SetTooltip( " -- Yuuuu! -- " );
      
      initialized = true ;
   }

   return GetPointer (label);
}

함수가 호출될 때 마다 레이블에 대한 생성자를 호출합니다.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 

다음 코드에 따르면: 첫 번째 경우에는 표시기가 설정되지만 두 번째 경우에는 설정되지 않습니다(슬래시로 전환) 오류가 발생하지 않습니다.

 #include <Charts\Chart.mqh>
CChart cc;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   int f_h= iFractals ( _Symbol , _Period );
   
   if (f_h== INVALID_HANDLE ) { Print ( "Ошибка создания индикатора." ); return (- 1 );}
   
   ChartIndicatorAdd ( 0 , 0 ,f_h);   // устанавливает индикатор
   
   //cc.IndicatorAdd(0,f_h);     // НЕ устанавливает индикатор
   
   if ( GetLastError ()> 0 ) { Print ( "Ошибка  (" , GetLastError (), ") " );} ResetLastError ();
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
 { }
 

이 라이브러리에 따르면 두 번째 옵션에 따르면 0을 표시합니다. 다른 모든 기능은 작동하는 것 같습니다.

 #include <Trade\SymbolInfo.mqh>
CSymbolInfo si;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   Print ( SymbolInfoDouble ( "EURUSD" , SYMBOL_BID )); // все правильно
   
   si.Name( "EURUSD" );
   Print (si.Bid());             // выводит 0
   
   if ( GetLastError ()> 0 ) { Print ( "Ошибка  (" , GetLastError (), ") " );} ResetLastError ();
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
 { 
 }
 
Karlson :

다음 코드에 따르면: 첫 번째 경우에는 표시기가 설정되지만 두 번째 경우에는 설정되지 않습니다(슬래시로 전환) 오류가 발생하지 않습니다.

내가 이해하는 한, 현재 세 가지 매개변수는 모두 필수입니다.

따라서 표시기가 표시될 창의 번호를 지정해야 합니다(옵션: 0 - 기본 창, ChartIndicatorsTotal() - 새 창, 0에서 ChartIndicatorsTotal() -1 - 특정 기존 창).

오류가 발생하지 않는 것은 좋지 않습니다.

칼슨 :

이 라이브러리에 따르면 두 번째 옵션에 따르면 0을 표시합니다. 다른 모든 기능은 작동하는 것 같습니다.

대부분의 경우 가격을 받기 전에 새로 고침(최소한 RefreshRates )을 사용해야 합니다.

올바른 것은 다음과 같아야합니다.

  si.Name( "EURUSD" );
  si.Refresh();
  si.RefreshRates();
  Print (si.Bid());
 

감사합니다. 새로 고침을 지정한 후 Bid와 함께 정말 잘 작동했습니다.

그러나 인디케이터의 출력으로 라이브러리를 사용하면 서브 윈도우 와 핸들의 2개의 매개변수가 필요합니다.그렇지 않으면 잘못된 매개변수 수로 맹세합니다.

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 
Karlson :

감사합니다. 새로 고침을 지정한 후 Bid와 함께 정말 잘 작동했습니다.

그러나 인디케이터의 출력으로 라이브러리를 사용하면 서브 윈도우 와 핸들의 2개의 매개변수가 필요합니다.그렇지 않으면 잘못된 매개변수 수로 맹세합니다.

라이브러리를 사용하려면 2개의 매개변수가 필요합니다. 차트 및 하위 창 .
 
uncleVic :
라이브러리를 사용하려면 2개의 매개변수가 필요합니다. 차트 및 하위 창 .

손잡이가 없다면? 그리고 시스템은 어떤 칠면조를 넣을지 어떻게 압니까? ..지금까지 나는 쓰여진 것을 믿었다 :) 서브윈도우와 핸들.

 
Karlson :

손잡이 없이? 그리고 시스템은 어떤 칠면조를 넣을지 어떻게 압니까? ..지금까지 나는 쓰여진 것을 믿었다 :) Subwindow와 핸들.

라이브러리 정보(수업 도움말에서)

표시기추가

지정된 차트 창에 지정된 핸들이 있는 표시기를 추가합니다.

 bool   IndicatorAdd(
   int    sub_win         // номер подокна
   int    handle           // хэндл индикатора
   );

ChartIndicatorAdd 의 직접적인 작업에 관하여.

차트 표시기 추가

지정된 차트 창에 지정된 핸들이 있는 표시기를 추가합니다.

 bool    ChartIndicatorAdd (
   long   chart_id,                 // идентификатор графика
   int    sub_window                 // номер подокна
   int    indicator_handle           // хэндл индикатора
   );

CChart 클래스의 경우.

불필요한 질문을 피하기 위해 다음 세 가지 기본 규칙을 준수하려고 합니다.

1. 우리는 소스 코드를 보고, 명확하지 않은 것이 있으면 문서를 봅니다(소스 코드는 항상 진실을 말하고 문서는 거짓일 수 있음을 기억하십시오).

2. OOP의 구현이 우리에게 중요하다면 특정 클래스에 대한 설명으로 시작하여 "직접 실행기"로 이동합니다. "실제 작업"이 중요하다면 OOP를 마지막에 학습해야 합니다(하향식/하향식 코드 학습).

3. 문서 및 출처를 읽은 후에도 명확하지 않은 것이 있으면 포럼으로 이동하십시오.

클래스의 IndicatorAdd 메서드 구현에서 직접

소스를 보면 하위 창과 핸들이 메서드에 전달되고(도움말에 표시된 대로) 세 번째 매개 변수는 클래스 자체에 저장된 데이터에서 가져오는 것이 분명해집니다(차트에 대해 말하는 것입니다). ID).

 class CChart : public CObject
  {
protected :
   long    m_chart_id ; // chart identifier
public :
   //methods for working with indicators
   bool   IndicatorAdd( int subwin, int handle);
  }

bool CChart::IndicatorAdd( int subwin , int handle )
  {
//checking (проверка корректности идентификатора графика)
   if ( m_chart_id <= 0 ) return ( false );
//Непосредственно в обработку выдаются три параметра
   return ( ChartIndicatorAdd ( m_chart_id ,subwin,handle));
  }