Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 727

 
AlexeyVik :

mql4 yeniliği, dizinin boyutunun belirtilmesi gerektiğidir.

Hangi korkudan?

 /*    Soft Fractals ZigZag Indicator - индикатор строит зигзаг по фракталам 
   с произвольными размерами правого и левого крыльев. */
#property copyright "Copyright 2012, Тарабанов А.В."
#property link        "alextar@bk.ru"
#property indicator_chart_window                    // Индикатор в главном окне
// Индикаторные буферы
#property indicator_buffers 4
#property indicator_width1 1                        // Толщина зигзага
#property indicator_color3 Green                   // Нижние вершины
#property indicator_width3 1
#property indicator_color4 Red                     // Верхние вершины
#property indicator_width4 1
double Min[]   , Max[],                             // Изломы зигзага
       Bottom[], Top[];                             // Вершины
// Константы
#define Version "iSFZZ"                              // Версия
#define Zero     0.00000001                          // Точность определения нуля
// Глобальные переменные
double       LastBottom , LastTop;                   // Предыдущие значения
int          iLastBottom, iLastTop;                 //    и их бары
datetime     tLastBottom, tLastTop;                 // Время предыдущих значений
bool         LastIsTop  , LastIsBottom;             // Предыдущий пик/впадина
extern bool ОтображатьВершины   = true ;             // Внешние переменные
extern int   БаровЛевееВершины   = 2 ,
            БаровПравееВершины  = 2 ,
            СимволНижнейВершины = 161 ,
            СимволВерхнейВершины= 161 ;
