Hatalar, hatalar, sorular - sayfa 2916

 
Kira27 :

Anladım! isimler aynı olduğundan, sayıdaki en küçük ilk basamak seçilir ve bu 4. nesnedir, ardından ilk 2 nesnenin ilk basamağı 4 olduğundan, ilk 2 nesnenin dördünden sonraki daha küçük basamak seçilir . VB.

A100 :

Evet, ancak ters dönüşüm yapılamaz. Nesnelere rastgele sayılar atamak, bir dili MQL5 yerine MQL831 olarak adlandırmak gibidir.

O zaman bana öyle geliyor ki, nesneleri yaratılış sırasına göre manuel olarak işlemek için, tüm nesneleri oluşturduktan sonra ya da her birini oluşturma sürecinde isimleri oluşturma sırasına göre numaralandırmanız ve sonra robotu açın, böylece diziyi işler ve yazar, oluşturma numaralandırmasını isimlerde tutar. Gelecekte, bu , nesnelerin manuel olarak oluşturulmasından sırayla, hem ObjectName işlevi hem de benzerleri aracılığıyla listeden nesneleri doğru şekilde seçmeyi mümkün kılacaktır.

 
Kira27 :

O zaman bana öyle geliyor ki, nesneleri yaratılış sırasına göre manuel olarak işlemek için, tüm nesneleri oluşturduktan sonra ya da her birini oluşturma sürecinde isimleri oluşturma sırasına göre numaralandırmanız ve sonra robotu açın, böylece diziyi işler ve yazar, oluşturma numaralandırmasını isimlerde tutar. Gelecekte, bu , nesnelerin manuel olarak oluşturulmasından sırayla, hem ObjectName işlevi hem de benzerleri aracılığıyla listeden nesneleri doğru şekilde seçmeyi mümkün kılacaktır.

OBJPROP_CREATETIME özellik tanımlayıcısıyla ObjectGetInteger () işlevini kullanmaktan sizi alıkoyan nedir?

Документация по MQL5: Графические объекты / ObjectGetInteger
Документация по MQL5: Графические объекты / ObjectGetInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. [in]  Модификатор указанного свойства. Для первого варианта по умолчанию значение модификатора равно 0. Большинство свойств не требуют модификатора...
 
Artyom Trishkin :

OBJPROP_CREATETIME özellik tanımlayıcısıyla ObjectGetInteger () işlevini kullanmaktan sizi alıkoyan nedir?

Sonuç olarak, çizelgeye çizdiğim her şeyin nesneler adına yazılmasını istiyorum, listedeki nesnelerin oluşturulmasının numaralandırılması dahil, oluşturma sırasına, zaman dilimine, fibo seviye türüne göre ve fibo seviye tipinin sıra sayısı, nesnelerin grafik nesneler listesinde bulunduğu sırayla bu seviyelerin verileriyle paralel yazma dizilerinde. Daha sonra bu isimler tarafından alım satım işlemleri için kriterler ve bu nesnelerin yaratıldığı sıraya karşılık gelen dizilerdeki veriler oluşturulacaktır.


Ben böyle bir yol bulmuşken 4 adet fibo nesne oluşturuyoruz. Oluşturma sırası listeye kaydedilir, bunları oluşturma sırasına göre işlemek için numaralandırırız. Danışmanı başlatmak

 //+------------------------------------------------------------------+
//|                                                            F.mq5 |
//|                        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"
//+------------------------------------------------------------------+
//|                                                  Fibo_Massiv.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
string NameFiboUp[ 15 ];                               // Объявление массива
string NameFiboDown[ 15 ];                               // Объявление массива
string NameFibo[ 9 ];                               // Объявление массива
int TimeFrame[ 9 ];
string Num[ 9 ];

int Frame;
//string New_N;




