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

 
Michail_David :

고마워요, 비탈리. 그러나 테스트할 때 ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); 요소 [i}에서.

1. 인덱스 확인

   SetIndexBuffer( 2 ,ExtTempBuffer);
   SetIndexBuffer( 2 ,ExtPriceBuffer);

2. 이 2개의 버퍼가 필요한 이유

      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);

만약

 ExtPriceBuffer[i] = ExtTempBuffer[i+1]
 
Michail_David :

ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); 요소 [i}에.

잡다

 //+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1    clrGreen
#property indicator_color2    clrRed
#property   indicator_width1    1
input int             InpMSBBPeriod= 3 ;         // Period
input ENUM_MA_METHOD InpMSBBMethod= MODE_SMA ;   // Method
//--- indicator buffers
double          ExtMSBBBuffer[];
double          ExtTempBuffer[];
double          ExtPriceBuffer[];
double          ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
//--- indicator buffers mapping
   IndicatorDigits( Digits );
//--- drawing settings
   IndicatorBuffers( 4 );
   SetIndexStyle( 0 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 0 ,ExtMSBBBuffer);
   SetIndexBuffer ( 1 ,ExtSignalBuffer);
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexBuffer ( 2 ,ExtTempBuffer);
   SetIndexBuffer ( 3 ,ExtPriceBuffer);
   SetIndexDrawBegin( 1 ,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName( "MSBB(" + IntegerToString (InpMSBBPeriod)+ ")" );
   SetIndexLabel( 0 , "MSBB" );
   SetIndexLabel( 1 , "Signal" );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//------
   if ((rates_total-prev_calculated-InpMSBBPeriod)<= 0 ) return ( 0 );
   
   for ( int i=rates_total-prev_calculated-InpMSBBPeriod- 1 ;i>= 0 ;i--)
     {
      ExtTempBuffer[i] = NormalizeDouble ((close[i]-open[i])/ Point (), 2 );
      ExtPriceBuffer[i] = NormalizeDouble ((close[i+ 1 ]-open[i+ 1 ])/ Point (), 2 );
       //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
       //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
       if (ExtTempBuffer[i]== 0 )
         ExtMSBBBuffer[i]= 0.0 ;
       if (ExtPriceBuffer[i]> 0 && ExtTempBuffer[i]> 0 )
        {
         double price_open = NormalizeDouble ((open[i]-open[i+ 1 ])/ Point (), 2 );
         double price_close = NormalizeDouble ((close[i]-close[i+ 1 ])/ Point (), 2 );
         if ((price_open< 0 && price_close> 0 )||(price_open> 0 && price_close< 0 ))
            ExtMSBBBuffer[i] = 0.0 ;
         if ((price_open< 0 && price_close< 0 )||(price_open> 0 && price_close> 0 ))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
       if (ExtPriceBuffer[i]> 0 && ExtTempBuffer[i]< 0 )
        {
         double price_open = NormalizeDouble ((open[i]-close[i+ 1 ])/ Point (), 2 );
         double price_close = NormalizeDouble ((close[i]-open[i+ 1 ])/ Point (), 2 );
         if ((price_open< 0 && price_close> 0 )||(price_open> 0 && price_close< 0 ))
            ExtMSBBBuffer[i] = 0.0 ;
         if ((price_open> 0 && price_close> 0 )||(price_open< 0 && price_close< 0 ))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
       if (ExtPriceBuffer[i]< 0 && ExtTempBuffer[i]< 0 )
        {
         double price_open = NormalizeDouble ((open[i]-open[i+ 1 ])/ Point (), 2 );
         double price_close = NormalizeDouble ((close[i]-close[i+ 1 ])/ Point (), 2 );
         if ((price_open< 0 && price_close> 0 )||(price_open> 0 && price_close< 0 ))
            ExtMSBBBuffer[i]= 0.0 ;
         if ((price_open< 0 && price_close< 0 )||(price_open> 0 && price_close> 0 ))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
       if (ExtPriceBuffer[i]< 0 && ExtTempBuffer[i]> 0 )
        {
         double price_open = NormalizeDouble ((open[i]-close[i+ 1 ])/ Point (), 2 );
         double price_close = NormalizeDouble ((close[i]-open[i+ 1 ])/ Point (), 2 );
         if ((price_open> 0 && price_close< 0 )||(price_open< 0 && price_close> 0 ))
            ExtMSBBBuffer[i]= 0.0 ;
         if ((price_open> 0 && price_close> 0 )||(price_open< 0 && price_close< 0 ))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
       //--- signal line counted in the 2-nd buffer
       //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated, 1 ,InpMSBBPeriod+ 2 ,ExtMSBBBuffer,ExtSignalBuffer);
       Print ( "ExtSignalBuffer = " , ExtSignalBuffer[i]);
       //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
안녕하세요! 있다   재설계된 지표   "ieexposuregmini.mq4"는 터미널에 내장된 iExposure.mq4 표시기를 기반으로 합니다. 제보자의 위치(창)를 차트 창의 왼쪽 하단으로 옮기는 방법을 알려주실 수 있나요? 그리고 차트에서 지표를 제거한 후에도 지표 패널이 남아 있습니다... 이 문제를 어떻게 고칠 수 있습니까? 미리 대단히 감사합니다!
Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
파일:
 
MakarFX :

1. 인덱스 확인

2. 이 2개의 버퍼가 필요한 이유

하나의 버퍼 ExtTempBuffer[i]=ExtTempBuffer[i+1]로 작동하지 않아 시도하기로 결정했지만 작동하지 않았습니다.

 
Michail_David :

하나의 버퍼 ExtTempBuffer[i]=ExtTempBuffer[i+1]로 작동하지 않아 시도하기로 결정했지만 작동하지 않았습니다.

작업 코드를 게시했습니다.

 
MakarFX :

잡다

마크 감사합니다. 테스트할 때 같은 줄에서 다시 같은 오류가 발생합니다. 전혀 작동하지 않습니다.

이것은 2020.11.03 23:38:19.815가 생성하는 것입니다 2020.07.10 16:10:00 MSBB EURUSD,M5: 'MSBB.mq4'의 범위를 벗어난 배열(78,20)


 
Michail_David :

마크 감사합니다. 테스트할 때 같은 줄에서 다시 같은 오류가 발생합니다. 전혀 작동하지 않습니다.

이것은 2020.11.03 23:38:19.815가 생성하는 것입니다 2020.07.10 16:10:00 MSBB EURUSD,M5: 'MSBB.mq4'의 범위를 벗어난 배열(78,20)


그것은 나에게 오류를 제공하지 않지만 로그로 인해 거대합니다.

 Print ( "ExtSignalBuffer = " , ExtSignalBuffer[i]);
 
MakarFX :

그것은 나에게 오류를 제공하지 않지만 로그로 인해 거대합니다.

네. 도. 모든 조건을 고려하지 않은 것 같습니다. 신호 값에 따르면 많은 것이 거대합니다. 도와 주셔서 감사합니다. 조건을 더 살펴보겠습니다.

 
Александр :

조건 중 하나가 충족되지 않아 열리지 않습니다.

이것은

또는

// 두 개의 플러시를 주석 처리하면 어느 것을 이해할 수 있을 것입니다. 그래야 오류를 찾을 수 있습니다.

고마워 알렉산더!

 
MakarFX :

잡다

문제 없이 컴파일

'MSBB.mq4' MSBB.mq4 1 1
'MovingAverages.mqh' MovingAverages.mqh 1 1
오류 0개, 경고 0개, 187밀리초 경과 1 1