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

 
paladin80 :
Toplamın nerede kullanıldığını görün. Büyük olasılıkla, (i=0; i<=toplam; i++) için siparişler arasında bir sıralama döngüsü vardır.

Bu arada, evet .. Bu işlevin tam kodunu zaten yukarıda ekledim:

 void FindOrders()
{
// - 1 - == Инициализация переменных перед поиском ======================================
   int total = OrdersTotal () - 1 ;
   g_type = - 1 ;                                     // На текущий момент у нас нет позиций
// - 1 - == Окончание блока =============================================================
 
// - 2 - == Непосредственно поиск =======================================================
   for ( int i = total; i >= 0 ; i--)                 // Используется весь список ордеров
       if ( OrderSelect (i, SELECT_BY_POS))           // Убедимся, что ордер выбран
         if ( MathFloor ( OrderMagicNumber ()) == i_magicNumber && // Ордер открыт
             OrderSymbol () == Symbol ())             // ..экспертом, который прикреплен к..
         {                                         // ..текущей паре
            g_ticket = OrderTicket ();               // Запишем данные ордера
            g_type = OrderType ();
         } 
// - 2 - == Окончание блока =============================================================
}

Anladığım kadarıyla şöyle yazmamak için şöyle yapmak daha mantıklı olacak:

 int total = OrdersTotal () - 1 ;

ve sonra döngüyü şu şekilde tanımlayın:

 for (i=total; i>= 1 ; i--)

Doğru? Sadece pozisyon sayısı sayacı sıfırdan başladığında bir şekilde çok iyi algılanmıyor .. mantıklı değil ve bu nedenle neden kendinizi karıştırıyorsunuz ..

 
hoz :

Bu arada, evet, bu işlevin tam kodunu zaten yukarıda ekledim:

Anladığım kadarıyla şöyle yazmamak için şöyle yapmak daha mantıklı olacak:

ve sonra döngüyü şu şekilde tanımlayın:

Doğru? Sadece pozisyon sayısı sayacı sıfırdan başladığında bir şekilde çok iyi algılanmıyor .. mantıklı değil ve bu nedenle neden kendinizi karıştırıyorsunuz ..

Siparişleri numaralandırmak için bire değil sıfıra ihtiyacınız var.

 for (i=total; i>= 0 ; i--)

Bir profesyonel bana bir dizi siparişin düzenlendiğini açıkladıktan sonra evet, daha büyük bir sayıyla sıralamaya başlamak daha iyidir. Dizide, ilk elemanın indeksi 0 (sıfır), yani 1'e kadar değil ve bu nedenle, sadece OrdersTotal() değil, OrdersTotal() - 1'e ihtiyacınız var.

Siparişlerim şu şekilde sıralanıyor:

 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 
paladin80 :

Siparişleri numaralandırmak için bire değil sıfıra ihtiyacınız var.

Bir profesyonel bana bir dizi siparişin düzenlendiğini açıkladıktan sonra evet, daha büyük bir sayıyla sıralamaya başlamak daha iyidir. Dizide, ilk elemanın indeksi 0 (sıfır), yani 1'e kadar değil ve bu nedenle, sadece OrdersTotal() değil, OrdersTotal() - 1'e ihtiyacınız var.

Çok ilginç. Ve önce ders kitabını açtım ve cevabı orada bulmaya çalıştım. Ardından https://book.mql4.com/ru/trading/ordermodify , eğitimde numaralandırmanın nasıl yapıldığını gördü:

 for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер

Kafamı karıştıran faktör bu...

 
hoz :

Çok ilginç. Ve ilk olarak ders kitabını açtım ve cevabı orada bulmaya çalıştım. Ardından https://book.mql4.com/ru/trading/ordermodify , eğitimde numaralandırmanın nasıl yapıldığını gördü:

Kafamı karıştıran faktör bu...


Sonraki satırı fark ettiniz mi?

   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер     
   {      
     if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) // Если есть следующий
//
//Тут компенсируется отсутствие нуля с i-1
 
borilunad :


Bir sonraki satırı fark ettiniz mi?

Numara. Ama bir şekilde yazmak için çarpık. Ders kitabını eleştirmek istemiyorum ama .. 0'dan saymak çok daha yeterli, -1'den değil. Aksi takdirde, -30'dan başlamak mümkün olurdu ...

