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

 
trader781 :

O zaman lütfen önceki soruma cevap ver

1) Bir dizi yapı yazmak

2) diğer işlevlere geçiş

3) bir dizi yapı elemanlarının çıkarılması ve birbirleriyle karşılaştırılması

4) bir dizi yapı yazdırın

girişin kendisi benim için bir kod biçiminde önemlidir, böylece nasıl görünmesi gerektiğini anlayabilirim

Her şey eldeki göreve bağlıdır. Görevler keyfi olarak farklı olabileceğinden, tam olarak ne gösterilmelidir?

Eh, yazacağım, zaman geçireceğim ama yazdıklarım kare. Delik üçgendir. Ve o zaman kareyi nereye itmeli?

 
Artyom Trishkin :

Her şey eldeki göreve bağlıdır. Görevler keyfi olarak farklı olabileceğinden, tam olarak ne gösterilmelidir?

Eh, yazacağım, zaman geçireceğim ama yazdıklarım kare. Delik üçgendir. Ve o zaman kareyi nereye itmeli?

699 postasını ve çevresini al

bunu diğer fonksiyonlara nasıl geçireceğim ve yapının elemanını önceki elemanla nasıl karşılaştıracağım

ve böylece sırayla bir tür sipariş alıp tüm değerleri yazdırabilirim

Aradaki fark, bir sayı olmaması ve diğer kayıt kurallarının geçerli olmasıdır.

 
trader781 :

699 postasını ve çevresini al

bunu diğer fonksiyonlara nasıl geçireceğim ve yapının elemanını önceki elemanla nasıl karşılaştıracağım

ve böylece sırayla biraz sipariş alıp tüm değerleri yazdırabilirim

Aradaki fark, bir sayı olmaması ve diğer kayıt kurallarının geçerli olmasıdır.

İhtiyacınız olan tüm siparişler arasında geçiş yapmanız gerekir.

Bir sonraki gerekli sırayı belirledikten sonra diziyi 1 artırın ve bu sipariş için tüm verileri yeni hücresine yazın. Dizinin kendi hücresine , siparişin açılış saatini yazın (eğer kapalı olanları arıyorsanız, kapanış saatini). Kalan verileri yapının alanlarına girin

Döngünün bitiminden sonra diziyi artan düzende sıralayın.

Önce bunu yap. Gerisi daha fazla tartışılabilir.

 
Vitalie Postolache :

Bir döngü içinde bu sorun çözülmez.

Teşekkür ederim.

 
Artyom Trishkin :
//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct myorder
  {
   int                Ticket;
   double             orderopenprice;
   int                ordertype;
   double             profit;
   double             stoploss;
   double             lot;
  };
myorder orders[][ 5 ];

int     i;
int     Magic= 444 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   CalcOrders();

  }
//+------------------------------------------------------------------+
void CalcOrders()
  {
   int count1=- 1 ;
   ArrayResize (orders, AccountInfoInteger ( ACCOUNT_LIMIT_ORDERS ), 10 );
   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
         && ( OrderMagicNumber ()==Magic) && ( OrderType ()< 2 ))
        {
         count1++;
         orders[count1][ 0 ].Ticket= OrderTicket ();
         orders[count1][ 1 ].lot= OrderLots ();
         orders[count1][ 2 ].orderopenprice= OrderOpenPrice ();
         orders[count1][ 3 ].ordertype= OrderType ();
         orders[count1][ 4 ].profit= OrderProfit ();
         orders[count1][ 5 ].stoploss= OrderStopLoss ();
        }

     }
   ArraySort (orders, WHOLE_ARRAY , 0 , MODE_ASCEND );

  }
//+------------------------------------------------------------------+
Dosyalar:
test.mq4  3 kb
 
trader781 :

Kodunuzu yazınıza ekledim.

Ve şimdi anlamaya başlarsan, o zaman

  1. Neden bir dizi yapıyı çok boyutlu bir dizi yaptılar?
  2. Neden CalcOrders() işlevinde yapı dizisinin boyutunu " İzin verilen maksimum aktif bekleyen sipariş sayısı " olarak değiştiriyorsunuz? Yardımı açarsanız (ki bunu her zaman yapmanız gerekir), bu tanımlayıcının ( ACCOUNT_LIMIT_ORDERS ) de bekleyen sipariş sayısında bir sınırın olmamasına karşılık gelen sıfır döndürebileceğini göreceksiniz. Dizinin boyutu döngüden önce sıfır olmalıdır.
  3. Neden döngüdeki dizinin boyutunu artırmıyorsunuz?
 
Artyom Trishkin :

Kodunuzu yazınıza ekledim.

