3600 karakter, büyük ve ciddi programlar için son derece küçüktür.
Sanırım birçoğu benimle aynı fikirde olacak.
Program açıklamaları en az 5.000 - 10.000 karakter gerektirir. Peki veya program ayarlarının adıyla son sekmede
Moderatör her zaman suyun çıkarılmasını isteyebilir.
Şu anda programın bir açıklamasını yazıyorum, 3600 karakterin hepsini sadece ayarları açıklamak için kullandım ve olasılıkların yarısını bile açıklamadım ...
Vladimir, hiç bir şey aldın mı? Talimatları okumak için ne kadar zaman harcadınız?
Çok ciltli bir Talmud'u kimse okumaz, 3-5 dakikadan uzun videolar bile izlenmez. Tek bir çıkış yolu var - şimdi hemen hemen her yerde yapıldığı gibi program arayüzünde ipuçları vermek. Etkileşimli bir giriş gibi. İleri düzey kullanıcılar için ayrıntılı talimatlar bir blogda veya web sitenizde yayınlanabilir. Kim bulmak ve indirmek ister.
3600 karakter, büyük ve ciddi programlar için son derece küçüktür.
Sanırım birçoğu benimle aynı fikirde olacak.
Program açıklamaları en az 5.000 - 10.000 karakter gerektirir. Peki veya program ayarlarının adıyla son sekmede
Moderatör her zaman suyun çıkarılmasını isteyebilir.
Şu anda programın bir açıklamasını yazıyorum, 3600 karakterin hepsini sadece ayarları açıklamak için kullandım ve olasılıkların yarısını bile açıklamadım ...
Vladimir, hiç bir şey aldın mı? Talimatları okumak için ne kadar zaman harcadınız?
Çok ciltli bir Talmud'u kimse okumaz, 3-5 dakikadan uzun videolar bile izlenmez. Tek bir çıkış yolu var - şimdi hemen hemen her yerde yapıldığı gibi program arayüzünde ipuçları vermek. Etkileşimli bir giriş gibi. İleri düzey kullanıcılar için ayrıntılı talimatlar bir blogda veya web sitenizde yayınlanabilir. Kim ister - bulun ve indirin.
Okumayanlar ve satın almayanlar, malın ne için olduğunu anlamadan çok mu mal aldınız?
Yukarıdaki kod bir derleyici kusuruna dayanmaktadır.
Sonuç: 1... neden 2 olmasın?
C++, derleme sırasında bir hata bildirirken, her iki işlev de açıkça uyduğundan ve ayrıca sözdizimi, işlevin açıkça çağrılmasına izin vermiyor (2)
Ayrıca, MQL'nin özellikleri göz önüne alındığında, tam tersini yapmak daha mantıklı olacaktır - parametre geçişinin önceliğini değere göre (şimdi olduğu gibi) değil, const referansına göre ayarlamak (avantajları özellikle dizi örneği)
Yerel aracılar kullanılırken paylaşılan klasörde optimizasyon sonuçlarına sahip bir dosya oluşturulur, Yerel Ağ Çiftliği veya MQL5 Bulut Ağı kullanılırken dosya yoktur.
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
Sonuçta bu bir sanat eseri. Montajcı komutunun 4 çağrısı için 8 kök hesaplanır. Bir aramada iki çift sayı hesaplandı.
Bir dizideki işlemler sırasında, çift -> tamsayı indeks dönüşümünde kontroller, dallanma ve kayıplarla her şey normal şekilde gider
Bu örnekte dizilerle çalışırken, performans üzerinde çok kötü bir etkisi olan sürekli bir FPU / ALU karışımı vardır.
Dinamik bir diziye erişimin optimizasyonu övgünün ötesinde mükemmeldir. Ancak FPU/ALU işlemlerini karıştırmak + çift çevirmek -> tamsayı + dallara ayırmak zaman kaybettirir
Genel sonuç: MQL5'teki matematik, mükemmel optimizasyon sayesinde kazanır. Kaybeden diziler değil, matematik kazanır.
İşte tam optimizasyonlarla aynı Visual C ++ 2017 x64 kodunda yaptığım pornografi:
; 52 : int X=pos%Width;
; 53 : int Y= int (pos/Width);
; 54 :
; 55 : D1= sqrt ((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y));
0046 f 0 f 28 c8 movaps xmm1, xmm0
004728 b c3 mov eax, ebx
0047499 cdq
00475450 f 57 db xorps xmm11, xmm11
00479 f7 ff idiv edi
0047 b 0 f 57 f6 xorps xmm6, xmm6
0047 e 410 f 28 c4 movaps xmm0, xmm12
00482 f2 440 f 2 a d8 cvtsi2sd xmm11, eax
00487 f2 0 f 2 a f2 cvtsi2sd xmm6, edx
0048 b f2 410 f 5 c cb subsd xmm1, xmm11
00490 f2 0 f 5 c c6 subsd xmm0, xmm6
00494 f2 0 f 59 c9 mulsd xmm1, xmm1
00498 f2 0 f 59 c0 mulsd xmm0, xmm0
0049 c f2 0 f 58 c1 addsd xmm0, xmm1
004 a0 e8 00000000 call sqrt
; 56 : D2= sqrt ((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y));
; 57 : D3= sqrt ((X3-X)*(X3-X)+(Y3-Y)*(Y3-Y));
004 a5 410 f 28 cf movaps xmm1, xmm15
004 a9 410 f 28 c6 movaps xmm0, xmm14
004 ad f2 0 f 5 c c6 subsd xmm0, xmm6
004 b1 f2 410 f 5 c cb subsd xmm1, xmm11
004 b6 f2 0 f 59 c0 mulsd xmm0, xmm0
004 ba f2 0 f 59 c9 mulsd xmm1, xmm1
004 be f2 0 f 58 c1 addsd xmm0, xmm1
004 c2 e8 00000000 call sqrt
; 58 : D4= sqrt ((X4-X)*(X4-X)+(Y4-Y)*(Y4-Y));
004 c7 f2 0 f 108 c 2490010000 movsd xmm1, QWORD PTR Y4$ 1 $[rsp]
004 d0 f2 0 f 10842498010000 movsd xmm0, QWORD PTR X4$ 1 $[rsp]
004 d9 f2 410 f 5 c cb subsd xmm1, xmm11
004 de f2 0 f 5 c c6 subsd xmm0, xmm6
004 e2 f2 0 f 59 c9 mulsd xmm1, xmm1
004 e6 f2 0 f 59 c0 mulsd xmm0, xmm0
004 ea f2 0 f 58 c1 addsd xmm0, xmm1
004 ee e8 00000000 call sqrt
; 59 : D5= sqrt ((X5-X)*(X5-X)+(Y5-Y)*(Y5-Y));
; 60 : D6= sqrt ((X6-X)*(X6-X)+(Y6-Y)*(Y6-Y));
; 61 : D7= sqrt ((X7-X)*(X7-X)+(Y7-Y)*(Y7-Y));
; 62 : D8= sqrt ((X8-X)*(X8-X)+(Y8-Y)*(Y8-Y));
004 f3 f2 0 f 10442420 movsd xmm0, QWORD PTR X8$ 1 $[rsp]
004 f9 410 f 28 c8 movaps xmm1, xmm8
004 fd f2 0 f 5 c c6 subsd xmm0, xmm6
00501 f2 410 f 5 c cb subsd xmm1, xmm11
00506 f2 0 f 59 c0 mulsd xmm0, xmm0
0050 a f2 0 f 59 c9 mulsd xmm1, xmm1
0050 e f2 0 f 58 c1 addsd xmm0, xmm1
00512 e8 00000000 call sqrt00517 f2 0 f 104 c 2428 movsd xmm1, QWORD PTR Y2$ 1 $[rsp]
0051 d 410 f 28 c5 movaps xmm0, xmm13
00521 f2 440 f 10442430 movsd xmm8, QWORD PTR Y5$ 1 $[rsp]
00528 f2 410 f 5 c cb subsd xmm1, xmm11
0052 d f2 440 f 10542440 movsd xmm10, QWORD PTR Y6$ 1 $[rsp]
00534 f2 0 f 5 c c6 subsd xmm0, xmm6
00538 f2 440 f 10642450 movsd xmm12, QWORD PTR Y7$ 1 $[rsp]
0053 f f2 450 f 5 c c3 subsd xmm8, xmm11
00544 f2 0 f 107 c 2438 movsd xmm7, QWORD PTR X5$ 1 $[rsp]
0054 a f2 450 f 5 c d3 subsd xmm10, xmm11
0054 f f2 440 f 104 c
2448 movsd xmm9, QWORD PTR X6$ 1 $[rsp]
00556 f2 450 f 5 c e3 subsd xmm12, xmm11
0055 b f2 440 f 105 c
2458 movsd xmm11, QWORD PTR X7$ 1 $[rsp]
00562 f2 0 f 5 c fe subsd xmm7, xmm6
00566 f2 0 f 59 c0 mulsd xmm0, xmm0
0056 a f2 440 f 5 c ce subsd xmm9, xmm6
0056 f f2 0 f 59 c9 mulsd xmm1, xmm1
00573 f2 440 f 5 c de subsd xmm11, xmm6
00578 f2 0 f 58 c1 addsd xmm0, xmm1
0057 c e8 00000000 call sqrt00581 f2 0 f 59 ff mulsd xmm7, xmm7
00585 f2 450 f 59 c0 mulsd xmm8, xmm8
0058 a f2 410 f 58 f8 addsd xmm7, xmm8
0058 f 0 f 28 c7 movaps xmm0, xmm7
00592 e8 00000000 call sqrt00597 f2 450 f 59 c9 mulsd xmm9, xmm9
0059 c f2 450 f 59 d2 mulsd xmm10, xmm10
005 a1 f2 450 f 58 ca addsd xmm9, xmm10
005 a6 410 f 28 c1 movaps xmm0, xmm9
005 aa e8 00000000 call sqrt005 af f2 450 f 59 db mulsd xmm11, xmm11
005 b4 f2 450 f 59 e4 mulsd xmm12, xmm12
005 b9 f2 450 f 58 dc addsd xmm11, xmm12
005 be 410 f 28 c3 movaps xmm0, xmm11
005 c2 e8 00000000 call sqrt005 c7 f2 0 f 10842488010000 movsd xmm0, QWORD PTR Y1$ 1 $[rsp]
; 63 :
; 64 : double d= fabs (D1+D3+D4+D8)/(D1+D2+D3+D4+D5+D6+D7+D8);
MQL5'te oluşturulan kodla koşulsuz çoklu birleştirme.
Şaşırtıcı bir şekilde, MSVC'nin optimizasyon girişimleri bile yok - sanki 20 yıllık bir işlemci için yazıyormuş gibi tüm matematiği kütüphaneler aracılığıyla yürütüyor. Ve AVX komut setinin dahil edilmesi, derleyicinin davranışını hiç değiştirmez.
Ekli C++ dosyasını test edin. "Bir test örneğinde hata var" düşüncesi dile getirilmemelidir, hata yoktur.
Ürün açıklamalarında çok az yer var.
3600 karakter, büyük ve ciddi programlar için son derece küçüktür.
Sanırım birçoğu benimle aynı fikirde olacak.
Program açıklamaları en az 5.000 - 10.000 karakter gerektirir. Peki veya program ayarlarının adıyla son sekmede
Moderatör her zaman suyun çıkarılmasını isteyebilir.
Şu anda programın bir açıklamasını yazıyorum, 3600 karakterin hepsini sadece ayarları açıklamak için kullandım ve olasılıkların yarısını bile açıklamadım ...Vladimir, hiç bir şey aldın mı? Talimatları okumak için ne kadar zaman harcadınız?
Çok ciltli bir Talmud'u kimse okumaz, 3-5 dakikadan uzun videolar bile izlenmez.
Tek bir çıkış yolu var - şimdi hemen hemen her yerde yapıldığı gibi program arayüzünde ipuçları vermek. Etkileşimli bir giriş gibi. İleri düzey kullanıcılar için ayrıntılı talimatlar bir blogda veya web sitenizde yayınlanabilir. Kim bulmak ve indirmek ister.
Ürün açıklamalarında çok az yer var.
3600 karakter, büyük ve ciddi programlar için son derece küçüktür.
Sanırım birçoğu benimle aynı fikirde olacak.
Program açıklamaları en az 5.000 - 10.000 karakter gerektirir. Peki veya program ayarlarının adıyla son sekmede
Moderatör her zaman suyun çıkarılmasını isteyebilir.
Şu anda programın bir açıklamasını yazıyorum, 3600 karakterin hepsini sadece ayarları açıklamak için kullandım ve olasılıkların yarısını bile açıklamadım ...Katılmıyorum. Öz olmak ince zekanın ruhudur.
"Ayrıntılı konuşmanızda duyulacağınızı sanmayın."
Mat. 6:7
Vladimir, hiç bir şey aldın mı? Talimatları okumak için ne kadar zaman harcadınız?
Çok ciltli bir Talmud'u kimse okumaz, 3-5 dakikadan uzun videolar bile izlenmez.
Tek bir çıkış yolu var - şimdi hemen hemen her yerde yapıldığı gibi program arayüzünde ipuçları vermek. Etkileşimli bir giriş gibi. İleri düzey kullanıcılar için ayrıntılı talimatlar bir blogda veya web sitenizde yayınlanabilir. Kim ister - bulun ve indirin.
Okumayanlar ve satın almayanlar, malın ne için olduğunu anlamadan çok mu mal aldınız?
O zaman hepsi bloglarda yayınlayabilir mi?
Katılmıyorum. Öz olmak ince zekanın ruhudur.
"Ayrıntıların içinde duyulacağını sanma."
Mat. 6:7
Katılıyorum ama kısaca 3600 bile yetmez...
Okumayanlar ve satın almayanlar, malın ne için olduğunu anlamadan çok mu mal aldınız?
O zaman hepsi bloglarda yayınlayabilir mi?
Talimatlardan ürünün amacını anladınız mı?
aptallık. Demoyu indirip hissediyorum.
Yukarıdaki kod bir derleyici kusuruna dayanmaktadır.
Sonuç: 1... neden 2 olmasın?
C++, derleme sırasında bir hata bildirirken, her iki işlev de açıkça uyduğundan ve ayrıca sözdizimi, işlevin açıkça çağrılmasına izin vermiyor (2)
Ayrıca, MQL'nin özellikleri göz önüne alındığında, tam tersini yapmak daha mantıklı olacaktır - parametre geçişinin önceliğini değere göre (şimdi olduğu gibi) değil, const referansına göre ayarlamak (avantajları özellikle dizi örneği)
Referansla yapılabiliyorken neden uzun dizeleri değere göre ileteceğiniz (aslında kopyalayacağınız) açık değil.
Derleme sırasında hata
Ve .h dosyasının içeriğini (özellikle de periyodik olarak değişebildiğinden) yalnızca dahil edebiliyorsanız neden manuel olarak aktarın?
İyi günler, söyle bana:
Local Network Farm veya MQL5 Cloud Network kullanırken bir dosyaya optimizasyon sonuçları nasıl yazılır?
OnTester() içinde aşağıdakileri kullanan bir prosedür vardır:
Yerel aracılar kullanılırken paylaşılan klasörde optimizasyon sonuçlarına sahip bir dosya oluşturulur, Yerel Ağ Çiftliği veya MQL5 Bulut Ağı kullanılırken dosya yoktur.
Çek şunu gösterdi:
Bu kod, aşağıdaki montajcı SSE koduna dönüşür:
Sonuçta bu bir sanat eseri. Montajcı komutunun 4 çağrısı için 8 kök hesaplanır. Bir aramada iki çift sayı hesaplandı.
Genel sonuç: MQL5'teki matematik, mükemmel optimizasyon sayesinde kazanır. Kaybeden diziler değil, matematik kazanır.
İşte tam optimizasyonlarla aynı Visual C ++ 2017 x64 kodunda yaptığım pornografi:
MQL5'te oluşturulan kodla koşulsuz çoklu birleştirme.
Şaşırtıcı bir şekilde, MSVC'nin optimizasyon girişimleri bile yok - sanki 20 yıllık bir işlemci için yazıyormuş gibi tüm matematiği kütüphaneler aracılığıyla yürütüyor. Ve AVX komut setinin dahil edilmesi, derleyicinin davranışını hiç değiştirmez.
Ekli C++ dosyasını test edin. "Bir test örneğinde hata var" düşüncesi dile getirilmemelidir, hata yoktur.