Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1479

 
MrBrooklin #:

Çok teşekkür ederim, Alexander. Düzeltmeniz kodun çalışmasını sağladı. Dürüst olmak gerekirse, üç çam ağacında da kafamın karıştığını fark ettim. Bir fonksiyona argüman geçirme konusunu tekrar çalışmam gerekiyor. Görünüşe göre, burada tamamen yanlış anlamışım.

Saygılarımla, Vladimir.

Değişkenlerin global alana çıktısını almak bir fonksiyona argüman aktarmak değildir...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

Fonksiyona girişte değişken isimlerinin önüne & koyduğunuzda tüm sorunlar çözülecektir.

 
Alexey Viktorov #:

Değişkenlerin global kapsama çıktısını almak bir fonksiyona argüman aktarmak değildir...

Fonksiyona girişte değişken isimlerinin önüne & koyduğunuzda tüm sorunlar çözülecektir.

Merhaba Alexey, demek sorun buymuş!!! Çok teşekkür ederim, canım! Bütün kafam kırılmıştı, başka bir şeyin eksik olduğunu düşünmüştüm! Meğer beyinler yeterli değilmiş!!!! ))

Saygılarımla, Vladimir.

 
Alexey Viktorov #:
Fonksiyon girişinde değişken isimlerinin önüne & koyduğunuzda tüm sorunlar çözülecektir

Referanslı fonksiyonlar hakkındaki videoyu buldum ve izledim. Bu video dersinden anladım ki sadece yeni başlayanlar için bir MQL5 dersine değil, özellikle aptallık konusunda yetenekli yeni başlayanlar için bir MQL5 dersine ihtiyacım var. Kısacası, hiçbir şey anlamadım. Genel olarak, aldığınız tüm bilgileri sindirmeniz ve bu videoyu beş hatta altı kez tekrar izlemeniz gerekiyor. Ama boş zamanlarımda yapacak bir şeyler olacak! ))

Saygılarımla, Vladimir.

 
MrBrooklin #:

Bağlantıları olan fonksiyonlar hakkında bir video buldum ve izledim. Bu video dersinden, sadece yeni başlayan lar için bir MQL5 dersine değil, özellikle aptallık konusunda yetenekli olan yeni başlayanlar için bir MQL5 dersine ihtiyacım olduğunu fark ettim. Kısacası, hiçbir şey anlamadım. Genel olarak, aldığınız tüm bilgileri sindirmeniz ve bu videoyu beş hatta altı kez tekrar izlemeniz gerekiyor. Ama boş zamanlarımda yapacak bir şeyler olacak! ))

Saygılarımla, Vladimir.

Harcayacak hiçbir yeriniz olmasa bile zaman kaybetmeyin. "Öğretmenin" adı kendisi için konuşur, bir amatör bir amatördür.

Bu video sizin için sadece 3 dakika faydalıdır. Ve geri kalanı sadece dikkat dağıtıcıdır ve yararlı bilgileri kaybedersiniz.

Belgeleri dikkatlice okumak, örneklerle denemek daha iyidir ve her şeyi anlayacaksınız.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Передача параметров - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Boşa harcayacak bir yer olmasa bile zaman kaybetmeyin. "Öğretmen "in adı tek başına her şeyi anlatıyor, amatör amatördür.

Bu videoda sadece 3 dakika faydalı bilgi var. Geri kalanı sadece dikkat dağıtıcı ve faydalı bilgileri kaybediyorsunuz.

Belgeleri dikkatlice okumak, örneklerle deney yapmak daha iyidir ve her şeyi anlayacaksınız.

Teşekkürler Alexey, video dersin benim için daha bilgilendirici ve faydalı olacağını düşünmüştüm ama tam tersi oldu. MQL5 Referans Kılavuzu, Parametre İletimi bölümüne gelince, aynı şekilde okudum, ancak ünlü söz gibi çıktı: "Kitaba bakıyorum, şekli görüyorum!". Hiçbir şey anlamadım. Kısacası tabii ki birkaç kez daha okuyup deneyeceğim, fazla seçeneğim yok. ))

Saygılarımla, Vladimir.

 