//+------------------------------------------------------------------+
int OnInit ()
  {
//______________________________Массив новых имён с индексацией номеров очерёдности________________________________
   NameFiboUp[ 1 ]= "FiboUp1 " ;
   NameFiboDown[ 1 ]= "FiboDown1 " ;
   NameFiboUp[ 2 ]= "FiboUp2 " ;
   NameFiboDown[ 2 ]= "FiboDown2" ;
   NameFiboUp[ 3 ]= "FiboUp3" ;
   NameFiboDown[ 3 ]= "FiboDown3 " ;
   NameFiboUp[ 4 ]= "FiboUp4 " ;
   NameFiboDown[ 4 ]= "FiboDown4 " ;
   NameFiboUp[ 5 ]= "FiboUp5" ;
   NameFiboDown[ 5 ]= "FiboDown5 " ;
   NameFiboUp[ 6 ]= "FiboUp6 " ;
   NameFiboDown[ 6 ]= "FiboDown6 " ;
   NameFiboUp[ 7 ]= "FiboUp7 " ;
   NameFiboDown[ 7 ]= "FiboDown7 " ;
   NameFiboUp[ 8 ]= "FiboUp8 " ;
   NameFiboDown[ 8 ]= "FiboDown8 " ;
   NameFiboUp[ 9 ]= "FiboUp9 " ;
   NameFiboDown[ 9 ]= "FiboDown9 " ;
   NameFiboUp[ 10 ]= "FiboUp10 " ;
   NameFiboDown[ 10 ]= "FiboDown10" ;
   NameFiboUp[ 11 ]= "FiboUp11 " ;
   NameFiboDown[ 11 ]= "FiboDown11 " ;
   NameFiboUp[ 12 ]= "FiboUp12 " ;
   NameFiboDown[ 12 ]= "FiboDown12 " ;
   NameFiboUp[ 13 ]= "FiboUp13 " ;
   NameFiboDown[ 13 ]= "FiboDown13" ;
   NameFiboUp[ 14 ]= "FiboUp14 " ;
   NameFiboDown[ 14 ]= "FiboDown14" ;
//____________________string Массив таймфреймов______________________________
   NameFibo[ 1 ]= "M1" ;
   NameFibo[ 2 ]= "M5" ;
   NameFibo[ 3 ]= "M15" ;
   NameFibo[ 4 ]= "H1" ;
   NameFibo[ 5 ]= "H4" ;
   NameFibo[ 6 ]= "Da" ;
   NameFibo[ 7 ]= "We" ;
   NameFibo[ 8 ]= "Mo" ;
//___________________int Массив таймфреймов__________________________________________
   TimeFrame[ 1 ]= 1 ;
   TimeFrame[ 2 ]= 5 ;
   TimeFrame[ 3 ]= 15 ;
   TimeFrame[ 4 ]= 60 ;
   TimeFrame[ 5 ]= 240 ;
   TimeFrame[ 6 ]= 1440 ;
   TimeFrame[ 7 ]= 10080 ;
   TimeFrame[ 8 ]= 43200 ;
//_____________________________________________________________________________
   Num[ 1 ]= "1" ;
   Num[ 2 ]= "2" ;
   Num[ 3 ]= "3" ;
   Num[ 4 ]= "4" ;
   Num[ 5 ]= "5" ;
   Num[ 6 ]= "6" ;
   Num[ 7 ]= "7" ;
   Num[ 8 ]= "8" ;

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   int G= 0 ;
   int UP= 1 ;     //Счётчик очерёдности типов фибо
   int Down= 1 ;   //Счётчик очерёдности типов фибо
   string   nameUP   = "FiboUp" ;
   string   nameDown = "FiboDown" ;
   double FiboDown[ 4 ][ 10 ],FiboUp[ 4 ][ 10 ];   // 2x мерный  массив
//  Alert("ArraySize(FiboDown)= ", ArraySize(FiboDown));
   int Fibo_Koll = ObjectsTotal ( 0 , 0 , OBJ_FIBO );     //Запрос колличества объектов Fibo

//_________________________________________________________
   if (Fibo_Koll== 0 ) //Если нет не одного фибо выход        //
       return ;                                               //
//_________________________________________________________//

 //  int Koll[];  //Индексация и запись в массив по порядку появления фибо в окне инструментов
   // int Tip[];    //Запись типа Fibo в массив по порядку появления фибо в окне инструментов
   //ArrayResize(Koll,Fibo_Koll); // Устанавливает новый размер в первом измерении массива Koll []
   //ArrayResize(Tip,Fibo_Koll);  // Устанавливает новый размер в первом измерении массива Tip []


//  ObjectName(0,0,0,OBJ_FIBO); //Вытаскивает имя найденого фибо

   for ( int i= 0 ; i < Fibo_Koll; i++)
     {
      G++; // Нумератор объектов из списка объектов
       string n = ObjectName ( 0 ,i, 0 , OBJ_FIBO ); //Имя для обрезки до 2х первых знаков для получения тайм-фрейма
       string Name_Static = ObjectName ( 0 ,i, 0 , OBJ_FIBO );
       //--------------------------------------------------------

       //----------------------------------------------------------------------------------------
       double    Fibo_Level_0= ObjectGetDouble (
                                 0 ,           // идентификатор графика
                                n,               // имя объекта
                                 OBJPROP_PRICE ,           // идентификатор свойства
                                 0      // модификатор свойства
                             );


       double    Fibo_Level_1= ObjectGetDouble (
                                 0 ,           // идентификатор графика
                                n,               // имя объекта
                                 OBJPROP_PRICE ,           // идентификатор свойства
                                 1      // модификатор свойства
                             );
       //------------------------------------------------------------------------------------------------------
       if (Fibo_Level_0>Fibo_Level_1)
        {

         //вызов функции расчёта уровня 78.6
         double Fibo_78_Up = Function_Up(Fibo_Level_0, Fibo_Level_1);
         //Изменение имени объекта
         bool l =   StringSetLength (       //Устанавливает для  строки указанную длину в символах 2
                      n,       // строка
                       2      // новая длина строки
                   );
         //-----------------------------------------------------------
         int N = 1 ;
         string q;

         for ( int e = 1 ; N != 0 ; e++) // пока N не == 0, гоняем функцию StringCompare. сравнивая обрезанную переменную(StringSetLength) с массивом NameFibo[]
           {
            N= StringCompare (
                  n,               // первая сравниваемая строка
                  NameFibo[e],     // вторая сравниваемая строка
                   true        // режим учета регистра букв при сравнении
               );

            q= NameFibo[e];
            Frame= TimeFrame[e];
           }
         string New_N =Num[G];
         string r= New_N+q+NameFiboUp[UP];


         //--------------------------------------------------------------------
         FiboUp[UP][ 1 ]= 1 ;     // Тип обектов 1 == FiboUp
         FiboUp[UP][ 2 ]=UP;     // Нумерация обектов FiboUp по типу
         FiboUp[UP][ 3 ]=Fibo_78_Up;   // 78.6%
         FiboUp[UP][ 4 ]=Frame;       // Тайм фрейм
         FiboUp[UP][ 5 ]= 0 ;         // 50%

         //----------------------------------------------------------------------------------------------------------

         bool   F = ObjectSetString ( 0 ,Name_Static, OBJPROP_NAME ,r);

         UP++;
        }
       //----------------------------------------------------------------------------------
       else
        {
         //вызов функции расчёта уровня 78.6
         double Fibo_78_Down = Function_Down(Fibo_Level_0, Fibo_Level_1);
         //Изменение имени объекта
         bool l =   StringSetLength (       //Устанавливает для  строки указанную длину в символах 2
                      n,       // строка
                       2      // новая длина строки
                   );
         //-----------------------------------------------------------
         int N = 1 ;
         string q;


         for ( int e = 1 ; N != 0 ; e++) // пока N не == 0, гоняем функцию StringCompare. сравнивая обрезанную переменную(StringSetLength) с массивом NameFibo[]
           {
            N= StringCompare (
                  n,               // первая сравниваемая строка
                  NameFibo[e],     // вторая сравниваемая строка
                   true        // режим учета регистра букв при сравнении
               );

            q= NameFibo[e];
            Frame= TimeFrame[e];


           }
         string New_N =Num[G];
         string r= New_N+q+NameFiboDown[Down];

         //-------------------------------------------------------------------
         FiboDown[Down][ 1 ]= 2 ;     // // Тип обектов 2 == FiboDown
         FiboDown[Down][ 2 ]=Down;     // Нумерация обектов  по типу
         FiboDown[Down][ 3 ]=Fibo_78_Down;   // 78.6%
         FiboDown[Down][ 4 ]=Frame;       // Тайм фрейм
         FiboDown[Down][ 5 ]= 0 ;         // 50%
         //------------------------------------------------------------------
         //Изменение имени объекта
         bool   F = ObjectSetString ( 0 ,Name_Static, OBJPROP_NAME ,r);
         Down++;
        }
     }
//+------------------------------------------------------------------+
   ArrayPrint (
      FiboUp,             // выводимый массив
       6 ,       // количество десятичных знаков после запятой
       NULL ,       // разделитель между значениями полей структуры
       0 ,             // индекс первого выводимого элемента
       WHOLE_ARRAY ,   // количество выводимых элементов
       ARRAYPRINT_HEADER | ARRAYPRINT_INDEX | ARRAYPRINT_ALIGN
   );

   ArrayPrint (
      FiboDown,             // выводимый массив
       6 ,       // количество десятичных знаков после запятой
       NULL ,       // разделитель между значениями полей структуры
       0 ,             // индекс первого выводимого элемента
       WHOLE_ARRAY ,   // количество выводимых элементов
       ARRAYPRINT_HEADER | ARRAYPRINT_INDEX | ARRAYPRINT_ALIGN
   );

  }
// for(int i=0; i<ArraySize(Koll); i++)
//  printf("Koll[%d] = %d",i,Koll[i]);


//------------------------------------------------------------------------------------------------------

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double Function_Up( double a, double b)     // имя функции и список параметров
  {
   double Sum_100 = a - b; //Вычисляем 100% В пунктах от точек построения фибо
   double Sum_78  = Sum_100 * 78.6 / 100 ;   //Вычисляем 78.6% В пунктах
   return (Sum_78 + b);           // Вычисляем 78.6% в цене инструмента
  }
//+------------------------------------------------------------------+
double Function_Down( double a, double b)     // имя функции и список параметров
  {
   double Sum_100 = b - a ; //Вычисляем 100% В пунктах от точек построения фибо
   double Sum_78  = Sum_100 * 21.4 / 100 ;   //Вычисляем 78.6% В пунктах
   return (Sum_78 + a);           // Вычисляем 78.6% в цене инструмента
  }
//+------------------------------------------------------------------+

Listede oluşturulma sırasını korumak için isimlerinde değişiklik olan nesnelerin oluşturulma sırasına göre nesneler üzerinde yinelenir, ve nesnelerin özelliklerini ve seviyelerini, bir listede olduğu gibi, bu nesnelerin oluşturuldukları sırayla dizilere yazmak. Kodun ilk geçişi, listedeki nesnelerin oluşturulma sırasını korur, adları değiştirir, ölçüt oluştururken yönlendirme için özellikleri tamamlar ve doğru bir sonraki seçim için nesne listesindeki sırayı korur, her durumda sırayla yineleyerek nesnelerin koordinatlarını değiştirme ve dizileri ilk doldurma sırasına göre doğru şekilde yeniden yazma.


İlk geçişte mantık korunur)))

 
Kira27 :

Sonuç olarak, çizelgeye çizdiğim her şeyin nesneler adına yazılmasını istiyorum, listedeki nesnelerin oluşturulmasının numaralandırılması dahil, oluşturma sırasına, zaman dilimine, fibo seviye türüne göre ve fibo seviye tipinin sıra sayısı, nesnelerin grafik nesneler listesinde bulunduğu sırayla bu seviyelerin verileriyle paralel yazma dizilerinde. Daha sonra bu isimler tarafından alım satım işlemleri için kriterler ve bu nesnelerin yaratıldığı sıraya karşılık gelen dizilerdeki veriler oluşturulacaktır.


Ben böyle bir yöntem bulmuşken 4 adet fibo nesnesi oluşturuyoruz Oluşturma sırası listeye kaydediliyor, oluşturulma sırasına göre işlenmek üzere numaralandırıyoruz Expert Advisor'ı Başlatın

Listedeki oluşum sırasını korumak için isim değişikliği ile nesneleri oluşum sırasına göre sıralar ve listedeki gibi nesnelerin özelliklerini ve düzeylerini bu nesnelerin oluşturulma sırasına göre dizilere yazar. Kodun ilk geçişi, listedeki nesnelerin oluşturulma sırasını korur, adları değiştirir, ölçüt oluştururken yönlendirme için özellikleri tamamlar ve doğru bir sonraki seçim için nesne listesindeki sırayı korur, her durumda sırayla yineleyerek nesnelerin koordinatlarını değiştirme ve dizileri ilk doldurma sırasına göre doğru şekilde yeniden yazma.


İlk geçişte mantık korunur)))

Nesneler listesindeki yaratılış sırasına karşılık gelen sayılar örtük olarak nesnelere atansaydı, her şey çok daha basit olurdu.

 
Nikolay Kositsin :
Bilen kişiler CCanvas sınıfını kullanarak eskiz yapmaya başladılar. Ve tamamen bilinmeyen bir problem keşfettim. Dikdörtgenler ve arka planla dolu daireler normal olarak çizilir, ancak daire çizme girişimlerim tamamen başarısızlıkla sonuçlandı. Kodda dairelerin üç çeşidi vardır ve bunları grafikten çıkarmanın bir sonucu yoktur. Çevreler için bu kod çalışıyor mu, yoksa bir şey mi eksik?
Nikolay Semko :
Her zaman çalıştı.
Yanlış bir şey yapıyorsun.

Evet, her şey çalışıyor.
Bu komut dosyasını deneyin. Circle, CircleAA ve CircleWu adlı üç algoritmayı kullanarak rastgele yarıçap, renk ve şeffaflığa sahip daireler çizer

CircleAA kullanmamak daha iyidir - çok yavaş bir algoritma.

Dosyalar:
 
Kira27 :

Nesneler listesindeki yaratılış sırasına karşılık gelen sayılar örtük olarak nesnelere atansaydı, her şey çok daha basit olurdu.

Ve nesne oluşturma zamanı (ulong tipi olarak kullanın) OBJPROP_CREATETIME, nesne oluşturma sırasının bir tanımlayıcısı değil mi?
 
Kira27 :

Sonuç olarak, çizelgeye çizdiğim her şeyin nesneler adına yazılmasını istiyorum, listedeki nesnelerin oluşturulmasının numaralandırılması dahil, oluşturma sırasına, zaman dilimine, fibo türüne göre seviye ve fibo seviye tipinin sıra sayısı, bu seviyelerin verileriyle paralel yazma dizileri, nesnelerin grafik nesneler listesinde bulunduğu sırayla. Daha sonra bu isimler tarafından alım satım işlemleri için kriterler ve bu nesnelerin yaratıldığı sıraya karşılık gelen dizilerdeki veriler oluşturulacaktır.


Ben böyle bir yöntem bulmuşken 4 adet fibo nesnesi oluşturuyoruz Oluşturma sırası listeye kaydediliyor, oluşturulma sırasına göre işlenmek üzere numaralandırıyoruz Expert Advisor'ı Başlatın

Listedeki oluşum sırasını korumak için isim değişikliği ile nesneleri oluşum sırasına göre sıralar ve listedeki gibi nesnelerin özelliklerini ve düzeylerini bu nesnelerin oluşturulma sırasına göre dizilere yazar. Kodun ilk geçişi, listedeki nesnelerin oluşturulma sırasını korur, adları değiştirir, ölçüt oluştururken yönlendirme için özellikleri tamamlar ve doğru bir sonraki seçim için nesne listesindeki sırayı korur, her durumda sırayla yineleyerek nesnelerin koordinatlarını değiştirme ve dizileri ilk doldurma sırasına göre doğru şekilde yeniden yazma.


İlk geçişte mantık korunur)))

Sorunuz "bir" de çözüldü. Oluşturulan nesnelerin yeniden adlandırılmasını yazmak yeterlidir.

 /*******************Expert initialization function*******************/
int OnInit ()
 {
   ChartSetInteger ( ChartID (), CHART_EVENT_OBJECT_CREATE , true );
   return ( INIT_SUCCEEDED );
 } /******************************************************************/


/***********************OnChartEvent function************************/
void OnChartEvent ( const int id,         // идентификатор события
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                 )
 {
   if (id == CHARTEVENT_OBJECT_CREATE )
   {
     string result[];       //  массив для получения строк
     StringSplit (sparam, ' ' , result); //  получим из имени созданного объекта подстроки
     ulong timeCreate = ObjectGetInteger ( 0 , sparam, OBJPROP_CREATETIME ); //  получим время создания объекта
     string newName = result[ 0 ]+ " " +result[ 1 ]+ " " + string (timeCreate); //  сформируем новое имя объекта
     ObjectSetString ( 0 , sparam, OBJPROP_NAME , newName);   //  переименуем объект
   }
 } /******************************************************************/

Artık, bir Expert Advisor kurulu olan bir grafik üzerinde bir grafik nesnesi her oluşturulduğunda, rastgele bir sayı yerine nesnelerin adları, adında oluşturma süresine sahip olacak ve kesinlikle oluşturma sırasına göre sıralanacaktır.

Dosyalar:
000.mq5  5 kb
 
Merhaba! Okuma yazma bilmeyen bir "programcıya", sembol tablosunda belirli bir yerde bir histogramı üst üste bindirmek için mql4 gösterge koduna ne ekleyeceğini söyleyin? Grafiği gizlememesi için histogramın yarı saydam olması da istenir. Ekteki dosyada   (Mesaj içine nasıl resim ekleyeceğimi bilmiyorum) nasıl görünmesi gerektiğini gösterdi.
Документация по MQL5: Операции с графиками / ChartClose
Документация по MQL5: Операции с графиками / ChartClose
  • www.mql5.com
ChartClose - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Dosyalar:
 
Alexey Viktorov :

Sorunuz "bir" de çözüldü. Oluşturulan nesnelerin yeniden adlandırılmasını yazmak yeterlidir.


Artık, bir Expert Advisor kurulu olan bir grafik üzerinde bir grafik nesnesi her oluşturulduğunda, rastgele bir sayı yerine nesnelerin adları, adında oluşturma süresine sahip olacak ve kesinlikle oluşturma sırasına göre sıralanacaktır.

Çok teşekkürler!!! Bu Olay İşleme İşlevlerini tam olarak okumadım, programın ömrünü basitleştirirler)

 
Artyom Trishkin :
Ve nesne oluşturma zamanı (ulong tipi olarak kullanın) OBJPROP_CREATETIME, nesne oluşturma sırasının bir tanımlayıcısı değil mi?

Evet! Teşekkürler!!!

Neden: