OpenCL : tests de l'implémentation interne dans MQL5 - page 65

 
fyords: Dans les rapports, cliquez avec le bouton droit de la souris sur "Affichage", dans une nouvelle fenêtre, cliquez sur "Requête" et le journal est correctement chronométré, et il est plus facile à lire (pour moi).

Merci, je n'avais pas réalisé que vous ouvriez un rapport.

Le gain a été encore plus important.

Je suis stupéfait : c'est une carte économique pour moins de 80 $ ! NVidia a donc fait un travail sérieux sur le pilote.

 

Et voici les nouveaux résultats :

2012.06.01 09:25:23     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     ========================================
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     CPU time = 421203 ms
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Result on Cpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     -------------------------
2012.06.01 09:32:28     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Device number = 0
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     GPU time = 11263 ms
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     CpuTime/GpuTime = 37.39705229512563
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Result on Gpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     ------------
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Device number = 1
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     GPU time = 998 ms
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     CpuTime/GpuTime = 422.0470941883768
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Result on Gpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     ------------

Je comprends : 1. pure CPU, 2. CPU avec OpenCL, 3. GPU avec OpenCL ?

Et c'est toujours 422.

Mathemat:

Je suis étonné : c'est une carte économique qui coûte moins de 80 $ ! NVidia a donc travaillé très dur sur le pilote.

Et comme je suis étonné, de la crasse à la richesse. On a l'impression que NVidia lit ce forum, fait des tests similaires, trouve des bogues et les corrige.