Ve şimdi anlamaya başlarsan, o zaman

  1. Neden bir dizi yapıyı çok boyutlu bir dizi yaptılar?
  2. Neden CalcOrders() işlevinde yapı dizisinin boyutunu " İzin verilen maksimum aktif bekleyen sipariş sayısı " olarak değiştiriyorsunuz? Yardımı açarsanız (ki bunu her zaman yapmanız gerekir), bu tanımlayıcının ( ACCOUNT_LIMIT_ORDERS ) de bekleyen sipariş sayısında bir sınırın olmamasına karşılık gelen sıfır döndürebileceğini göreceksiniz. Dizinin boyutu döngüden önce sıfır olmalıdır.
  3. Neden döngüdeki dizinin boyutunu artırmıyorsunuz?

1) X sipariş Y parametre numarasının bu görev için daha uygun olduğunu düşündü

2) Hesabın türüne bağlı olarak 50 veya 100'e eşitim ve başka bir şey yok

3) öyleyse   say1++; her geçişte artacak ve dizi değerini alacak

 
trader781 :

1) X sipariş Y parametre numarasının bu görev için daha uygun olduğunu düşündü

2) Hesabın türüne bağlı olarak 50 veya 100'e eşitim ve başka bir şey yok

3) öyleyse   say1++; her geçişte artacak ve dizi değerini alacak

1. O zaman yapı nedir?

2. "Ne gitti, ne gitti" piyasa pozisyonları dizisi için bu parametreye ihtiyacınız var... Döngüden önceki dizinin sıfır boyutu olmalıdır.

3. Her şey doğru. Başlangıçta, dizinin boyutu sıfırdır. Her yeni bulunan siparişle, dizi, ihtiyacınız olan sipariş sayısına eşit boyutta olur.

 
Artyom Trishkin :

1. O zaman yapı nedir?

2. "Ne gitti, ne gitti" piyasa pozisyonları dizisi için bu parametreye ihtiyacınız var... Döngüden önceki dizinin sıfır boyutu olmalıdır.

3. Her şey doğru. Başlangıçta, dizinin boyutu sıfırdır. Her yeni bulunan siparişle, dizi, ihtiyacınız olan sipariş sayısına eşit boyutta olur.

1) ikinci boyut ayarlanmadıysa derleyici yemin eder, hemen "sınıf türünü belirtin, bilinmeyen parametreler" belirir.

2) daha sonra bot, "aralık dışı kritik hata dizisi" ile başlangıçta hemen ölecektir

3) hemen ayarlayın int sayı1=- 1 ; Sonra döngüden geçiyoruz. Burada sorun ne?

 
trader781 :

1) ikinci boyut sağlanmazsa derleyici yemin eder

2) daha sonra bot, "aralık dışı kritik hata dizisi" ile başlangıçta hemen ölecektir

3) hemen ayarlayın int sayı1=- 1 ; Burada sorun ne?

1. Size sadece boyutlardan birinin çıkarılması gerektiğini söylüyor. Tek boyutlu bir dizi bildiriyorsunuz, ancak onu iki boyutlu bir diziye yazmak istiyorsunuz. Sonuç nedir? Elbette derleyiciden bir hata alacaksınız.

2. Ölmemek için, diziyi bir döngüde doğru bir şekilde doldurmanız ve bilinmeyen bir boyuta ayarlamamanız ve sonra onu-anlamadan-ne kadar-ne kadar itmeniz gerekir.

3. Değişkeni -1 olarak ayarladınız. Ve dizinin döngüden önce sıfır boyutu olmalıdır. Burada net olmayan ne var?

Dernekler oynayalım:

  • Sıfır iç hacme (sıfır dizi boyutu) sahip sönük bir balonunuz (boş dizi) olduğunu hayal edin. Bu topun içine (bir diziye) jeton eklemek istersiniz (ihtiyacınız olan siparişler). Burada, her madeni para, bir topun içinde saklamaya uygun olduğuna karar verir vermez (her biri gerekli düzen bulundu), topun iç hacmini artıracaktır (sadece madeni paranın kendisi topu gerecektir ve şaşırmanız gerekir). bununla kendiniz - dizi boyutunu 1 artırın ve ona bir izin verin).
    Sonunda, tüm madeni paraları bulup topun içine ittiğinizde, artık sönmeyecek - iç hacmi madeni paralar tarafından gerildi (gerekli siparişleri arama döngüsünün sonunda, dizi, bulunan gerekli siparişlerin sayısına eşit olacaktır, çünkü dizi boyutunu bulunan her gerekli siparişle birlikte artırdınız.

    Şimdi madeni paraları başlangıçta lastik olan ve boyutunu değiştirebilen bir topun içine değil, sınırlı bir hacme sahip küçük bir kumbaraya koyduğunuzu hayal edin (başlangıçta dizinin boyutunu ayarladınız ve artık artırmadınız) . Ne olacak? Tüm paralar kumbaraya sığmaz. Ve her şey bir topun içinde.

Derneğiniz böyle.