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

 
STARIJ :

나를 위해 작동합니다 - 마우스 움직임을 모니터링합니다


나는 surrolling에 대해 이야기하고 있습니다.)
 

모두에게 좋은 하루. 더 높은 기간의 정보를 분석할 필요가 있었습니다.

시스템에는 채널을 구축할 수 있는 조건이 있습니다. 이것은 특정 수의 바에 대한 최대 및 최소 가격을 찾는 것입니다. 다음과 같은 방식으로 구현됩니다.

 extern ENUM_TIMEFRAMES TimeFrameRZ = PERIOD_M15 ; //Период разворотной зоны
extern ENUM_TIMEFRAMES TimeFrameIn = PERIOD_M5 ; //Период точки входа
extern int ATR_period = 14 ;
extern int UpLineSell = 7 ;
extern int DownLineSell = 7 ;
extern int UpLineBuy = 7 ;
extern int DownLineBuy = 7 ;

//      Параметры разворотных свечей
extern string Comment2 = "---------------------------------Параметры разворотных свечей------------------------------------------" ;
extern int Volotilnost = 20 ; // Диапазон цен для трех разворотных свечей (в пунктах)
extern int MaxLineSell = 3 ;
extern int MaxLineBuy = 3 ;

bool SellPattern = false ;
bool BuyPattern = false ;
bool New_Bar = false ;

double UpLine_Sell = 0 ;
double DownLine_Sell = 0 ;
double UpLine_Buy = 0 ;
double DownLine_Buy = 0 ;

int i = 0 , j = 0 ;
int ULs = 0 ;
int DLs = 0 ;
int ULb = 0 ;
int DLb = 0 ;

