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

 
Artyom Trishkin :

Sorun kodu.

Neden?... Aynı doğrunun bu tür her kesişiminde mantığı ikiye katlamakla ilgiliyse, o zaman doğal olarak tüm mantık (ki ben yazmadım) doğrudan bir kişi tarafından yazılmalıdır. Son hedeflerini bilmiyorum, belki fiyatın her çizgiyi geçerken kaç kez geçtiğini saymak istiyor...

Bir insanın kendi amaçları için böyle bir olay elde edemeyeceğini anladım. Şimdi böyle bir olay alacak ve sonra kendi takdirine bağlı olarak.


İlk kesişme noktasında çizginin kendisini belirli bir formatta yeniden adlandırmak (veya bu şeklin açıklamasına bir tür etiket koymak) mantıklı olacaktır. Ve tüm nesneleri geçerken, çizgide bu işaretin bulunmadığını kontrol edin.

Her işarette tüm nesneler üzerinde yineleme yapmanın verimsizliğinden bahsediyorsak, bu tamamen farklı bir konudur.

 
Roman :

Bu yüzden matematiksel hesaplamalarınızda _Period değişkeninin H1 üzerindeki periyotlarda döndürdüğü değeri kullanmayı deneyin.
Ve kimin hata yaptığını hemen anlayacaksınız.

Aklı başında hiç kimse, matematiksel hesaplamalar için adlandırılmış sabitlerin değerlerini kullanmaz. Bu nedenle, neye eriştiğinizi veya veri almak için hangi özellik tanımlayıcısını kullandığınızı anlamanızı kolaylaştırmak için sabitler olarak adlandırılırlar. Adlandırılmış sabitler, istenen özelliğin tanımlayıcısının değerini metinsel bir açıklama ile değiştirir.

Örneğin SymbolInfoDouble()'dan veri alırken, işlevden hangi değeri almak istediğinizi belirten tanımlayıcının sayısal değerini kullanabilirsiniz. Ancak bunun için işlevde yerine koymanız gereken tanımlayıcının değerini hatırlamanız gerekir. Sizi sürekli yardıma bakmaktan kurtarmak veya MQL'deki her bir işlevin her bir tanımlayıcısının değerlerini ezberlemenizi önlemek için, adlandırılmış numaralandırma sabitleri tanıtılır. Mevcut Satış fiyatının değerini almak için, mevcut sembol için veri talep ederken 4'e eşit tanımlayıcı değeri yazmanız gerekir: SymbolInfoDouble(NULL,4) veya herkes için net bir şekilde yazmanız gerekir: SymbolInfoDouble(NULL,SYMBOL_ASK);

SYMBOL_ASK'nin mevcut Satış fiyatı değil de 4 döndürmesinden neden memnunsunuz ve çelişkili değilsiniz?

O zaman neden kendinizi grafik dönemlerinin tanımlayıcılarına eklediniz? Geliştiricilerin buna ihtiyacı vardı. Kendi iç sebeplerinden dolayı. Sizin için bir tanımlayıcı adı var, örneğin PERIOD_H4. Geliştirici tarafından bir nedenden dolayı kendisine tam olarak hangi sayısal değerin atandığını umursamamalısınız. Bir sabit için size bir isim (sayısal bir değerin metinsel olarak değiştirilmesi) verildi - bunu rahatınız için kullanın. Ama bu sabitin değerini hesaplamalarınızda kullanmak, kusura bakmayın, saçmalık. Bu adlandırılmış sabit, hangi grafikten veri almak istediğinizi belirtmek için kullanılır. Ancak grafik dönemini döndürmez. Başka amaçlar için kullanılır - hayatınızı kolaylaştırmak, bir işleve ne döndürmesi gerektiğini söylemek.

Bir periyottaki dakika sayısına ihtiyacınız varsa, bunu bir periyottaki saniye sayısından 60'a bölün. Ve koltuk değneği olmayanlara koltuk değneği demeyin. Koltuk değnekleri, yaptığınız şey - hesaplamalarınızda sayıların adlarını kullanmaya çalışmak.

Teneke...

 
Vadim Lin :

Neden?... Aynı doğrunun bu tür her kesişiminde mantığı ikiye katlamakla ilgiliyse, o zaman doğal olarak tüm mantık (ki ben yazmadım) doğrudan bir kişi tarafından yazılmalıdır. Son hedeflerini bilmiyorum, belki fiyatın her çizgiyi geçerken kaç kez geçtiğini saymak istiyor...

