[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 423

 

...devam...

Aşağıda, StringSubstr işlevi alt bölümünün sonunda, parantez içinde şu ifade verilmiştir: " ayrıca belirtilmelidir ki, ilk for döngüsünde (notum: açıkçası, nesneler silinmediği için deinit () işlevi kastedilmektedir. başka herhangi bir yerde) nesneler silinemez, t .çünkü bu durumda, her silmeden sonra, toplam nesne sayısı ve bunların numaralandırması değişecek, bunun sonucunda bazı nesne adları atlanacak ". Ancak Expert Advisor'ın yukarıdaki metninde ikinci bir for döngüsü yoktur. Ayrıca, for döngüsünden önce deinit () işlevinde bildirilen Quant_Del değişkeni sıfıra başlatıldı ve i değişkeni for döngüsünden önce hiçbir yerde bildirilmedi ve for döngüsü şöyle göründüğünden

   for ( int k= 0 ; k<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
         ObjectDelete (Name_Del[i]);       // .. имеющимися в массиве

Uzman Danışmanın yukarıdaki metninde, programın birkaç satırının basitçe atlandığı ortaya çıktı.

Bu nedenle , 1. soru şudur: Burada birkaç satır atlamaya gerçekten izin veriliyor mu, yoksa yeni başlayanların dışarıdan yardım almadan anlamını anlayamayacak kadar akıllı bir program mı?

Ayrıca... Aynı bölümün aynı bölümünde, Expert Advisor metninden önce aynı Expert Advisor'a bir link var (ekteki dosyada veriyorum), tıklandığında MetaElitor'da aynı Expert Advisor açılıyor. . Ancak bu EA'nın metni zaten farklıdır : burada deinit () işlevi zaten şöyle görünür:

 //--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[ 1 ];                 // Объявление массива
   int Quant_Del= 0 ;                     // Количество удаляемых объекто
   int Quant_Objects= ObjectsTotal ();   // Cтолько всего ВСЕХ объектов
   ArrayResize (Name_Del,Quant_Objects); // Необходимый размер массива
   for ( int k= 0 ; k<Quant_Objects; k++)   // По количеству объектов 
     {
       string Obj_Name= ObjectName (k);   // Запрашиваем имя объекта
       string Head= StringSubstr (Obj_Name, 0 , 6 ); // Извлекаем первые 6 сим
       if (Head==Prefix)                 // Найден объект, ..
        {                               // .. начинающийся с Paint_
         Quant_Del=Quant_Del+ 1 ;         // Колич имён к удалению
         Name_Del[Quant_Del- 1 ]=Obj_Name; //Запоминаем имя удаляемого
        }
     }
   for ( int i= 0 ; i<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
       ObjectDelete (Name_Del[i]);       // .. имеющимися в массиве
   return ;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --

Ardından, " ifadesini ayrı ayrı "birleştirirseniz" , ilk for döngüsündeki nesneleri silemeyeceğinize dikkat etmelisiniz, çünkü bu durumda, her silme işleminden sonra, toplam nesne sayısı ve bunların numaralandırması, bunun bir sonucu olarak değişecektir. hangi bazı nesne adları atlanacak " Ve son seçeneğin deinit () metin işlevi, 2. bir sorum vardı:

soru . Neden bir işlev yerleştirerek ilk for döngüsündeki nesneleri silemiyorsunuz? if ?... ifadesinin içinde ObjectDelete(Obj_Name) şöyle bir şey:

 int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects= ObjectsTotal ();   // Cтолько всего ВСЕХ объектов
   for ( int k= 0 ; k<Quant_Objects; k++)   // По количеству объектов 
     {
       string Obj_Name= ObjectName (k);   // Запрашиваем имя объекта
       string Head= StringSubstr (Obj_Name, 0 , 6 ); // Извлекаем первые 6 сим
       if (Head==Prefix)                 // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete (Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return ;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --

Neden toplam nesne sayısı "... her silme işleminden sonra değişiyor "?... Sonuçta, bu durumda, toplam nesne sayısını belirleyen Quant_Objects değişkeni, değerini ObjectsTotal() OUTSIDE değerine eşit olarak alır. döngü için ?

P. S. forumu kirletmemek adına şimdiden teşekkürler

Dosyalar:
strings_1.mq4  7 kb
 

Tünaydın! Açık sihirli Buy pozisyonlarını saymak için bir blok yaptım, ancak sorun şu ki, blok farklı döviz çiftlerinde çalışıyorsa, blok sadece bir döviz bahsi için sonuç verir (son açık pozisyon ). Blok her para birimi bahsi için sonuç verecek şekilde (sihri değiştirmeden) kod nasıl düzeltilir?

 int OpenMagicOrderCount_buy() 
{
   int OpenBuyOrdersCount = 0 ;
   int OpenOrders = 0 ;
   int cnt = 0 ;
   OpenOrders= OrdersTotal ();
   for (cnt= 0 ;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect (cnt, SELECT_BY_POS);
           if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )
          {                             
                  OpenBuyOrdersCount ++;
          }
   } 
   Print ( "+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount, "   OrderSymbol()= " , OrderSymbol ());
   return (OpenBuyOrdersCount); 
}
 
int OpenMagicOrderCount_buy() 
{
   int OpenBuyOrdersCount = 0 ;
   int OpenOrders = 0 ;
   int cnt = 0 ;
   OpenOrders= OrdersTotal ();
   for (cnt= 0 ;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect (cnt, SELECT_BY_POS);
           if ( OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )
          {                             
                  OpenBuyOrdersCount ++;
          }
   } 
   Print ( "+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount, "   OrderSymbol()= " , OrderSymbol ());
   return (OpenBuyOrdersCount); 
}
так все " OP_BUY" büyüleri sayılacak
 
7777877 :

...devam...

Aşağıda, StringSubstr işlevi alt bölümünün sonunda, parantez içinde şu ifade verilmiştir: " ayrıca belirtilmelidir ki, ilk for döngüsünde (notum: açıkçası, nesneler silinmediği için deinit () işlevi kastedilmektedir. başka herhangi bir yerde) nesneler silinemez, t .çünkü bu durumda, her silmeden sonra, toplam nesne sayısı ve bunların numaralandırması değişecek, bunun sonucunda bazı nesne adları atlanacak ". Ancak Expert Advisor'ın yukarıdaki metninde ikinci bir for döngüsü yoktur. Ayrıca, for döngüsünden önce deinit () işlevinde bildirilen Quant_Del değişkeni sıfıra başlatıldı ve i değişkeni for döngüsünden önce hiçbir yerde bildirilmedi ve for döngüsü şöyle göründüğünden

Uzman Danışmanın yukarıdaki metninde, programın birkaç satırının basitçe atlandığı ortaya çıktı.

Bu nedenle , 1. soru şudur: Burada birkaç satır atlamaya gerçekten izin veriliyor mu, yoksa yeni başlayanların dışarıdan yardım almadan anlamını anlayamayacak kadar akıllı bir program mı?

Ayrıca... Aynı bölümün aynı bölümünde, Expert Advisor metninden önce aynı Expert Advisor'a bir link var (ekteki dosyada veriyorum), tıklandığında MetaElitor'da aynı Expert Advisor açılıyor. . Ancak bu EA'nın metni zaten farklıdır : burada deinit () işlevi zaten şöyle görünür:

Ardından, " ifadesini ayrı ayrı "birleştirirseniz" , ilk for döngüsündeki nesneleri silemeyeceğinize dikkat etmelisiniz, çünkü bu durumda, her silme işleminden sonra, toplam nesne sayısı ve bunların numaralandırması, bunun bir sonucu olarak değişecektir. hangi bazı nesne adları atlanacak " Ve son seçeneğin deinit () metin işlevi, 2. bir sorum vardı:

soru . Neden bir işlev yerleştirerek ilk for döngüsündeki nesneleri silemiyorsunuz? if ?... ifadesinin içinde ObjectDelete(Obj_Name) şöyle bir şey:

Neden toplam nesne sayısı "... her silme işleminden sonra değişiyor "?... Gerçekten de, bu durumda, toplam nesne sayısını belirleyen Quant_Objects değişkeni, değerini for öğesinin ObjectsTotal () OUTSIDE değerine eşit alır. döngü?

P. S. forumu kirletmemek adına şimdiden teşekkürler

Döngüyü ters çevirin ve istediğiniz kadar çıkarın
 
FAQ :
Döngüyü ters çevirin ve istediğiniz kadar çıkarın

Seni doğru anladım mı? Tanımlama işlevini (ve özellikle döngüyü) aşağıdaki gibi temsil etmemiz gerekir:

 int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects= ObjectsTotal ();   // Cтолько всего ВСЕХ объектов
   for ( int k= Quant_Objects ; k>=0; k--) // По количеству объектов 
     {
       string Obj_Name= ObjectName (k);   // Запрашиваем имя объекта
       string Head= StringSubstr (Obj_Name, 0 , 6 ); // Извлекаем первые 6 сим
       if (Head==Prefix)                 // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete (Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return ;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --
 
Elektronik :


Bu veriler, alış emirleri ile satış emirleri arasındaki farkı hesaplamak için gereklidir.

diyelim ki 0.09 lot hacimli bir alış emri ve toplam hacmi 0.11 olan iki sat emri açıldı, aralarındaki fark 0.09-0.11=-0.02 veya mümkünse değerleri arasındaki fark olacak.


Peki, o zaman OrderLots işlevi.
 
abeiks :

Tünaydın! Açık sihirli Buy pozisyonlarını saymak için bir blok yaptım, ancak sorun şu ki, blok farklı döviz çiftlerinde çalışıyorsa, blok sadece bir döviz bahsi (son açık pozisyon) için sonuç verir. Blok her para birimi bahsi için sonuç verecek şekilde (sihri değiştirmeden) kod nasıl düzeltilir?

Değişiklik:

 if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )

Üzerinde:

 if ( OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )
 
Expert Advisor'daki puanlardaki stop loss, son mumun üzerindeki stop loss ile nasıl değiştirilir?
 
Neo777 :
Expert Advisor'daki puanlardaki stop loss, son mumun üzerindeki stop loss ile nasıl değiştirilir?
 double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble (High[ 1 ] + x * Point , Digits ); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
 

Reshetov :спасибо
извиняюсь за то что не в SRC

buraya nasıl eklenir