[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 452

 
7777877:

En d'autres termes, si je comprends bien : quel que soit le tableau (y compris le tableau de timeseries) que je copie à l'aide de la fonction ArrayCopy vers un tableau USER, je dois le "traiter" avec la fonction ArraySetAsSeries avec une valeur égale à true pour que ce tableau utilisateur devienne un tableau de timeseries ?

exactement
 

Chers programmeurs, s'il vous plaît aidez-moi à écrire un code avec le principe suivant - Signal BUY - ouvrir laposition BUY 1.SL.TP.transfert au Breakeven

Signal SELL - ouverture de la position SELL 1. SL.TP.transfert vers le sans perte . BUY - s'il y a une position ouverte BUY 1 et SELL 1, nous ouvrons BUY 2. Signal de VENTE - s'il y a des positions ouvertes BUY 1 et BUY 1 alors nous ouvrons SELL 2. Signal d'achat - s'il y a des positions ouvertes VENDRE 1. ACHETER 1. VENTE 2. puis fermeture de la VENTE 2. ouverture de l'ACHAT 2. Signal de VENTE - s'il y a des BUY ouverts 1. VENTE 1. ACHETER 2. alors nous fermerons ACHETER 2. ouvrir VENTE 2. Le marché ne doit pas fonctionner plus de 3 ordres. Si quelqu'un peut aider, merci beaucoup.

 
Sepulca:

Ne vous embêtez pas avec les tableaux dynamiques, précisez à l'avance, avec une réserve, ou vous n'avez pas assez de mémoire ?

Ma mémoire est acceptable, mais ce n'est pas le sujet ici :)

Quel est l'intérêt de spécifier un tableau avec un nombre potentiellement énorme d'éléments, s'il y en aura beaucoup moins ?

Après tout, en créant un tableau, celui-ci occupera déjà une partie de la mémoire d'exploitation.

 
ilunga:
exactement

J'ai modifié un peu le script :

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

Le résultat est le suivant :


Une question s'est naturellement posée : Dans ce cas, j'ai copié les données des barres du graphique actuel dans un tableau bidimensionnel array1 en utilisant la fonction ArrayCopyRates(array1). Puis dans la ligne suivante avec la fonction ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) j'ai copié les données de array1 dans array2. Ensuite, en utilisant la fonction ArrayGetAsSeries, j'ai vérifié si array2 est un array-timeseries. Et il s'est avéré (comme vous pouvez le voir sur la capture d'écran), que le tableau est un tableau de séries temporelles, même si je ne l'avais pas "traité" avec la fonction ArraySetAsSeries auparavant.

Question: pourquoi dans le premier cas (question précédente) j'ai dû utiliser la fonction ArraySetAsSeries (pour que mon tableau soit organisé comme un tableau de séries temporelles), alors que dans ce cas je n'ai pas besoin d'un tel traitement.

P.S. Désolé d'insister, je veux juste bien comprendre, afin de ne pas laisser de "trous dans l'histoire". Merci pour toutes les réponses précédentes.

 

Je n'arrive pas à comprendre, ou je suis bête ....

En théorie, il devrait être de 0,3, mais pour une raison quelconque, il est de 0,00. ....

  Comment(3/10);

Donne aussi 0... Alors comment obtenir des nombres fractionnaires ? ????

int start()
  {
double t;
t=3/10;
   Comment(t);

   return(0);
  }

également zéro ....

Je ne sais pas quel genre de tambourin sauter avec .......

 
VOLDEMAR:

Je n'arrive pas à comprendre, ou je suis bête ....

En théorie, il devrait être de 0,3, mais pour une raison quelconque, il est de 0,00. ....

Donne aussi 0... Alors comment obtenir des nombres fractionnaires ? ????

également zéro ....

Je ne sais pas quel genre de tambourin sauter avec .......

Lisez la documentation 3 fois par jour pendant 4 à 5 heures. Et seulement après, sautez avec un tambourin.

3.0/10.0

 

Vous savez pourquoi ?

Peut-être devrions-nous créer des manuels scolaires adéquats ?

Peut-être faire une formation adéquate ???

Vous devriez peut-être écrire ces choses quelque part ?

Peut-être qu'alors les questions disparaîtront ?

Et vous n'aurez plus à répondre à 100500 questions stupides !

Si de telles questions se posent, ce n'est pas la faute de l'élève, c'est votre faute ! Vous ne l'avez décrit nulle part ! !!

Ce n'est pas écrit dans l'aide, il n'est pas écrit comment traduire de int en double.

mais il est dit que si vous assignez le type double à int, la partie fractionnaire sera effacée,

Une personne normale conclurait logiquement que si int est assigné à double, seul un point avec un nombre donné de zéros sera ajouté...

Donc c'est comme ça ....

 
Roger:

Remplacer

à


Merci beaucoup, je vais l'essayer !
 
VOLDEMAR:

Vous savez pourquoi ?
On devrait peut-être faire des tutoriels adéquats.
Peut-être faire un enseignement adéquat ?


Ces questions ne sont pas pour moi. Je suis un utilisateur. Tout comme vous.

Peut-être que tu devrais écrire ces choses quelque part.

Eh bien, je vous ai montré où c'est écrit.

Peut-être que les questions disparaîtront alors ?

Non, ils ne vont pas disparaître. Je vous assure.

Et vous n'aurez plus à répondre à 100500 questions stupides !
Si de telles questions se posent, ce n'est pas la faute de l'élève, c'est votre faute ! Vous ne l'avez décrit nulle part ! !!

Ces questions ne sont pas pour moi. Je suis un utilisateur. Tout comme vous.

Ce n'est pas écrit dans l'aide, il n'est pas écrit comment traduire de int en double.
mais il est dit que si vous assignez le type double à int , alors la partie fractionnaire sera effacée,

une personne normale comprendrait logiquement que lorsque l'on assigne un nombre int à un nombre double, alors seul un point avec un nombre donné de zéros sera ajouté...


Oui, l'affectation fonctionne dans les deux sens.

Sauf que vous n'avez pas poussé plus loin votre logique.

Si tu voulais être logique, tu ne pouvais pas faire deux choses à la fois. Vous auriez dû d'abord attribuer un nombre au double et seulement ensuite le diviser par un autre nombre. Mais c'est l'inverse. Tôt ou tard, vous y auriez pensé.