Si seulement le testeur pouvait choisir ce sur quoi il veut simuler, c'est-à-dire sans l'écriture forcée de code, ce serait très bien. Pourtant, 1 seconde (ou 11 secondes si la vidéo ne permet pas ou n'est pas disponible) contre 7 minutes, c'est de la puissance.

 
Pour effectuer des tests avec une petite marge d'erreur, il existe une bonne méthode consistant à effectuer une série de mesures et à faire la moyenne des résultats ou à écarter l'extrême. Mais, bien sûr, il est préférable d'augmenter la quantité de calcul pour stabiliser le résultat.

Les systèmes d'exploitation modernes et les processeurs réellement multi-cœurs ont sérieusement supprimé le problème de la dispersion des mesures via GetTickCount. Mon commentaire initial concernait uniquement l'affirmation erronée "l'erreur moyenne de GetTickCount est au moins de quelques dizaines de ms".
 
Attention aux propriétaires de processeurs Intel ! Lors de l'installation du pilote nVidia 301.42, les pilotes OpenCL pour le CPU sont automatiquement installés,

dans le registre, ça ressemble à ça :

[HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors]
"nvcuda.dll"=dword:00000000
"amdocl.dll"=dword:00000000
"amdocl64.dll"=dword:00000000

"IntelOpenCL64.dll"=dword:00000000

Ils sont environ 1,5 fois plus lents (surligné en rouge) que le pilote natif d'Intel (surligné en vert).

Vous pouvez supprimer les valeurs de registre correspondantes, mais conservez la branche au cas où.

 

Cher Admin. Je ne suis pas allé sur votre forum depuis un moment, j'ai peut-être manqué ce point.

Y aura-t-il une mise en œuvre de l'abandon des cartes vidéo aux besoins du cloud ?

 
ilovebtc:

Cher Admin. Je ne suis pas allé sur votre forum depuis un moment, j'ai peut-être manqué ce point.

Y aura-t-il une mise en œuvre du changement de carte vidéo pour les besoins du cloud ?

Presque terminé https://www.mql5.com/ru/forum/23/page15#comment_201948

19. MetaTester : Ajout de la prise en charge de l'utilisation de programmes OpenCL dans les agents de test.

Les programmes OpenCL sont destinés à effectuer des calculs sur des cartes vidéo qui prennent en charge OpenCL 1.1 ou plus. Les cartes vidéo modernes contiennent des centaines de petits processeurs spécialisés capables d'effectuer simultanément des opérations mathématiques simples sur des flux de données entrants. Le langage OpenCL se charge de l'organisation de ces calculs parallèles et offre une grande rapidité pour une certaine catégorie de tâches.
Après les tests, nous allons activer OpenCL dans un réseau distribué.
 
fyords: D'après ce que j'ai compris : 1. CPU pur, 2. CPU avec OpenCL, 3. GPU avec OpenCL ?

Oui, c'est vrai.

Pourriez-vous exécuter le script ci-joint et afficher les résultats ? C'est vraiment intéressant.

N'ayez pas peur d'un grand nombre de chiffres. Ils sont juste là pour vérifier l'exactitude des calculs.

Le script passe également en revue tous les appareils. La tâche principale consiste à multiplier deux grandes matrices.

Les paramètres ne peuvent être modifiés que dans le code - la taille linéaire des matrices _size dans cette ligne :

#define _size       2000

Ne les changez que si vous manquez de mémoire. Un signe de cela est l'écart entre les chiffres des tableaux lorsqu'ils sont exécutés sur un GPU discret : si la différence entre les chiffres est supérieure à 10^(-4), il s'agit d'une erreur évidente. Mais vous semblez avoir assez de mémoire.

Dossiers :
 

Par exemple, j'ai une carte graphique Radeon 6930 qui possède 1280 processeurs de flux. Comment apparaîtra-t-il dans la liste des agents ? Comme 1 dispositif, ou tous les 1280.

Il est plusieurs fois plus rapide à lui seul que 10 processeurs, et le bonus n'est pas pour un dispositif supplémentaire.

 
Mathemat:

Pourriez-vous exécuter le script ci-joint et afficher les résultats ? C'est vraiment intéressant.

Non, ce n'est pas ennuyeux. Je suis moi-même curieux de le savoir. Je n'ai rien changé dans les paramètres.

2012.06.02 09:28:27     vect_v2_all_devices (EURUSD,D1) =======================================
2012.06.02 09:28:27     vect_v2_all_devices (EURUSD,D1) OCL martices mul:         ROWS1 = 2000; COLSROWS = 2000; COLS2 = 2000
2012.06.02 09:30:31     vect_v2_all_devices (EURUSD,D1) CPUTime = 124.504
2012.06.02 09:30:31     vect_v2_all_devices (EURUSD,D1) ---------------
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) read = 4000000 elements
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) Device = 0: time = 2.824 sec.
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) CPUTime / GPUTotalTime = 44.088
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1968,1939 ) = -5.27639246;    thirdCPU[ 1968,1939 ] = -5.27639246;    buf[ 1968,1939 ] = -5.27639198
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 585,810 ) = 3.74615073;    thirdCPU[ 585,810 ] = 3.74615073;    buf[ 585,810 ] = 3.74614906
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1131,1732 ) = -4.46934557;    thirdCPU[ 1131,1732 ] = -4.46934557;    buf[ 1131,1732 ] = -4.46934605
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 587,999 ) = -4.46048546;    thirdCPU[ 587,999 ] = -4.46048546;    buf[ 587,999 ] = -4.46048260
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 983,1903 ) = 3.42076445;    thirdCPU[ 983,1903 ] = 3.42076445;    buf[ 983,1903 ] = 3.42076564
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1927,313 ) = 5.62960339;    thirdCPU[ 1927,313 ] = 5.62960339;    buf[ 1927,313 ] = 5.62960196
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 355,1897 ) = 5.86679220;    thirdCPU[ 355,1897 ] = 5.86679220;    buf[ 355,1897 ] = 5.86678505
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1455,1651 ) = -3.67937088;    thirdCPU[ 1455,1651 ] = -3.67937088;    buf[ 1455,1651 ] = -3.67936754
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1207,856 ) = 1.30920172;    thirdCPU[ 1207,856 ] = 1.30920172;    buf[ 1207,856 ] = 1.30920100
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1699,575 ) = 2.55669522;    thirdCPU[ 1699,575 ] = 2.55669522;    buf[ 1699,575 ] = 2.55669498
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) ________________________
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) read = 4000000 elements
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) Device = 1: time = 1.514 sec.
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) CPUTime / GPUTotalTime = 82.235
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 407,514 ) = -3.69270682;    thirdCPU[ 407,514 ] = -3.69270682;    buf[ 407,514 ] = -3.69270515
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1421,1902 ) = -7.43944120;    thirdCPU[ 1421,1902 ] = -7.43944120;    buf[ 1421,1902 ] = -7.43943167
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1197,1072 ) = -1.49989450;    thirdCPU[ 1197,1072 ] = -1.49989450;    buf[ 1197,1072 ] = -1.49989557
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1249,1056 ) = -0.22817086;    thirdCPU[ 1249,1056 ] = -0.22817086;    buf[ 1249,1056 ] = -0.22817032
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 385,1856 ) = 3.88903213;    thirdCPU[ 385,1856 ] = 3.88903213;    buf[ 385,1856 ] = 3.88902068
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 952,488 ) = 0.37963703;    thirdCPU[ 952,488 ] = 0.37963703;    buf[ 952,488 ] = 0.37963703
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 345,1572 ) = 2.28500485;    thirdCPU[ 345,1572 ] = 2.28500485;    buf[ 345,1572 ] = 2.28500390
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1928,468 ) = -1.35805547;    thirdCPU[ 1928,468 ] = -1.35805547;    buf[ 1928,468 ] = -1.35805535
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1881,1968 ) = -3.12033391;    thirdCPU[ 1881,1968 ] = -3.12033391;    buf[ 1881,1968 ] = -3.12033129
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1454,575 ) = 5.97233009;    thirdCPU[ 1454,575 ] = 5.97233009;    buf[ 1454,575 ] = 5.97232151
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) ________________________