//+------------------------------------------------------------------+
int init(){
   int DrawFractals= DRAW_NONE ;
   if ( ОтображатьВершины ) DrawFractals= DRAW_ARROW ;
   // Атрибуты буферов
   SetIndexLabel( 0 , "Max" );
   SetIndexBuffer ( 0 ,Max);
   SetIndexStyle( 0 , DRAW_ZIGZAG );
   SetIndexEmptyValue( 0 , 0 );
   SetIndexLabel( 1 , "Min" );
   SetIndexBuffer ( 1 ,Min);
   SetIndexStyle( 1 , DRAW_ZIGZAG );
   SetIndexEmptyValue( 1 , 0 );
   SetIndexLabel( 2 , "Bottom" );
   SetIndexBuffer ( 2 ,Bottom);
   SetIndexStyle( 2 ,DrawFractals);
   SetIndexArrow( 2 ,СимволНижнейВершины);
   SetIndexEmptyValue( 2 , 0 );
   SetIndexLabel( 3 , "Top" );
   SetIndexBuffer ( 3 ,Top);
   SetIndexStyle( 3 ,DrawFractals);
   SetIndexArrow( 3 ,СимволВерхнейВершины);
   SetIndexEmptyValue( 3 , 0 );
   if ( БаровЛевееВершины < 1 ) БаровЛевееВершины= 1 ; // Контроль значений
   if ( БаровПравееВершины < 1 ) БаровПравееВершины= 1 ;
   LastBottom  = 0 ;                                 // Инициализация
   LastTop     = 0 ;
   iLastBottom = 0 ;
   iLastTop    = 0 ;
   tLastBottom = 0 ;
   tLastTop    = 0 ;
   LastIsTop   = false ;
   LastIsBottom= false ;
   return ( 0 );
}
//+------------------------------------------------------------------+
int start(){
   int i, History= Bars - 1 , BarsLost=History-IndicatorCounted();
   if ( BarsLost<History ){
       if ( BarsLost< 1 ) return ( 0 );                   // Не повторять на том-же баре
      i=BarsLost+БаровПравееВершины;               // Число баров пересчета
   }
   else i=History-БаровЛевееВершины;               // Просмотр на всей истории
   double C[];
   int dim= ArrayResize (C,БаровЛевееВершины+ 1 +БаровПравееВершины), j;
   if ( tLastTop> 0 ) iLastTop=iBarShift( NULL , 0 ,tLastTop);
   if ( tLastBottom> 0 ) iLastBottom=iBarShift( NULL , 0 ,tLastBottom);
   while ( i>БаровПравееВершины ){                   // Перебор слева направо
      j= 0 ;                                         // Поиск нижнего фрактала
      Bottom[i]= 0 ;
       while ( j < dim ){
         C[j]=Low[j+i-БаровПравееВершины];
         j++;
      }
       if ( C[БаровПравееВершины+ 1 ]-C[БаровПравееВершины]>-Zero
       && C[БаровПравееВершины- 1 ]-C[БаровПравееВершины]>-Zero ){
         Bottom[i]=C[БаровПравееВершины];           // Локальный минимум
         j= 1 ;
         while ( j < dim ){
             if ( ( j<БаровПравееВершины && Bottom[i]-C[j- 1 ]>Zero )
             || ( j>БаровПравееВершины && Bottom[i]-C[j]  >Zero ) ) {
               Bottom[i]= 0 ;                         // Нет фрактала
               break ;
            }
            j++;
      }  }
      j= 0 ;             // Поиск верхнего фрактала
      Top[i]= 0 ;
       while ( j<dim ){
         C[j]=High[j+i-БаровПравееВершины];
         j++;
      }
       if ( C[БаровПравееВершины]-C[БаровПравееВершины+ 1 ]>-Zero
       && C[БаровПравееВершины]-C[БаровПравееВершины- 1 ]>-Zero ){
         Top[i]=C[БаровПравееВершины];             // Локальный максимум
         j= 1 ;
         while ( j < dim ){
             if ( ( j<БаровПравееВершины && C[j- 1 ]-Top[i]>Zero )
             || ( j>БаровПравееВершины && C[j]  -Top[i]>Zero ) ) {
               Top[i]= 0 ;                           // Нет фрактала
               break ;
            }
            j++;
      }  }
       if ( Top[i]>Zero ){                           // Выбор вершины зигзага
         if ( Bottom[i]>Zero ){                     // Top и Bottom
             if ( LastIsTop || LastIsBottom ){       // Не начало зигзага
               Min[i]     =Bottom[i];               // Вертикальное колено
               Max[i]     =Top[i];
               LastBottom =Bottom[i];               // Запомнить Top и Bottom
               iLastBottom=i;
               LastTop    =Top[i];
               iLastTop   =i;
         }  }
         else {                                     // Top
             if ( !LastIsTop ){                       // LastIsBottom, или
               Max[i]      =Top[i];                 //    начало зигзага
               LastIsTop   = true ;
               LastIsBottom= false ; 
               LastTop     =Top[i];                 // Запомнить Top
               iLastTop    =i;
            }
             else {                                   // LastIsTop
               if ( Top[i]-LastTop>-Zero ){         // Перерисовка
                  Max[iLastTop]= 0 ;
                  Max[i]       =Top[i];
                  LastTop      =Top[i];             // Запомнить Top
                  iLastTop     =i;
      }  }  }  }
       else {
         if ( Bottom[i]>Zero ){                     // Bottom
             if ( !LastIsBottom ){                   // LastIsTop, или
               Min[i]      =Bottom[i];             //    начало зигзага
               LastIsTop   = false ;
               LastIsBottom= true ; 
               LastBottom  =Bottom[i];             // Запомнить Bottom
               iLastBottom =i;
            }
             else {                                   // LastIsBottom
               if ( LastBottom-Bottom[i]>-Zero ){   // Перерисовка
                  Min[iLastBottom]= 0 ;
                  Min[i]          =Bottom[i];
                  LastBottom      =Bottom[i];       // Запомнить Bottom
                  iLastBottom     =i;
      }   }  }  }
      i--;
   }
   if ( iLastTop> 0 ) tLastTop=Time[iLastTop];       // Время крайних изломов
   if ( iLastBottom> 0 ) tLastBottom=Time[iLastBottom];
   return ( 0 );
}
0 error(s), 0 warning(s)		1	1

 