Bir insanın kendi amaçları için böyle bir olay elde edemeyeceğini anladım. Şimdi böyle bir olay alacak ve sonra kendi takdirine bağlı olarak.


İlk kesişme noktasında çizginin kendisini belirli bir formatta yeniden adlandırmak (veya bu şeklin açıklamasına bir tür etiket koymak) mantıklı olacaktır. Ve tüm nesneleri geçerken, bu etiketin bulunmadığı satırı kontrol edin.

Her işarette tüm nesneler üzerinde yineleme yapmanın verimsizliğinden bahsediyorsak, bu tamamen farklı bir konudur.

Yaza girmek üzere olan ve batacak olan eski işlevleri kullanıyorsunuz. Ve bundan gelen kod, platformlar arası değildir, ancak herhangi bir platformda değişiklik yapmadan çalışmasını sağlamak kolaydı.

Evet ve yeniden adlandırma - bu hala eğlenceli. Göstergenin verdiği satır adlarına bakmanız, açık tanımlayıcılarını onlardan ayırmanız ve gerekli satırları bulmak için kullanmanız yeterlidir.

 
Vadim Lin :

Çok teşekkürler! Yardımcı olan wchar_t oldu! Bunu okudum, karakterin aksine karakter başına 2 bayt depolar.

Doğru, fonksiyon parametresi "str" hala kendisine atanan değeri döndürmüyor ... Acaba neden? ..

Muhtemelen, işlevden dönüş değerini döndürmeniz gerektiğinden.

 extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)
{
   wchar_t wcs[ 256 ];
   wcscpy(wcs, str);

   wchar_t* addStr = L " --- Привет! ---" ;
   
   wchar_t* res = wcsncat(wcs, addStr, wcslen(addStr) + 1 );
   
   return (res);
}
 
Artyom Trishkin :

Yaza girmek üzere olan ve batacak olan eski işlevleri kullanıyorsunuz. Ve bundan gelen kod, platformlar arası değildir, ancak herhangi bir platformda değişiklik yapmadan çalışmasını sağlamak kolaydı.

Evet ve yeniden adlandırma - bu hala eğlenceli. Göstergenin verdiği satır adlarına bakmanız, açık tanımlayıcılarını onlardan ayırmanız ve gerekli satırları bulmak için kullanmanız yeterlidir.

Düzenleme için teşekkürler!

Gerçekten de, son birkaç yıldır MQL4'te nispeten nadiren programlama yapıyorum ve neredeyse hiç MQL5'e tırmanmadım. Bu nedenle, bazı yöntemlerin modası geçmiş olduğunu tamamen kabul ediyorum (ama yine de çalışıyorum!).

Нужно просто поглядеть какие имена линий выдаёт индикатор, вычленить из них их явный идентификатор

Tabii ki, ama sen değil, ben değil - bu satırların adlarının özelliklerini bilmiyoruz. Bu tür seviyelerin "ezberlenmesi" de bir seçenektir, ancak daha sonra "ezberlememizin" sonuçlarını bir dosyada bir yere kaydetmek gerekir ve bu olmadan, terminal çökerse, neler olduğuna dair tamamen belirsiz bir resim olacaktır. . Yeniden adlandırma en azından bu sorunu kapatacaktır, ancak bu en iyi yol olmayabilir.

Yanılıyor olabilirim, ancak kişi aynı anda 100 satıra kadar kullanıldığını ve sadece satırların kullanıldığını ve grafikte başka bir şey olmadığını yazdı. Tüm hatlar, anladığım kadarıyla, kavşaklar için izlenmelidir. Bu nedenle, isimlerden ne "yalıtacaksınız" bilmiyorum))

 
Artyom Trishkin :


İşin aslı, _Period değişkeninin zaman aralığı değerleri döndürmesi gerektiğidir.
Ve sabitler, yalnızca enum sabitleriyle değil, dönem değerleriyle eşleşmelidir.
Aksi takdirde, ek işlevler tarafından dönüştürülmeden zaman çerçevesinin değerini hızlı bir şekilde elde etmek için özel olarak tasarlanmış bu değişikliğin anlamı kaybolur.

 
Vadim Lin :

Düzenleme için teşekkürler!

