2 sonuç döndüren işlev? - sayfa 4

 

gordon It doesn't imply anything, but specifically in both C and C++ arrays are passed by reference as well (technically a pointer to the array's first element is passed, that pointer is passed by value).

Teşekkürler. İşaretçi konusundaki bilgimi de tazelemem gerekiyor.

Matutin: Çok ilginç! Ne yazık ki, EA'nın parametrelere ihtiyacı var ve bazen çok fazla, bu yüzden onlardan kaçınamayız ve https://www.mql4.com/go?http://www.c2.com/ adresinde belirtilen tüm nedenlerle ilgilenmemiz gerekiyor. cgi/wiki?KüreselDeğişkenlerKötü

Neden bir Dosyaya yazmıyorsunuz ve her EA bunları okuyabilir.

gordon : Bu tartışma global kapsamda tanımlanan değişkenler hakkındadır (start(), init(), deinit() özel fonksiyonunun dışında bildirilen) ve GV'ler hakkında değil... İkisini karıştırmayın.

Karışıklığı önlemek için her zaman global kapsamlı değişkenler ve GlobalVariables derim. MT4 ve MT5, bunlar için farklı terminoloji kullanarak daha iyisini yapabilir.

 
gordon :
Olmayan bir sorunu neden çözelim? Neden tekerleği yeniden icat ettin? Neden yalnızca sınırlı durumlarda işe yarayacak belirsiz bir kod oluşturuyorsunuz?


Pekala, bu şekilde çalışan bir fonksiyon yazdığım için, 1'den 7'ye kadar olan bir dizide birkaç hareketli ortalamaya sahiptir, eğer herhangi biri bir sinyal hattı tarafından geçilirse, dizi indeksini*1000 + yön (yukarı için 0, aşağı için 1)*100 alır bu, her sipariş için üç bilgi içeren benzersiz bir kimlik numarası döndürür.

Örneğin, üçüncü MA aşağı doğru çaprazlandığında 3100 numaralı bir emir açık sinyali, ikinci MA yukarı doğru çaprazlanırsa 2000 numaralı sinyal oluşturulur.

Bu, sınır geçiş fonksiyonumun bu numarayı açık siparişler fonksiyonuma gönderebileceği anlamına geliyor, çünkü artık 3 bilgi içeriyor. ilk olarak sihirli sayının kendisidir, ikinci olarak ordertype = sinyal%1000/100 sonuç bir satış mı yoksa satın mı olacağına karar verir.

bu durumda sihirli sayı, ilk etapta onu oluşturmak için hangi MA çizgisinin geçildiği hakkında bilgi içerir. int MA=sihirli sayı/1000 sonuç, hareketli ortalamaların orijinal dizi indeksine karşılık gelen 1 ila 7 arasında bir değerdir

üçüncü olarak, sihirli sayı her sipariş için benzersiz bir tanımlayıcıdır ve aynı sihirli numaraya sahip iki siparişe izin verilmediğinden tekrarlanan sinyaller nedeniyle birden fazla siparişin açılmasını önler

programda daha sonra sipariş tipine göre bir işlem yapmak istersem type=(magicnumber%1000)/100; sonuç 1 ise satış emriydi, sıfırsa satın alma emriydi, bu emri hangi MA satırının oluşturduğunu bilmek istersem int MA=sihirli sayı/1000 yapıyorum açıkçası tam sayı herhangi bir kayan noktayı düşürür ve bana orijinali verir MA indeksi 1 ila 7

Bunun, tek bir işlev dönüşünden birden fazla alınabilir ve kullanılabilir bilgi yaratmanın düzgün bir yolu olduğunu düşündüm.

 
SDC :

Peki çünkü [...]

Bu harika, ama yine de - neden bunu doğrudan, evrensel, açık ve kabul görmüş bir şekilde yapmıyorsunuz? Neden tüm bu zahmete girelim? Bunun daha basit olduğunu düşünmüyor musun:

 int a,b ;
void MyFunc( int & a, int & b )
   {
   //... function result should be 'passed' to a and b
 

Bunun da işe yarayacağını sanıyorum, o zamanlar iyi bir fikir gibi görünüyordu, esas olarak bir EA tp üzerinde çalıştığım için aynı anda birkaç farklı ticaret stratejisini yönetiyordum ve bu sistemi yönetmek için çalıştım hangi işlem kriterlerine ait olduklarına bağlı olarak sihirli sayılarla emirler, örneğin 55 MA, endeks 3 olduğundan, diğer tüm emirlerden bağımsız olarak 55 dönemlik hareketli ortalama çaprazı tarafından açılan tüm satış emirlerini kapatabilirsiniz, bu emirlerin sihirli sayıları esas alınır. 3000'de sonra bunu bir adım daha ileri götürebileceğimi ve emir tipini de dahil edebileceğimi fark ettim, bu nedenle bu MA satırındaki satış emirlerinin sihirli numarası 3100 3101 3102, vb. bu ticaret kriterleri veya herhangi bir ticaret kriteri vb. tarafından açılan tüm satış emirleri ile tümü özel sihirli sayı ile