Herkese teşekkürler!

 double arr[3];

arr[ 0 ] = 300.0 ;
arr[ 1 ] = 254.0 ;
arr[ 2 ] = Bid; 
Alert ( "В массиве arr под индексом 0 значение " , arr[ 0 ]); // 300
Alert ( "В массиве arr под индексом 1 значение " , arr[ 1 ]); // 254  
 Alert ( "В массиве arr под индексом 1 значение " , arr[ 2 ]); // Bid всё равно меняется на каждом тике, в чём же прикол этих массивов?, я с таким же успехом могу и так сделать
 Alert ( "В массиве arr под индексом 1 значение " , Bid); я думал что массив запоминает цену с первого тика и держит эту инфо на последующих тиках
 
tara :

Hangi korkudan?

Evet, dizimin üstüne yazarken bunu düşündüm. Ve onu betiğin OnStart () boşluğuna eklediğimde ve logda dizinin dışında bir çıktı aldığımda bu sonuca vardım. Ve örneğinizde, int start () ve bu, #property katı olmadan yazmanın eski sürümüdür.

Ve #özellik katı olmadan, verdiği şey budur.

 #property version    "1.00"
//#property strict

double arr[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   arr[ 0 ] = 300.0 ;
   arr[ 1 ] = 254.0 ;
   arr[ 2 ] = Bid;
   Alert ( "В массиве arr под индексом 0 значение " , arr[ 0 ]); // 300
   Alert ( "В массиве arr под индексом 1 значение " , arr[ 1 ]); // 254
   Alert ( "В массиве arr под индексом 2 значение " , arr[ 2 ]); // Bid
   
  }
//+------------------------------------------------------------------+


 

Ve dışarı çıkmamak en iyisi.

Burada:

 /*    Soft Fractals ZigZag Indicator - индикатор строит зигзаг по фракталам 
   с произвольными размерами правого и левого крыльев. */
#property strict
#property copyright "Copyright 2012, Тарабанов А.В."
#property link        "alextar@bk.ru"
#property indicator_chart_window                    // Индикатор в главном окне
// Индикаторные буферы
#property indicator_buffers 4
#property indicator_width1 1                        // Толщина зигзага
#property indicator_color3 Green                   // Нижние вершины
#property indicator_width3 1
#property indicator_color4 Red                     // Верхние вершины
#property indicator_width4 1
double Min[]   , Max[],                             // Изломы зигзага
       Bottom[], Top[];                             // Вершины
// Константы
#define Version "iSFZZ"                              // Версия
#define Zero     0.00000001                          // Точность определения нуля
// Глобальные переменные
double       LastBottom , LastTop;                   // Предыдущие значения
int          iLastBottom, iLastTop;                 //    и их бары
datetime     tLastBottom, tLastTop;                 // Время предыдущих значений
bool         LastIsTop  , LastIsBottom;             // Предыдущий пик/впадина
extern bool ОтображатьВершины   = true ;             // Внешние переменные
extern int   БаровЛевееВершины   = 2 ,
            БаровПравееВершины  = 2 ,
            СимволНижнейВершины = 161 ,
            СимволВерхнейВершины= 161 ;
