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

 
Taras Slobodyanik :

yorumun formatı komisyoncudan komisyoncuya değişebilir.

"Kime" ve "Kimden" yokluğunu karşılamadım
 
Artyom Trishkin :
"Kime" ve "Kimden" yokluğunu karşılamadım
Artem, yukarıdaki soruma bak...
 

Herkes günün saatini sever!

Lütfen bana MQL4'te (veya MQL5'te, ancak MQL4'te çalışırken ) LoY[2][7] dizisini LoY[7][2] dizisine ve bunun tersini yapan bir işlev olduğunu söyleyin. Bir tür aktarma. Aşağıda ihtiyacım olan dönüşüm örneği var. Bir işleve sahip olmak arzu edilir. Bir diziyi bir döngüde nasıl dönüştüreceğimi zaten biliyorum.

Yardım için teşekkürler.

 
ANDREY :

Herkes günün saatini sever!

Lütfen bana MQL4'te (veya MQL5'te, ancak MQL4'te çalışırken ) LoY[2][7] dizisini LoY[7][2] dizisine ve bunun tersini yapan bir işlev olduğunu söyleyin. Bir tür aktarma. Aşağıda ihtiyacım olan dönüşüm örneği var.

Yardım için teşekkürler.

sadece referans için: klasik algoritmalarda (genel olarak BT) böyle bir işleme zip denir,

kütüphanede böyle bir fonksiyon yok. O çok açgözlü ve verimsiz. Bir algoritmada/programda dizinleri değiştirmek veya dizilerdeki TÜM verileri yeniden düzenlemekten dolaylı kullanmak daha kolay ve hızlıdır.

 
Maxim Kuznetsov :

Bir algoritmada/programda dizinleri değiştirmek veya dizilerdeki TÜM verileri yeniden düzenlemekten dolaylı kullanmak daha kolay ve hızlıdır.

Cevap için çok teşekkür ederim. Maalesef programlama konusunda sizin kadar ileri düzeyde değilim. Kodu mql4 olarak yazarsanız çok minnettar olurum.   sorunumu çözmek için hangi dizi indekslerinin değiştirildiği yardımı ile. Ve dolaylı bir temyiz örneği verirseniz, iki kat minnettar olacağım.

O zaman düşüncenizin gidişatını daha doğru anlayacağım ve sayenizde kendim için yeni ve faydalı bir şey öğreneceğim.

 
ANDREY :

Cevap için çok teşekkür ederim. Maalesef programlama konusunda sizin kadar ileri düzeyde değilim. Kodu mql4 olarak yazarsanız çok minnettar olurum.   sorunumu çözmek için hangi dizi indekslerinin değiştirildiği yardımı ile. Ve dolaylı bir temyiz örneği verirseniz, iki kat minnettar olacağım.

O zaman düşüncenizin gidişatını daha doğru anlayacağım ve sayenizde kendim için yeni ve faydalı bir şey öğreneceğim.

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

kısa, ancak yapabileceğiniz en kötü şey bu :-) iki iç içe döngü ve dizilerin eleman-eleman kopyalanması.

algoritmanızın içindeyken dizinleri yeniden adlandırabilirsiniz. Sadece kodda i'yi j olarak değiştirin ve bunun tersi de geçerlidir.

 
Maxim Kuznetsov :

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

kısa, ama yapabileceğiniz en kötü şey :-)

Çok teşekkürler. Daha iyi bir örneğe ne dersiniz? :-).... böylece tam bir anlayışa sahip olayım.

Eleman-eleman kopyalama uzun ve enerji yoğundur...özellikle büyük diziler için...yanılmıyorsam.

 
Andrew, bunu neden yapıyorsun? Veriler zaten bir dizide toplanmışsa, hiçbir şeyi hareket ettirmeden olduğu gibi kullanmanın bir yolunu bulabilirsiniz. Veya doğru sırayla bir diziye önceden monte edin. Ne almak istiyorsun?
 
Aleksei Stepanenko :
Andrew, bunu neden yapıyorsun? Veriler zaten bir dizide toplanmışsa, hiçbir şeyi hareket ettirmeden olduğu gibi kullanmanın bir yolunu bulabilirsiniz. Veya doğru sırayla bir diziye önceden monte edin. Ne almak istiyorsun?

İşte ihtiyacım olanı göstermek için basit kodum.

 double LoY[ 2 ][ 31 ],LoU,LoU1;
int S,S1,S2;

void OnTick ()
{
//*************************************************** БЛОК 1
if (Minute()== 20 &&Minute()!=S1)
{
ArrayFill (LoY, 0 , 10 , 0.5555 );

S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[0][S2]=Bid;
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
Print ( "----LoY[0][1]-- Г ---  [0]  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 0 ][ 1 ], "  [2] " ,   LoY[ 0 ][ 2 ], "  [3] " ,   LoY[ 0 ][ 3 ], "  [4] " ,   LoY[ 0 ][ 4 ], "  [26] " ,   LoY[ 0 ][ 26 ], "  [27] " ,   LoY[ 0 ][ 27 ], "  [28] " ,   LoY[ 0 ][ 28 ], "  [30] " ,   LoY[ 0 ][ 30 ], "  [60] " ,   LoY[ 0 ][ 60 ]);
Print ( "----LoY[1][0]-- В ---  [0]  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 1 ][ 0 ], "  [2] " ,   LoY[ 2 ][ 0 ], "  [3] " ,   LoY[ 3 ][ 0 ], "  [4] " ,   LoY[ 4 ][ 0 ], "  [26] " ,   LoY[ 26 ][ 0 ], "  [27] " ,   LoY[ 27 ][ 0 ], "  [28] " ,   LoY[ 28 ][ 0 ], "  [30] " ,   LoY[ 30 ][ 0 ], "  [60] " ,   LoY[ 60 ][ 0 ]);
S2++;
if (S2== 62 )
{
S2= 0 ;
}
S=Minute();
}
}

Blok 1, ArrayFill(LoY,0,10,0.5555) yürütür ve ilk 10 dizi öğesini 0,5555 olarak ayarlar. Bundan sonra, 0 sütunundan 31. sütuna kadar tüm boş satırı sıralamam gerekiyor.

ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); kullanarak blok 2'de sıralamak istiyorum. Ama sıralayamıyorum çünkü bu fonksiyon iki boyutlu bir diziyi birinci boyuta göre yani satırlara göre sıralıyor. Ve sadece 1. sıralanması gereken bir dizgem var. İkinci boyuta göre ArraySort(), yani iki boyutlu dizileri sütunlara göre sıralamaz (yalnızca tek boyutlu olanlar).

Bu yüzden, ilk bloğun yürütülmesinden sonra LoY[2][31]'i LoY[31][2]'ye dönüştürmeye değer olabileceğini düşündüm, böylece blok 2'de ArraySort() ihtiyacım olan değerleri sıralayabilirdi. Ve ArrayFil() ilk 10'unu değiştirdikten sonra boş dizedeki tüm değerleri sıralamam gerekiyor.

Belki iki boyutlu dizileri ikinci boyuta göre, yani başka bir işlev veya başka bir şey kullanarak sütunlara göre sıralayabilirsiniz?
Üzgünüm... kodu nasıl kaldıracağımı bilmiyorum. Bu nedenle, LoY[S2][0]=Bid; yerine 180. satırda bir hata olduğunu söyleyeceğim. LoY[0][52]=Teklif gerekir;

yardım için teşekkürler

 
Değerleri her iki satırda mı yoksa sadece ilk satırda mı sıralamak istiyorsunuz?