double MassZone[ 2 ][ 10 ];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
if ( Digits == 3 || Digits == 5 )
  {
  Volotilnost *= 10 ;
  UpLineSell *= 10 ;
  DownLineSell *= 10 ;
  UpLineBuy*= 10 ;
  DownLineBuy*= 10 ;
  }

   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
 
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
RazvorotZona();
 
 if (SellPattern == true )
   {

   
     if ( ObjectCreate ( ChartID (), "UpLine_Sell" + IntegerToString (ULs), OBJ_HLINE , 0 , TimeCurrent (),UpLine_Sell))
        {
         ObjectSetInteger ( ChartID (), "UpLine_Sell" + IntegerToString (ULs), OBJPROP_COLOR , clrOrange ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_Sell" + IntegerToString (ULs), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_Sell" + IntegerToString (ULs), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_Sell" + IntegerToString (ULs), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане
        }
                  
       if ( ObjectCreate ( ChartID (), "DownLine_Sell" + IntegerToString (DLs), OBJ_HLINE , 0 , TimeCurrent (),DownLine_Sell))
        {
         ObjectSetInteger ( ChartID (), "DownLine_Sell" + IntegerToString (DLs), OBJPROP_COLOR , clrMagenta ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_Sell" + IntegerToString (DLs), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_Sell" + IntegerToString (DLs), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_Sell" + IntegerToString (DLs), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане
        }
        ULs++;
        DLs++;
         if (DLs >= MaxLineSell && ULs >= MaxLineSell)
          {
           ObjectDelete ( ChartID (), "UpLine_Sell" + IntegerToString (ULs - MaxLineSell));
           ObjectDelete ( ChartID (), "DownLine_Sell" + IntegerToString (DLs - MaxLineSell));
          }
   }
   
 if (BuyPattern == true )
   {
   if ( ObjectCreate ( ChartID (), "UpLine_Buy" + IntegerToString (ULb), OBJ_HLINE , 0 , TimeCurrent (),UpLine_Buy))
        {
         ObjectSetInteger ( ChartID (), "UpLine_Buy" + IntegerToString (ULb), OBJPROP_COLOR , clrDeepSkyBlue ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_Buy" + IntegerToString (ULb), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_Buy" + IntegerToString (ULb), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_Buy" + IntegerToString (ULb), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане
        }
                   
       if ( ObjectCreate ( ChartID (), "DownLine_Buy" + IntegerToString (DLb), OBJ_HLINE , 0 , TimeCurrent (),DownLine_Buy))
        {
         ObjectSetInteger ( ChartID (), "DownLine_Buy" + IntegerToString (DLb), OBJPROP_COLOR , clrBrown ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_Buy" + IntegerToString (DLb), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_Buy" + IntegerToString (DLb), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_Buy" + IntegerToString (DLb), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане
        }
        ULb++;
        DLb++;
         if (ULb >= MaxLineBuy && DLb >= MaxLineBuy)
          {
           ObjectDelete ( ChartID (), "UpLine_Buy" + IntegerToString (ULb - MaxLineBuy));
           ObjectDelete ( ChartID (), "DownLine_Buy" + IntegerToString (DLb - MaxLineBuy));
          }
   }
}
//+------------------------------------------------------------------+
//    Функция определения нового бара                                |
//+------------------------------------------------------------------+
void Find_New_Bar()
{ 
   datetime TimeBar0 = iTime ( Symbol (),TimeFrameRZ, 0 );
   static datetime New_Time= 0 ;                     // Время текущего бара
   New_Bar= false ;                                 // Нового бара нет 
   if (New_Time != TimeBar0)                       // Сравниваем время 
   { 
      New_Time = TimeBar0;                         // Теперь время такое 
      New_Bar = true ;                             // Поймался новый бар 
   } 
}
//+------------------------------------------------------------------+
//    Функция определения разворотной зоны                           |
//+------------------------------------------------------------------+
void RazvorotZona()
{
Find_New_Bar();

   double Open3= NormalizeDouble ( iOpen ( Symbol (), TimeFrameRZ, 4 ), Digits );
   double Close3 = NormalizeDouble ( iClose ( Symbol (), TimeFrameRZ, 4 ), Digits );
   double High3 = NormalizeDouble ( iHigh ( Symbol (), TimeFrameRZ, 4 ), Digits );
   double Low3 = NormalizeDouble ( iLow ( Symbol (), TimeFrameRZ, 4 ), Digits );
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед перевернутым Молотом
   double ATR = iATR ( Symbol (),TimeFrameRZ,ATR_period, 1 );
   
   SellPattern = false ;
   BuyPattern = false ;
   
   int bar1 = 1 ;
   int bar2 = 3 ;
   double Max, Min;
   

   Max = High [ iHighest ( NULL , TimeFrameRZ, MODE_HIGH , bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
   Min = Low [ iLowest ( NULL , TimeFrameRZ, MODE_LOW , bar2, bar1)];

   if ( NormalizeDouble ((Max - Min) / Point , Digits ) < Volotilnost && 
       MathAbs (Close3-Open3) > 1.5 *ATR)
      {
       if ((Close3 > Open3) && New_Bar == true )
        {
        UpLine_Sell = Max;
        DownLine_Sell = Min;
        SellPattern = true ;
         Print ( "Идентифицирован паттерн" );
         Print ( "Максимальная цена " + DoubleToStr (Max));
         Print ( "Минимальная цена " + DoubleToStr (Min));
        }
         else {SellPattern = false ;}
        
       if ((Close3 < Open3) && New_Bar == true )
        {
        UpLine_Buy = Max;
        DownLine_Buy = Min;
        BuyPattern = true ;
         Print ( "Идентифицирован паттерн" );
        }
         else {BuyPattern = false ;}
      }
}

그러나 이 접근 방식을 사용하면 현재 작동 중인 M5 기간의 막대 분석이 있습니다. 매개변수 bar1 및 bar2는 M15에서 가져와야 합니다.

그것을 구현하는 방법?

 

문제가 여기 어딘가에 있다는 느낌이 듭니다

Max = High [ iHighest ( NULL , TimeFrameRZ, MODE_HIGH , bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
   Min = Low [ iLowest ( NULL , TimeFrameRZ, MODE_LOW , bar2, bar1)];

누가 뭐라고 할까요?

 
voron_026 :

문제가 여기 어딘가에 있다는 느낌이 듭니다

누가 뭐라고 할까요?

예, 원하는 기간을 지정하십시오.

 
STARIJ :

예, 원하는 기간을 지정하십시오.

그가 지적한 바로는...

TimeFrameRZ = PERIOD_M15
이것은 외부 변수입니다.
 
double array[ 10 ];
array[ 0 ]= 0.1 ;

배열을 선언 하고 요소를 채웁니다.

두 번째 줄에 유형 오류가 없는 선언이 나타나는 이유는 무엇입니까?

 
Juer :

배열을 선언 하고 요소를 채웁니다.

두 번째 줄에 유형 오류가 없는 선언이 나타나는 이유는 무엇입니까?

void OnTick() 함수에 코드를 작성하면 모든 것이 작동합니다.

또는 배열[ 0 ]= 0.1 ; void OnTick()에 쓰기

 
Juer :

배열을 선언 하고 요소를 채웁니다.

두 번째 줄에 유형 오류가 없는 선언이 나타나는 이유는 무엇입니까?

전역 변수 범위에서 배열을 선언하고 있습니까?

그런 다음 값을 사용하여 즉시 선언합니다(코드를 직접 채우므로 미리 정의되어 있음을 의미합니다).

 double array[ 10 ]={ 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 };

... OnInit() 또는 채워질 함수의 값으로 배열을 채웁니다.

 
Expert Advisor에서 ZigZag 표시기의 값을 표시하는 방법을 알려주십시오. 다른 것들은 iMA, iStochastic, iWPR ... 을 작성하여 표시하고 수동으로 지그재그로 계산합니다. 어떻게?
 
ZZuretc :
Expert Advisor에서 ZigZag 표시기의 값을 표시하는 방법을 알려주십시오. 다른 것들은 iMA, iStochastic, iWPR ... 을 작성하여 표시하고 수동으로 지그재그로 계산합니다. 어떻게?

사용하기로 결정하셨나요? ZigZag 표시기의 값은 모든 곳에서 0과 같습니다. 지그재그의 가치는 상단에서만 상단의 가격과 동일합니다.

주기에서 막대를 볼 필요가 있습니다. 예 보기

파일:
Zig2fl.mq4  4 kb