MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 664

 
Roman Sharanov :

나는 지표를 작성하는 방법을 이해하지 못합니다, 문제가 무엇인지 설명?

active_1active_2 자산 간의 가격 차이를 보여주는 라인을 작성해야 합니다.

효과가있다

또한 기간의 평균 ma_period 가 이 선을 따라 표시되어야 합니다. 이것은 이미 문제이며 표시되지 않습니다.

복사 결과를 확인하지 마십시오.

모든 틱에서 전체 기록을 복사합니다.

네이티브가 아닌 기호( 현재 차트 의 기호가 아님)의 경우 Rates_total이 아닌 Bars()의 수를 복사해야 합니다.

예를 들어 2분마다 한 번씩 과거 데이터를 최신 상태로 유지하기 위해 기본이 아닌 기호에 대한 현재 막대의 시간을 요청해야 합니다.

SimpleMAOnBuffer()를 사용하여 dataBuffer의 데이터를 평면화합니다.

 
Artyom Trishkin :

복사 결과를 확인하지 마십시오.

모든 틱에서 전체 기록을 복사합니다.

네이티브가 아닌 기호( 현재 차트 의 기호가 아님)의 경우 Rates_total이 아닌 Bars()의 수를 복사해야 합니다.

예를 들어 2분마다 한 번씩 과거 데이터를 최신 상태로 유지하기 위해 기본이 아닌 기호의 현재 막대 시간을 요청해야 합니다.

SimpleMAOnBuffer()를 사용하여 dataBuffer의 데이터를 평면화합니다.

이 같은? 아예 작동을 멈췄다

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
//---
   int bars1 = Bars (active_1, timeframe), bars2 = Bars (active_2, timeframe);
   
   if ( CopyClose (active_1,timeframe, 0 ,bars1,firstBuffer) < 0 ) return 0 ;
   if ( CopyClose (active_2,timeframe, 0 ,bars2,secondBuffer) < 0 ) return 0 ;
   if (bars1 != bars2) return 0 ;
   int first, bar;
   
   if (prev_calculated == 0 ) first = begin; else first = prev_calculated - 1 ;
   
   for (bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer (){
   iTime (active_1,timeframe, 1 );
   iTime (active_2,timeframe, 1 );
}
void OnDeinit ( const int reason){
   EventKillTimer ();
}
 

인사말.

조언자가 주문을 열 때 일부 값을 기록하는 방법을 알려주십시오. 예를 들어 티켓에 따라 해당 주문과 구체적으로 관련되도록 합니다.

 
Andrey Sokolov :

인사말.

조언자가 주문을 열 때 일부 값을 기록하는 방법을 알려주십시오. 예를 들어 티켓에 따라 해당 주문과 구체적으로 관련되도록 합니다.

댓글에서

 

변동성을 지켜보고 싶습니다. 이렇게 하려면 tmp1 어레이에서 닫힘 차이를 계산한 다음 관심 있는 기간 동안 SMA를 구축합니다.


 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 i;
double tmp1[];

       Print ( "rates_total = " ,rates_total);
       for (i= 1 ; i<rates_total; i++)
      {
      tmp1[i]= MathMax (open[i],close[i])- MathMin (open[i],close[i]);      
      ip1Buf[i]= iMA ( NULL , 0 , 1 , 0 , 0 ,tmp1[i], 0 );
      }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }


컴파일하는 동안 오류가 발생하지 않고 표시기가 터미널에 그려지지 않고 로그 항목이 CADJPY,H1: 배열이 '_t1.mq4'(65,11)의 범위를 벗어났습니다.

이것은 MathMax - MathMin 의 차이가 계산되는 라인입니다. 그 이유는 무엇입니까?


 
psyman :

변동성을 지켜보고 싶습니다. 이렇게 하려면 tmp1 어레이에서 닫힘 차이를 계산한 다음 관심 있는 기간 동안 SMA를 구축합니다.



컴파일하는 동안 오류가 발생하지 않고 표시기가 터미널에 그려지지 않고 로그 항목이 CADJPY,H1: 배열이 '_t1.mq4'(65,11)의 범위를 벗어났습니다.

이것은 MathMax - MathMin의 차이가 계산되는 라인입니다. 그 이유는 무엇입니까?


나는 코드를 많이 이해하지 못했지만 그렇다면:

 for (i= 1 ; i<rates_total - 1 ; i++)
 

작동하지 않습니다.


UPD

문자열을 최소한으로 단순화했습니다. tmp1[i]=close[i]; 오류는 동일하게 유지됩니다.

 
psyman :

변동성을 지켜보고 싶습니다. 이렇게 하려면 tmp1 어레이에서 닫힘 차이를 계산한 다음 관심 있는 기간 동안 SMA를 구축합니다.



컴파일하는 동안 오류가 발생하지 않고 표시기가 터미널에 그려지지 않고 로그 항목이 CADJPY,H1: 배열이 '_t1.mq4'(65,11)의 범위를 벗어났습니다.

이것은 MathMax - MathMin의 차이가 계산되는 라인입니다. 그 이유는 무엇입니까?


tmp[] 배열은 동적으로 선언되며 처음에는 길이가 0입니다. 따라서 오류.

이 배열은 계산을 위한 표시기 버퍼 로 선언되어야 합니다.

 
 

위한 표시기 버퍼 로 선언되어야 합니다.


동적 배열을 사용할 수 없는 이유는 무엇입니까?

이 경우에는 계산 없이 종가를 다시 작성했습니다.

표시기 버퍼 사용 방법은 어디에서 읽을 수 있습니까?