Eğitim videosunu izledikten ve MQL5 Referans Kılavuzunda argümanları referansla geçirme konusunu okuduktan sonra, konu az çok açıklığa kavuşmuş gibi görünüyor. Bununla birlikte, Referans Kılavuzunda sunulan kodu analiz ettikten sonra, bence argümanları referansla geçirmekle hiçbir ilgisi olmamasına rağmen, bir parça hala kafa karışıklığına neden oldu:

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d= SecondMethod(a,b);
   Print("a и b после вызова:",a," ",b);
  }
//+------------------------------------------------------------------+
//--- результат выполнения скрипта
//  a и b перед вызовом: 14 8
//  a и b после вызова: 28 4

Bu bağlamda, MQL5 programlama uzmanlarına bir sorum var - neden SecondMethod(a,b ) işlevini OnStart( ) içindeki d değişkenine "ittirdiler"? Bu, kodun doğru çalışması için bir ön koşul mu, yoksa yine yanlış anladığım bir şey mi var?

Saygılarımla, Vladimir.

 

Lütfen bana yardım edin.

Zaman içeren birçok dizi var ve bu dizilerdeki bazı elemanların zamanı çakışabiliyor.

Bunları zaman değerlerini tekrarlamadan tek bir dizide toplamam gerekiyor.

Bu şekilde yaptım:

struct str1
  {
   int               time[];// в массиве порядка 10 тыс элементов
  };

struct str2
  {
   str1              arr[];// в массиве порядка 1 тыс элементов
  };

str2 m_name[]; // в массиве порядка 100 элементов

int ArrFull[]; // массив в который нужно собрать отсортированное время без повторений
//+------------------------------------------------------------------+
void OnStart()
  {
// считаем что m_name[] ранее уже заполнили


   int tempArr[];// объявляю дополнительный массив

   int size1 = ArraySize(m_name);
   for(int i = 0; i < size1; i++)
     {
      int size2 = ArraySize(m_name[i].arr);
      for(int j = 0; j < size2; j++)
        {
         // копирую в дополнительный массив все массивы времени из структур
         ArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
        }
     }
// сортирую дополнительный массив
   ArraySort(tempArr);

   int size = ArraySize(tempArr);
   ArrayResize(ArrFull, size);
   ArrFull[0] = tempArr[0];
   int j = 1;

// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работать
   for(int i = 1; i < size; i++)
      if(ArrFull[j - 1] != tempArr[i])
        {
         ArrFull[j] = tempArr[i];
         j++;
        }

   size = ArrayResize(ArrFull, j);

// дальше продолжение. много много букв
  }
//+------------------------------------------------------------------+


Ama çok yavaş bir kod oldu. Daha hızlı olması gerekiyor. Nasıl yapılır ????

 
MrBrooklin argümanları referansla geçirme konusunu okuduktan sonra, konu az çok açıklığa kavuşmuş gibi görünüyor. Bununla birlikte, Referans Kılavuzunda sunulan kodu analiz ettikten sonra, bence argümanları referansla geçirmekle hiçbir ilgisi olmamasına rağmen, bir parça hala biraz kafa karışıklığına neden oldu:

Bu bağlamda, MQL5 programlama uzmanlarına bir sorum var - neden SecondMethod(a,b ) işlevini OnStart() içindeki d değişkenine "tıkıştırmışlar"? Bu, kodun doğru çalışması için bir ön koşul mu ve ben yine bir şeyleri yanlış mı anladım?

Saygılarımla, Vladimir.

d değişkenine fonksiyonun yürütülmesinin sonucu atanır
 
Artyom Trishkin #:
d değişkenine fonksiyonun yürütülmesinin sonucu atanır

Yanıtınız için teşekkür ederim, Artyom!Atama yapmadan sadece SecondMethod(a,b) fonksiyonunu kullanmakimkansız mı?

Saygılarımla, Vladimir.

 
MrBrooklin #:

Yanıtınız için teşekkür ederim, Artyom!Atama yapmadan sadece SecondMethod(a,b) fonksiyonunu kullanmakimkansız mı?

Saygılarımla, Vladimir.

Evet, yapabilirsiniz. O zaman iki değer alınacaktır - yalnızca referansla aktarılan değişkenlerde. Yani, fonksiyon üç değer döndürür