Je ne comprends pas les chiffres. Pouvez-vous expliquer ? Au moins sur les doigts : c'est bon ou pas ? Ils sont différents d'un appareil à l'autre, et sur les lignes de 5-6 chiffres après le point décimal est déjà différent dans les endroits.

Je pense avoir compris : il s'agit d'un test multiple sur des opérations répétées, le temps final est la moyenne pour chaque appareil. N'est-ce pas ?

 
fyords: Seulement, je ne comprends rien à ces chiffres. Pouvez-vous expliquer ? Juste sur vos doigts : c'est bon ou pas ? Ils sont différents d'un appareil à l'autre, et sur les lignes de 5-6 chiffres après le point décimal est déjà différent dans les endroits.
sum( 407,514 ) = -3.69270682;    thirdCPU[ 407,514 ] = -3.69270682;    buf[ 407,514 ] = -3.69270515

Ce ne sont que des chiffres de contrôle. S'ils coïncident avec 0,00001, tout est OK. Les indices sont choisis au hasard - il s'agit d'une vérification aléatoire pour s'assurer que les calculs sont corrects. Eh bien, nous n'allons pas imprimer ici les résultats d'une vérification complète des 4 millions d'éléments de la matrice résultante, n'est-ce pas ?

Je pense avoir compris : c'est un test multiple sur des opérations répétées, le temps final est la moyenne pour chaque appareil. N'est-ce pas ?

Non, il s'agit d'une seule opération de multiplication de deux grandes matrices.

En termes de chiffres de performance : très bon pour cette carte. Maintenant, mes résultats. Périphériques (de bas en haut - ordre d'initialisation) :

2012.06.02 05:49:25     OpenCL  CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))
2012.06.02 05:49:25     OpenCL  GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.06.02 05:49:25     OpenCL  CPU: Intel(R) Corporation  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version 1.1)

C'est-à-dire d'abord un CPU Intel avec le moteur OCL d'Intel, puis ma dinosaure HD 4870, et enfin une pierre à nouveau mais avec le moteur AMD. Script :