//+------------------------------------------------------------------+
int init(){
   int DrawFractals= DRAW_NONE ;
   if ( ОтображатьВершины ) DrawFractals= DRAW_ARROW ;
   // Атрибуты буферов
   SetIndexLabel( 0 , "Max" );
   SetIndexBuffer ( 0 ,Max);
   SetIndexStyle( 0 , DRAW_ZIGZAG );
   SetIndexEmptyValue( 0 , 0 );
   SetIndexLabel( 1 , "Min" );
   SetIndexBuffer ( 1 ,Min);
   SetIndexStyle( 1 , DRAW_ZIGZAG );
   SetIndexEmptyValue( 1 , 0 );
   SetIndexLabel( 2 , "Bottom" );
   SetIndexBuffer ( 2 ,Bottom);
   SetIndexStyle( 2 ,DrawFractals);
   SetIndexArrow( 2 ,СимволНижнейВершины);
   SetIndexEmptyValue( 2 , 0 );
   SetIndexLabel( 3 , "Top" );
   SetIndexBuffer ( 3 ,Top);
   SetIndexStyle( 3 ,DrawFractals);
   SetIndexArrow( 3 ,СимволВерхнейВершины);
   SetIndexEmptyValue( 3 , 0 );
   if ( БаровЛевееВершины < 1 ) БаровЛевееВершины= 1 ; // Контроль значений
   if ( БаровПравееВершины < 1 ) БаровПравееВершины= 1 ;
   LastBottom  = 0 ;                                 // Инициализация
   LastTop     = 0 ;
   iLastBottom = 0 ;
   iLastTop    = 0 ;
   tLastBottom = 0 ;
   tLastTop    = 0 ;
   LastIsTop   = false ;
   LastIsBottom= false ;
   return ( 0 );
}
//+------------------------------------------------------------------+
int start(){
   int i, History= Bars - 1 , BarsLost=History-IndicatorCounted();
   if ( BarsLost<History ){
       if ( BarsLost< 1 ) return ( 0 );                   // Не повторять на том-же баре
      i=BarsLost+БаровПравееВершины;               // Число баров пересчета
   }
   else i=History-БаровЛевееВершины;               // Просмотр на всей истории
   double C[];
   int dim= ArrayResize (C,БаровЛевееВершины+ 1 +БаровПравееВершины), j;
   if ( tLastTop> 0 ) iLastTop=iBarShift( NULL , 0 ,tLastTop);
   if ( tLastBottom> 0 ) iLastBottom=iBarShift( NULL , 0 ,tLastBottom);
   while ( i>БаровПравееВершины ){                   // Перебор слева направо
      j= 0 ;                                         // Поиск нижнего фрактала
      Bottom[i]= 0 ;
       while ( j < dim ){
         C[j]=Low[j+i-БаровПравееВершины];
         j++;
      }
       if ( C[БаровПравееВершины+ 1 ]-C[БаровПравееВершины]>-Zero
       && C[БаровПравееВершины- 1 ]-C[БаровПравееВершины]>-Zero ){
         Bottom[i]=C[БаровПравееВершины];           // Локальный минимум
         j= 1 ;
         while ( j < dim ){
             if ( ( j<БаровПравееВершины && Bottom[i]-C[j- 1 ]>Zero )
             || ( j>БаровПравееВершины && Bottom[i]-C[j]  >Zero ) ) {
               Bottom[i]= 0 ;                         // Нет фрактала
               break ;
            }
            j++;
      }  }
      j= 0 ;             // Поиск верхнего фрактала
      Top[i]= 0 ;
       while ( j<dim ){
         C[j]=High[j+i-БаровПравееВершины];
         j++;
      }
       if ( C[БаровПравееВершины]-C[БаровПравееВершины+ 1 ]>-Zero
       && C[БаровПравееВершины]-C[БаровПравееВершины- 1 ]>-Zero ){
         Top[i]=C[БаровПравееВершины];             // Локальный максимум
         j= 1 ;
         while ( j < dim ){
             if ( ( j<БаровПравееВершины && C[j- 1 ]-Top[i]>Zero )
             || ( j>БаровПравееВершины && C[j]  -Top[i]>Zero ) ) {
               Top[i]= 0 ;                           // Нет фрактала
               break ;
            }
            j++;
      }  }
       if ( Top[i]>Zero ){                           // Выбор вершины зигзага
         if ( Bottom[i]>Zero ){                     // Top и Bottom
             if ( LastIsTop || LastIsBottom ){       // Не начало зигзага
               Min[i]     =Bottom[i];               // Вертикальное колено
               Max[i]     =Top[i];
               LastBottom =Bottom[i];               // Запомнить Top и Bottom
               iLastBottom=i;
               LastTop    =Top[i];
               iLastTop   =i;
         }  }
         else {                                     // Top
             if ( !LastIsTop ){                       // LastIsBottom, или
               Max[i]      =Top[i];                 //    начало зигзага
               LastIsTop   = true ;
               LastIsBottom= false ; 
               LastTop     =Top[i];                 // Запомнить Top
               iLastTop    =i;
            }
             else {                                   // LastIsTop
               if ( Top[i]-LastTop>-Zero ){         // Перерисовка
                  Max[iLastTop]= 0 ;
                  Max[i]       =Top[i];
                  LastTop      =Top[i];             // Запомнить Top
                  iLastTop     =i;
      }  }  }  }
       else {
         if ( Bottom[i]>Zero ){                     // Bottom
             if ( !LastIsBottom ){                   // LastIsTop, или
               Min[i]      =Bottom[i];             //    начало зигзага
               LastIsTop   = false ;
               LastIsBottom= true ; 
               LastBottom  =Bottom[i];             // Запомнить Bottom
               iLastBottom =i;
            }
             else {                                   // LastIsBottom
               if ( LastBottom-Bottom[i]>-Zero ){   // Перерисовка
                  Min[iLastBottom]= 0 ;
                  Min[i]          =Bottom[i];
                  LastBottom      =Bottom[i];       // Запомнить Bottom
                  iLastBottom     =i;
      }   }  }  }
      i--;
   }
   if ( iLastTop> 0 ) tLastTop=Time[iLastTop];       // Время крайних изломов
   if ( iLastBottom> 0 ) tLastBottom=Time[iLastBottom];
   return ( 0 );
}

0 hata(lar), 0 uyarı(lar) 1 1


 

Diyelim ki bir danışman başlattım, tam orada Bid'i kullanarak ilk tıklamada, danışman bu fiyatı belli bir noktaya kadar, belki bir günlüğüne, belki bir saatliğine hatırlamalı.

Hatırlamak için ne kullanılabilir?

 
AlexeyVik :

Ve örneğinizde int start()

x.z. (bilmek isterim) nedenini, ancak build 634'te, build 711'de olduğu gibi, int start() ve #property strict olmadan, boyutunu belirtmeden bir dizi bildirirseniz, tüm dizide 0 değerleri verir...

 
Hafıza yardımı ile. a=b, örneğin.
 
tara :

Ve dışarı çıkmamak en iyisi.

Burada:

0 hata(lar), 0 uyarı(lar) 1 1


Yani örnekte dinamik diziler yok... Örnekte betik, gösterge değil... Dikkatsizliğimden faydalanmayın.
 
AlexeyVik :

x.z. (bilmek isterim) nedenini, ancak build 634'te, build 711'de olduğu gibi, int start() ve #property strict olmadan, boyutunu belirtmeden bir dizi bildirirseniz, tüm dizide 0 değerleri verir...


#property katı, normal programlama seviyesi anlamına gelir. "Ne yaptığımı anlıyorum."
 
gheka :

Diyelim ki bir danışman başlattım, tam orada Bid'i kullanarak ilk tıklamada, danışman bu fiyatı belli bir noktaya kadar, belki bir günlüğüne, belki bir saatliğine hatırlamalı.

Hatırlamak için ne kullanılabilir?

Şaka değil. Değeri hatırlamanız ve bir süre değiştirmemeniz gerekiyorsa, koşulu ayarlamanız gerekir.

if (event) bir değişkene veya dizi öğesine bir değer atar.

Bu durumda, değişken veya dizi, global değişkenler veya statik düzeyinde bildirilmelidir.