Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 178

 
Andrey Dik:

Oui, merci !

Non, mais merci quand même !)
Je ne pensais pas que ça pouvait s'enrayer comme ça... :-)))
 

Bonsoir.

Lorsque vous utilisez iOpen, un décalage est spécifié. S'il n'y a pas assez d'historique pour le shifter spécifié, le iOpen de la barre la plus ancienne est retourné.

Question : Comment puis-je faire un chèque pour un bar avec le shifter spécifié ? Et au cas où il n'y aurait pas assez d'historique, ne pas retourner iOpen ?

 
Sergey:

Bonsoir.

Lorsque vous utilisez iOpen, un décalage est spécifié. S'il n'y a pas assez d'historique pour le shifter spécifié, le iOpen de la barre la plus ancienne est retourné.

Question : Comment puis-je faire un chèque pour une barre avec le shifter spécifié ? Et s'il n'y a pas assez d'historique, pourquoi iOpen ne devrait-il pas être renvoyé ?


CopyOpen

La fonction reçoit les données historiques des prix d'ouverture des barres pour une paire symbole-période spécifiée dans le tableau open_array dans la quantité spécifiée. Il convient de noter que le comptage des éléments à partir de la position de départ est effectué du présent vers le passé, c'est-à-dire que la position de départ égale à 0 signifie la barre actuelle.


Lorsque vous copiez une quantité inconnue de données, nous vous recommandons d'utiliser un tableau dynamique comme tableau cible, car si les données sont inférieures (ou supérieures) à ce que le tableau peut contenir, une tentative sera faite pour remanier le tableau afin que les données demandées puissent y être placées dans leur intégralité.

S'il est nécessaire de copier une quantité connue de données, il est préférable de les copier dans un tampon alloué statiquement pour éviter une surallocation inutile de la mémoire.

Indépendamment de la propriété as_series=true ou as_series=false du tableau récepteur, les données seront copiées de manière à ce que l'élément le plus ancien se trouve au début de la mémoire physique allouée au tableau. Il existe 3 variantes de cette fonction.

Référencement par position de départ et nombre d'éléments requis

intCopyOpen(
stringsymbol_name,// nom du symbole
ENUM_TIMEFRAMEStimeframe,// période
intstart_pos,//où commencer
intcount,// combien nous copions
doubleopen_array[]// tableau pour la copie des prix d'ouverture
) ;

Accès par date de début et nombre d'éléments requis

intCopyOpen(
stringsymbol_name,// nom du symbole
ENUM_TIMEFRAMEStimeframe,// période
datetimestart_time,// à partir de quelle date
intcount,// combien nous copions
doubleopen_array[]// tableau pour la copie des prix d'ouverture
) ;

Accès par date de début et date de fin de l'intervalle de temps requis

intCopyOpen(
stringsymbol_name,// nom du symbole
ENUM_TIMEFRAMEStimeframe,// période
datetimestart_time,// à partir de quelle date
datetimestop_time,// jusqu'à quelle date
doubleopen_array[]// tableau pour la copie des prix d'ouverture
) ;

Paramètres

nom_symbole

[in] Le symbole.

cadre temporel

Période [en].

start_pos

[in] Numéro du premier élément à copier.

compter

[Nombre d'éléments à copier.

heure de début

[in] Heure de la barre correspondant au premier élément à copier.

heure d'arrêt

[in] Le temps de barre correspondant au dernier élément.

tableau_ouvert[]

[out] Tableau de type double.

Valeur retournée

Le nombre d'éléments du tableau copiés ou -1 en cas d'erreur.

Note

Si l'intervalle des données demandées est entièrement en dehors des données disponibles sur le serveur, la fonction renvoie -1. Si des données en dehors de TERMINAL_MAXBARS (nombre maximum de barres sur le graphique) sont demandées, la fonction renvoie également -1.

Si les séries temporelles demandées ne sont pas encore construites ou doivent être téléchargées depuis le serveur, la fonction renvoie immédiatement -1.

Lorsque vous demandez des données à l'Expert Advisor ou à un script, le chargement depuis le serveur sera initié, si le terminal ne dispose pas de ces données localement, ou la construction des séries temporelles requises commencera, si les données peuvent être construites à partir de l'historique local, mais qu'elles ne sont pas encore prêtes. La fonction renverra la quantité de données qui sera prête avant le délai d'attente, mais le chargement de l'historique se poursuivra, et la prochaine demande similaire renverra plus de données.

Lors de la demande de données par date de début et nombre d'éléments requis, seules les données dont la date est inférieure (antérieure) ou égale à celle spécifiée seront retournées. En même temps, l'intervalle est spécifié et pris en compte à la seconde près. Cela signifie que la date d'ouverture de toute barre, pour laquelle la valeur est retournée (volume, spread, valeur dans le tampon de l'indicateur, prix Open, High, Low, Close ou open time Time), est toujours égale ou inférieure à celle spécifiée.

Lors de la demande de données dans la plage de dates spécifiée, seules les données comprises dans l'intervalle demandé seront retournées. L'intervalle est spécifié et pris en compte à la seconde près. Cela signifie que l'heure d'ouverture de toute barre pour laquelle une valeur est renvoyée (volume, spread, valeur dans la mémoire tampon de l'indicateur, prix Open, High, Low, Close ou open time Time), est toujours comprise dans l'intervalle demandé.

Ainsi,si le jour actuel de la semaine est le samedi, en essayant de copier les données sur le cadre hebdomadaire, en spécifiant start_time=Dernier mardi et stop_time=Dernier vendredi, la fonction renverra 0, car l'heure d'ouverture du cadre hebdomadaire tombe toujours le dimanche, mais aucune barre hebdomadaire ne tombe dans la plage spécifiée.

Si nous devons obtenir la valeur correspondant à la barre non finie actuelle, nous pouvons utiliser la première forme de l'appel en spécifiant start_pos=0 et count=1.

 

Salutations.

Messieurs, pouvez-vous me dire comment faire une condition de franchissement de niveaux de prix avec 1-2-3 zéros à la fin ?

 
Andrey Sokolov:

Salutations.

Messieurs, pouvez-vous me dire comment faire une condition de franchissement de niveaux de prix avec 1-2-3 zéros à la fin ?


En comparant la valeur du prix passé et actuel avec ce niveau, si le niveau se situe entre ces valeurs, il y a eu un croisement.
 
Sergey Gritsay:

En comparant le prix passé et le prix actuel avec ce niveau, si le niveau se situe entre ces valeurs, un croisement s'est produit.


Comment puis-je spécifier ces niveaux pour la comparaison ?

Ou - comment puis-je spécifier que le nombre doit avoir le bon nombre de décimales? Pas en arrondissant mais en supprimant.

 
Andrey Sokolov:


Et comment dois-je écrire ces niveaux pour la comparaison ?

Ou - comment puis-je spécifier que le nombre doit avoir le bon nombre de décimales? Pas en arrondissant, mais en supprimant.

Voici la fonction de recherche.

//===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel(int ne=100, string symb="0") {
 if(symb=="0") symb=Symbol();
 static double LastBid;
 double _Level=0, PriceStep=0, bid=0, point=0;
 bid=dBid(symb);
 point=dPoint(symb);
  if(LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level=MathRound(bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
  return(_Level);
 }
Comment( GetUniversalLevel(50) );
 

Sergey Gritsay,Vitaly Muzichenko, merci.

On m'a également suggéré la fonction MathFloor() - Renvoie la valeur numérique entière la plus proche du bas.

 
Vitalie Postolache:

Dig MySQL.
Creuser... intéressant... peut-être que dans quelques mois je rirai de mes questions actuelles, mais je suis encore au début du voyage...

Sergey Gritsay:
Pour cela, vous devez créer un serveur en dehors de votre ordinateur local et transmettre des données via ce serveur. Pour MT, il faut écrire un indicateur ou un conseiller expert pour traiter ces données, ou placer des terminaux sur un serveur VPS et y configurer un copieur de transactions de votre compte vers les comptes de vos amis. Uneautre option consiste à copier vos transactions exécutées sur des niveaux donnéspar le biais d'un service designaux. En général, vous devez tenir compte de vos capacités financières pour commander un logiciel approprié.


MosheDayan:

Laissez-moi vous rappeler la préhistoire. J'ai un indicateur quotidien qui obtient des données à partir de csv et les affiche (niveaux horizontaux) sur un graphique. J'ai créé un serveur à partir de mon ordinateur portable personnel (il est faible mais je n'ai pas besoin de calculs à cet endroit et il me donne des csv et ils sont très petits). Sur le serveur pour la connexion de test versé le moteur de forum habituel - tout semble être visible de l'extérieur. Aidez-nous avec des conseils. Cela devrait être sur le serveur pour lire à partir de lui des fichiers csv indicateurs ? C'est-à-dire comment l'indicateur communique avec la base de données csv ? Peut remplir le moteur serveur fTP ou autre chose et peut pour MT besoin d'ouvrir certains ports spéciaux ? Ou bien j'ai pris la mauvaise direction en général ? Merci


Mes amis, je peux vous poser une autre question. Est-il possible de ne pas charger un ordinateur portable domestique, mais d'utiliser, pour relier l'indicateur avec des fichiers csv, un stockage gratuit de fichiers en nuage comme, par exemple, Yandex.Disk ou Облако@mail.ru ou Box.net etc. Merci.
 
Vitaly Muzichenko:

Voici la fonction du trouveur

dBid etdPoint doivent-ils être saisis séparément ?