Gerçekten de, son birkaç yıldır MQL4'te nispeten nadiren programlama yapıyorum ve neredeyse hiç MQL5'e tırmanmadım. Bu nedenle, bazı yöntemlerin modası geçmiş olduğunu tamamen kabul ediyorum (ama yine de çalışıyorum!).

Tabii ki, ama sen değil, ben değil - bu satırların adlarının özelliklerini bilmiyoruz. Bu tür seviyelerin "ezberlenmesi" de bir seçenektir, ancak daha sonra "ezberlememizin" sonuçlarını bir dosyada bir yere kaydetmek gerekir ve onsuz, terminal çökerse, neler olduğuna dair tamamen belirsiz bir resim olacaktır. . Yeniden adlandırma en azından bu sorunu kapatacaktır, ancak bu en iyi yol olmayabilir.

Yanılıyor olabilirim, ancak kişi aynı anda 100 satıra kadar kullanıldığını ve sadece satırların kullanıldığını ve grafikte başka bir şey olmadığını yazdı. Tüm hatlar, anladığım kadarıyla, kavşaklar için izlenmelidir. Bu nedenle, isimlerden ne "yalıtacaksınız" bilmiyorum))

Terminal çökerse, yeniden başlatılması gerekecek. Göstergenin grafiğe yeniden eklenmesi veya Uzman Danışmanın bu göstergenin verileri kullanılarak başlatılması gerekecektir (daha sonra Uzman Danışman, erişirken bu göstergeyi kendisi yükleyecektir). Bu durumda (ve hatta çizelgede kurulu programların otomatik olarak yüklenmesiyle terminalin düzenli olarak yeniden başlatılmasıyla), gösterge tüm çizgilerini tekrar çizecektir - hiçbir yere hiçbir şey kaydetmeye gerek yoktur. Bu satırlar daha sonra tekrar okunabilir. Özellikle de okunmaları gerektiğinden.

Ve EA'nın yalnızca gösterge tarafından oluşturulan satırları izlemesi için, oluşturduğu satırların adlarına bakıp, adlarda yinelenen alt dizeler bulmaya çalışması yeterlidir - tüm satırlar için aynıdır. İşte bu alt dizelerde ve gerekli satırları arayın.

Çok basit - gösterge çalışırken nesnelerin listesine bakmanız yeterlidir.

 
Roman :

İşin aslı, _Period değişkeninin zaman aralığı değerleri döndürmesi gerektiğidir.
Ve sabitler, yalnızca enum sabitleriyle değil, dönem değerleriyle eşleşmelidir.
Aksi takdirde, ek işlevler tarafından dönüştürülmeden zaman çerçevesinin değerini hızlı bir şekilde elde etmek için özel olarak tasarlanmış bu değişikliğin anlamı kaybolur.

Her yerde insanları karıştırdınız, atlar... Sadece bu konuda değil. Önerilerinize göre değişiklikler yapılırsa, şimdiye kadarki tüm işçilerin yarısı basitçe ölecek.

Sadece kene boyutunu nokta boyutuyla eşitlemek bir şeye değer ...

 
Roman :

Bu yüzden matematiksel hesaplamalarınızda _Period değişkeninin H1 üzerindeki periyotlarda döndürdüğü değeri kullanmayı deneyin.
Ve kimin hata yaptığını hemen anlayacaksınız.

Hemen hemen her danışmanda kullanıyorum. Artık komik değil. Üzgünüm, bunu ilk defa görüyorum.
 
Artyom Trishkin :

Her yeri karıştırdınız, atlar... Sadece bu konuda değil. Önerilerinize göre değişiklikler yapılırsa, şimdiye kadarki tüm işçilerin yarısı basitçe ölecek.

Sadece kene boyutunu nokta boyutuyla eşitlemek bir şeye değer ...

Çünkü başlangıçta mevcut gerçeklerle birçok tutarsızlık var.
Ve bu tutarsızlıklar için bahaneler bulmaya çalışıyorsunuz.
Aksine, bir kene bir noktaya eşit olmadığını yazdım!
Bu sizin içsel, icat edilmiş noktanızdır.
Point'in sadece dört karakterin olduğu noktaya tam olarak karşılık gelmesi nedeniyle.
Ama beşinci haneyi girdikten sonra bahanelerinizle isim icat etmeye başladınız.