2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1477,98 ) = -5.84002066;    thirdCPU[ 1477,98 ] = -5.84002066;    buf[ 1477,98 ] = -5.84001255
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1339,1186 ) = 0.59214997;    thirdCPU[ 1339,1186 ] = 0.59214997;    buf[ 1339,1186 ] = 0.59215009
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1410,1861 ) = -0.27033439;    thirdCPU[ 1410,1861 ] = -0.27033439;    buf[ 1410,1861 ] = -0.27033412
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1282,459 ) = -0.87189484;    thirdCPU[ 1282,459 ] = -0.87189484;    buf[ 1282,459 ] = -0.87189591
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 710,1645 ) = 4.86117268;    thirdCPU[ 710,1645 ] = 4.86117268;    buf[ 710,1645 ] = 4.86116362
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 526,938 ) = 0.94805324;    thirdCPU[ 526,938 ] = 0.94805324;    buf[ 526,938 ] = 0.94805157
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 914,489 ) = 5.58242941;    thirdCPU[ 914,489 ] = 5.58242941;    buf[ 914,489 ] = 5.58243275
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 811,257 ) = -1.11584055;    thirdCPU[ 811,257 ] = -1.11584055;    buf[ 811,257 ] = -1.11583853
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 318,498 ) = 1.62952971;    thirdCPU[ 318,498 ] = 1.62952971;    buf[ 318,498 ] = 1.62952805
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 648,1434 ) = -5.57316303;    thirdCPU[ 648,1434 ] = -5.57316303;    buf[ 648,1434 ] = -5.57315731
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 29.879
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) Device = 2: time = 3.105 sec.
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 684,439 ) = 0.21124490;    thirdCPU[ 684,439 ] = 0.21124490;    buf[ 684,439 ] = 0.21124732
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 795,204 ) = -1.68047857;    thirdCPU[ 795,204 ] = -1.68047857;    buf[ 795,204 ] = -1.68047154
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 579,1503 ) = 2.46559286;    thirdCPU[ 579,1503 ] = 2.46559286;    buf[ 579,1503 ] = 2.46558809
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 675,1504 ) = 0.44935751;    thirdCPU[ 675,1504 ] = 0.44935751;    buf[ 675,1504 ] = 0.44935691
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1251,1415 ) = -2.85569835;    thirdCPU[ 1251,1415 ] = -2.85569835;    buf[ 1251,1415 ] = -2.85569715
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 204,1755 ) = 0.31420049;    thirdCPU[ 204,1755 ] = 0.31420049;    buf[ 204,1755 ] = 0.31420231
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1999,74 ) = -2.22978306;    thirdCPU[ 1999,74 ] = -2.22978306;    buf[ 1999,74 ] = -2.22977948
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 436,657 ) = 0.59192652;    thirdCPU[ 436,657 ] = 0.59192652;    buf[ 436,657 ] = 0.59192693
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 967,922 ) = -4.91348410;    thirdCPU[ 967,922 ] = -4.91348410;    buf[ 967,922 ] = -4.91348314
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1489,1175 ) = -2.48868656;    thirdCPU[ 1489,1175 ] = -2.48868656;    buf[ 1489,1175 ] = -2.48868561
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 179.795
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) Device = 1: time = 0.516 sec.
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 303,1215 ) = -7.46387863;    thirdCPU[ 303,1215 ] = -7.46387863;    buf[ 303,1215 ] = -7.46388054
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1173,1406 ) = -5.64940453;    thirdCPU[ 1173,1406 ] = -5.64940453;    buf[ 1173,1406 ] = -5.64940882
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1617,1405 ) = -0.98162729;    thirdCPU[ 1617,1405 ] = -0.98162729;    buf[ 1617,1405 ] = -0.98162866
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 760,1003 ) = -0.97699410;    thirdCPU[ 760,1003 ] = -0.97699410;    buf[ 760,1003 ] = -0.97699606
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 679,793 ) = -5.41226530;    thirdCPU[ 679,793 ] = -5.41226530;    buf[ 679,793 ] = -5.41227150
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1345,1865 ) = 0.95630527;    thirdCPU[ 1345,1865 ] = 0.95630527;    buf[ 1345,1865 ] = 0.95630503
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1289,1659 ) = -3.82919979;    thirdCPU[ 1289,1659 ] = -3.82919979;    buf[ 1289,1659 ] = -3.82920074
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1216,1759 ) = 4.87398672;    thirdCPU[ 1216,1759 ] = 4.87398672;    buf[ 1216,1759 ] = 4.87398672
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1268,1060 ) = 2.78621030;    thirdCPU[ 1268,1060 ] = 2.78621030;    buf[ 1268,1060 ] = 2.78621435
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1686,577 ) = -4.36586094;    thirdCPU[ 1686,577 ] = -4.36586094;    buf[ 1686,577 ] = -4.36585188
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 22.783
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) Device = 0: time = 4.072 sec.
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:10     vect_v2_all_devices (EURUSD,H1) ---------------
2012.06.02 07:38:10     vect_v2_all_devices (EURUSD,H1) CPUTime = 92.774
2012.06.02 07:36:37     vect_v2_all_devices (EURUSD,H1) OCL martices mul:         ROWS1 = 2000; COLSROWS = 2000; COLS2 = 2000
2012.06.02 07:36:37     vect_v2_all_devices (EURUSD,H1) =======================================
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5