Paladin80'in yukarıda belirtildiği gibi, 0'dan itibaren dizilerin değeri, -N'den geliyorsa, en uygun olarak kabul edilecektir.

 
hoz :

Numara. Ama bir şekilde yazmak için çarpık. Ders kitabını eleştirmek istemiyorum ama .. 0'dan saymak çok daha yeterli, -1'den değil. Aksi takdirde, -30'dan başlamak mümkün olurdu ...

Paladin80'in yukarıda belirtildiği gibi, 0'dan itibaren dizilerin değeri, -N'den geliyorsa, en uygun olarak kabul edilecektir.


Şimdi mantıklı düşünün!

Bu seçenekler aynıdır, çünkü i = 0 ise birden OrderTotal()'a, yani 0+1'den OrderTotal()'a - 1+1'e yinelenir (+1, çünkü i ++ for öğesinin sonundadır deyimi) Ve ders kitabında aynıdır, sadece 1'den OrderTotal()'a yazılır ve 2'den OrderTotal()+1'e saymamak için, ders kitabının yazarı OrderSelect işlevinde i'ye -1 ekledi . Anlaşılır şekilde?

Bu arada, kaç programcı, neredeyse bir o kadar yazım seçeneğiyle karşılaşacaksınız. Herkesin kendi vizyonu, kendi el yazısı vardır!

 
hoz :

Numara. Ama bir şekilde yazmak için çarpık. Ders kitabını eleştirmek istemiyorum ama .. 0'dan saymak çok daha yeterli, -1'den değil. Aksi takdirde, -30'dan başlamak mümkün olurdu ...

Paladin80'in yukarıda belirtildiği gibi, 0'dan itibaren dizilerin değeri, -N'den geliyorsa, en uygun olarak kabul edilecektir.

Siparişleri sıralamanın bir yolu ile ilgileniyorsanız, aşağıdaki şemayı önerebilirim:

 if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) // ордер выбирается среди открытых
                                                     // и отложенных ордеров
      {   if ( OrderSymbol ()!= Symbol ()) continue ;     // если не наш символ, то уходим
         if ( OrderMagicNumber ()!= 555 ) continue ;     // если не наш магик номер, то уходим
                                                     // можно поставить любые другие фильтры
         // ... ваши вычисления
      }
   }
}
 
hoz :

Numara. Ama bir şekilde yazmak için çarpık. Ders kitabını eleştirmek istemiyorum ama .. 0'dan saymak çok daha yeterli, -1'den değil. Aksi takdirde, -30'dan başlamak mümkün olurdu ...

Paladin80'in yukarıda belirtildiği gibi, 0'dan itibaren dizilerin değeri, -N'den geliyorsa, en uygun olarak kabul edilecektir.

Aynı bakış açısına bağlıyım - ders kitabı belirli bir kişi tarafından yazılmıştır - bu onun şeylere bakışıdır (siparişlerin sıralanması döngüsünün organizasyonu) ve HER ZAMAN birçok doğru çözüm vardır. Doğru görüşler var ama aynı zamanda doğru ve şık da var... :)
 
borilunad :


Şimdi mantıklı düşünün!

Bu seçenekler aynıdır, çünkü i = 0 ise birden OrderTotal()'a, yani 0+1'den OrderTotal()'a - 1+1'e yinelenir (+1, çünkü i ++ for öğesinin sonundadır deyimi) Ve ders kitabında aynıdır, sadece 1'den OrderTotal()'a yazılır ve 2'den OrderTotal()+1'e saymamak için, ders kitabının yazarı OrderSelect işlevinde i'ye -1 ekledi . Anlaşılır şekilde?

Elbette anlaşılabilir. Ancak şimdi bir emrin varlığının bu şekilde analiz edildiğini görmedim:

 if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true)

genellikle sadece ==true olmadan ... Bu anı bile sevdim. İlginç olsa da diğer uzmanlarda böyle bir teknik görmemiştim. Mantığını anlıyorum ama yine de.

 
Lütfen bana birkaç çubuk önce, yani geçmişten hareket etmenin değerini nasıl hesaplayacağımı söyleyin? Kodda nasıl görüneceğini kastediyorum. Eğer sadece bir hareketse o zaman
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
, ve eğer -5 bar önceyse?