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

 
C-4 :
"정렬"이라는 단어로 무엇을 이해합니까? 가수 를 소수점 이하 자릿수 로 정규화합니까? - 이를 위해 NormalizeDouble 기능이 있습니다. 다른 것이 있다면 더 자세히 기술해 주십시오.

입구에서 양의 두 배, 출구에서 이 상품에 있을 수 있는 실제 가격으로 반올림합니다.

가격 단계가 0.25이면 0.25로 반올림합니다. 글쎄, 다음과 같이 :

 double RoundPrice( const double price)
{
   if (price<= 0 ) return (- 1 );
   double tick_size= SymbolInfoDouble ( Symbol (), SYMBOL_TRADE_TICK_SIZE );
   double p= round (price/tick_size);
   return ( NormalizeDouble (p*tick_size, _Digits ));
}

그러나 동시에 오프셋(예: 0.13, 0.38, 0.63, 0.88)이 있으면 고려됩니다. 그 다음에:

입구 1.0에서 출구 1.13;

입구 1.25에서 출구 1.38에서;

1.5 ---> 1.63...

API 수준에서 이것은 몇 가지 어셈블러 명령으로 코딩될 수 있으며 이것은 확실히 기본 기능입니다. 나는 그녀라고 생각했다

 
라이브 업데이트를 통해 새 빌드로 업데이트하는 방법. 이 라이브 업데이트는 어디에 있습니까
 
Newalligator :
라이브 업데이트를 통해 새 빌드로 업데이트하는 방법. 이 라이브 업데이트는 어디에 있습니까
MetaQuotes-Demo 서버에서 데모 계정을 열고 주기적으로 연결하여 이 계정에 대한 업데이트를 확인해야 합니다. MetaQuotes-Demo 서버에서 데모 계정을 여는 방법
 
실생활에서의 거래에 대한 답변에 감사드리며 항상 MT5를 활성화했습니다. 프로그램 자체에 업데이트가 필요하다고 표시되면 좋은 것이지만 그렇지 않은 경우 이 라이브 업데이트는 어디에 있습니까?
 
Newalligator :
실생활에서의 거래와 항상 MT5 활성화에 대한 답변에 감사드립니다. 프로그램 자체에 업데이트가 필요하다고 표시되면 좋은 것이지만 그렇지 않은 경우 이 라이브 업데이트는 어디에 있습니까?
MetaQuotes-Demo 데모 서버에서 거래 계정에 연결할 때 MetaTrader 터미널 자체가 업데이트를 확인합니다. 업데이트가 있는 경우 새 버전의 자동 다운로드가 시작됩니다.
 

모두에게 좋은 하루! 그런 문제가 있었습니다. 사용자 지정 지표에서 다른 사용자 지정 지표 판독값을 사용할 수 없습니다. 내가 잘못하고 있다고 거의 확신하지만 어쨌든 코드를 게시 할 것입니다.

 int OnCalculate ( const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
   
   if (rates_total < iPeriod ) {
       return ( 0 );
   }
   
   int first;
   
   if ( prev_calculated == 0 ) {
      first = iPeriod + begin;
   } else {
      first = prev_calculated - 1 ;
   }
      
   // Пользовательский индикатор ROC для EURUSD   
   double aRocRatesEURUSD[];
   int iRocHandleEURUSD = iCustom ( "EURUSD" , 0 , "Examples\\ROC" );   
   CopyBuffer (iRocHandleEURUSD, 0 , 0 , rates_total, aRocRatesEURUSD);

   for ( int bar = first; bar < rates_total; bar++) {

여기에서 이 코드에서는 변경률( aRocRatesEURUSD) 표시기 버퍼를 사용할 수 없습니다. 이유 - 이 표시기를 올바르게 연결하는 방법을 이해할 수 없습니다. 알아낼 수 있도록 도와주세요.

 
jommerbot :

모두에게 좋은 하루! 그런 문제가 있었습니다. 사용자 지정 지표에서 다른 사용자 지정 지표 판독값을 사용할 수 없습니다. 내가 잘못하고 있다고 거의 확신하지만 어쨌든 코드를 게시 할 것입니다.

여기에서 이 코드에서는 변경률( aRocRatesEURUSD) 표시기 버퍼를 사용할 수 없습니다. 이유 - 이 표시기를 올바르게 연결하는 방법을 이해할 수 없습니다. 알아낼 수 있도록 도와주세요.

표시기 핸들은 OnInit()에서 선언되어야 합니다.

 //+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
// Пользовательский индикатор ROC для EURUSD   
   double aRocRatesEURUSD[];
   int iRocHandleEURUSD = iCustom ( "EURUSD" , 0 , "Examples\\ROC" );   
  }
그렇지 않으면 OnCalculate()를 호출할 때마다 새 사용자 지정 표시기를 만드는 것으로 나타났습니다.
 
barabashkakvn :

표시기 핸들은 OnInit()에서 선언되어야 합니다.

그것도 작동하지 않습니다. 버퍼가 있는 배열이 비어 있거나 왼쪽 값으로 가득 차 있습니다.
 
jommerbot :
그것도 작동하지 않습니다. 버퍼가 있는 배열이 비어 있거나 왼쪽 값으로 가득 차 있습니다.
그럼에도 불구하고 OnInit()에서 표시기 핸들을 선언하는 것은 정확합니다. 또 다른 것 - 새 틱이 도착할 때마다 기록해야 하는 이유(함수 OnCalculate())
rates_total,       // размер входных таймсерий

버퍼링

aRocRatesEURUSD

? 이것은 터미널을 정말로 느리게 할 수 있습니다. 게다가 굉장히 깊은 이야기다.

지표의 경제적 재계산 원칙 기사를 읽는 것이 흥미로울 것이라고 생각합니다.

또한 OnCalculate() 함수에 대한 도움말을 읽으십시오.

 

좋아, 가장 간단한 경우에도 작동하지 않습니다.

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red

double ExtLineBuffer[];   
int iRocHandleEURUSD;  
int iPlotShift = 0 ;
int iPeriod = 6 ;
 
void OnInit () {
   SetIndexBuffer ( 0 , ExtLineBuffer, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_SHIFT , iPlotShift);
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN , iPeriod - 1 );
   
   int iRocHandleEURUSD = iCustom ( "EURUSD" , 0 , "Examples\\ROC" );    
   if ( iRocHandleEURUSD == INVALID_HANDLE )
   {
       Print ( "Не удалось получить хендл индикатора ROC EURUSD" );  
   }
}

int OnCalculate ( const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
   
   if (rates_total < iPeriod ) {
       return ( 0 );
   }
   
   int first;
   double aRocRatesEURUSD[]; 
   
   if ( prev_calculated == 0 ) {
      first = iPeriod + begin;
   } else {
      first = prev_calculated - 1 ;
   }
   
   for ( int bar = first; bar < rates_total; bar++) {
       CopyBuffer (iRocHandleEURUSD, 0 , bar, 1 , aRocRatesEURUSD);
       Print (aRocRatesEURUSD[ 0 ]);   
      ExtLineBuffer[ bar ] = NormalizeDouble (aRocRatesEURUSD[ 0 ], SYMBOL_DIGITS );
   }
     
   return (rates_total);
}

나는 내 실수가 어디에 있는지 이해하지 못합니다. EA와 스크립트에서 동일한 표시기 의 버퍼를 복사하면 작동하지만 표시기에서는 작동하지 않습니다. 표시기 핸들은 오류 없이 초기화됩니다.

사유: