MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 440

 
STARIJ :

benim için çalışıyor - fare hareketini izliyor


Sürmekten bahsediyorum.)
 

Hepinize iyi günler. Daha yüksek bir zaman diliminden gelen bilgileri analiz etme ihtiyacı vardı.

Sistemin kanal oluşturma şartı vardır. Bu, belirli sayıda çubuk için maksimum ve minimum fiyatları bulmaktır. Aşağıdaki şekilde uygulanır:

 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 ;}
      }
}

Ancak bu yaklaşımla, mevcut çalışan M5 zaman diliminden çubukların bir analizi vardır. bar1 ve bar2 parametrelerinin M15'ten alınması gerekir.

Nasıl uygulanır?

 

Sorunun burada bir yerde olduğunu hissediyorum

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

Kim ne diyecek?

 
voron_026 :

Sorunun burada bir yerde olduğunu hissediyorum

Kim ne diyecek?

Evet, istenen zaman dilimini belirtin

 
STARIJ :

Evet, istenen zaman dilimini belirtin

İşte bunu işaret etti...

TimeFrameRZ = PERIOD_M15
Bu harici bir değişkendir
 
double array[ 10 ];
array[ 0 ]= 0.1 ;

Bir dizi ilan ediyorum ve öğeleri dolduruyorum.

Neden ikinci satırda tür hatası olmayan bir bildirim alıyorum?

 
Juer :

Bir dizi ilan ediyorum ve öğeleri dolduruyorum.

Neden ikinci satırda tür hatası olmayan bir bildirim alıyorum?

Kodu void OnTick() işlevine yazın, her şey işe yarayacaktır.

Veya dizi[ 0 ]= 0.1 ; boşlukta yaz OnTick()

 
Juer :

Bir dizi ilan ediyorum ve öğeleri dolduruyorum.

Neden ikinci satırda tür hatası olmayan bir bildirim alıyorum?

Global değişkenler kapsamında bir dizi mi bildiriyorsunuz?

Ardından hemen değerlerle bildirin (kodu kendiniz doldurduğunuz için, sizin için önceden tanımlanmış oldukları anlamına gelir), örneğin:

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

... veya diziyi OnInit() içindeki veya doldurulacağı fonksiyondaki değerlerle doldurun.

 
Expert Advisor'da ZigZag göstergesinin değerlerini nasıl görüntüleyeceğimi söyle? Diğerleri iMA, iStochastic, iWPR ... yazılarak görüntülenir ve zikzak manuel olarak hesaplanır, nasıl?
 
ZZuretc :
Expert Advisor'da ZigZag göstergesinin değerlerini nasıl görüntüleyeceğimi söyle? Diğerleri iMA, iStochastic, iWPR ... yazılarak görüntülenir ve zikzak manuel olarak hesaplanır, nasıl?

Kullanmaya karar verdiniz mi? ZigZag göstergesinin değerleri her yerde sıfıra eşittir. Sadece üst kısımlarda ZigZag değeri üst kısımdaki fiyata eşittir.

Çubukları bir döngü içinde görmek gereklidir. Örneğe bakın

Dosyalar:
Zig2fl.mq4  4 kb