Questions des débutants MQL5 MT5 MetaTrader 5 - page 97

 
Vladon:

L'idée est la vôtre, mais pas le code. Le programmeur a écrit le code, pas vous, vous avez écrit les TdR.

Imaginez - des utilisateurs de Windows exigeant des logiciels libres - n'est-ce pas absurde ?

D'après ce que j'ai compris, le code utilisé par les experts appartient à MetaQuotes, ou à vous personnellement ?

Qu'est-ce que cela a à voir avec Windows, tout d'abord les utilisateurs n'ont pas le droit de l'exiger car ce produit appartient à macrosoft, voici une petite différence, macrosoft va commencer à demander le code source ouvert de leur produit aux programmeurs qui l'ont écrit, et ils vont se tordre les doigts et ne pas le donner.

 
Vladon:

Aah :-=) donc il y a des sources avant la protection ? que voulez-vous d'autre alors ? On vous a dit - personne ne donnera le code source ouvert d'une EA protégée, et je ne le donnerais pas. Et s'il y avait une obligation dedemander le code source de votre produit après son achèvement.

J'aurais refusé la tâche.

De quoi d'autre avez-vous besoin alors ? Il y a le code source avant la défense, donc c'est la même chose que le conseiller avec la défense.

Au cours des travaux de l'EA, des modifications ont été apportées, diverses fonctions ont été ajoutées, etc., mais il n'existe pas de code source ouvert avec ces modifications.
 
ComplexFX:
Au cours du processus de travail de l'Expert Advisor, des modifications ont été apportées, diverses fonctions ont été ajoutées, etc., mais il n'existe pas de code source ouvert avec ces modifications.

alors je pense que la vérité est de votre côté.

D'après ce quej'ai compris, le code utilisé par les experts appartient à MetaQuotes, ou à vous personnellement ?

Si j'écris le code, il m'appartient personnellement.MetaQuotes possède le langage de programmation.

tout est juste.

 
Pouvez-vous me dire comment fermer un ordre ouvert dans Expert Advisor ? Je comprends comment fermer une position en utilisant le Stop Loss ou le Take Profit. Comment puis-je le faire manuellement ?
 
pogeon:
Pouvez-vous me dire comment fermer un ordre ouvert dans Expert Advisor ? Je comprends comment fermer une position en utilisant le Stop Loss ou le Take Profit. Comment le faire manuellement ?
Dans mql5, une position ouverte est fermée par des ordres de sens contraire dont le volume total est égal au volume d'une position fermée.
 
progeon:
Pourriez-vous m'indiquer comment fermer un ordre ouvert dans un Expert Advisor ? Je comprends comment une position est fermée au niveau du Stop Loss ou du Take Profit. Comment le faire manuellement ?

Ou utilisez la classe CTrade, qui possède une fonction

trade.PositionClose(_Symbol);

quelque chose comme ceci

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / PositionClose - Документация по MQL5
 
Yedelkin: Dans mql5, une position ouverte est fermée par des ordres de sens contraire, dont le volume total est égal au volume de la position fermée.

lazarev-d-m: Ou utiliser la classe CTrade, il y a une fonction

La méthode PositionClose() de la classe CTrade permet également de clôturer une position en utilisant des ordres opposés.

 

Veuillez m'indiquer comment résoudre cette situation ou pourquoi. Je travaille dans MQL5 depuis peu, je n'ai donc pas encore assez d'expérience.

J'ai essayé de faire un EA multi-devises sans utiliser de classes. Malheureusement, je n'ai pas trouvé d'article détaillé sur les EA multi-devises.

J'ai écrit le morceau de code suivant.

int nomer_instr ; // c'est le numéro d'index de la devise dans le tableau des noms de devises

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // tableau de texte des noms de devises : en [0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD", etc.

double Close_buf[], Open_buf[], High_buf[], Low_buf[] ; //tableaux de base pour les paramètres des chandeliers

datetime Time_buf[] ; //tableau de base des heures d'ouverture des bars

double Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150] ; // tableaux pour les paramètres des chandeliers de l'EA multidevises pour le cadre temporel H1

// le nombre de lignes du tableau correspond au nombre de devises analysées.

datetime Time_H1[6][150] ; // tableau de l'heure d'ouverture des barres

double Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150] ; // tableaux pour les paramètres des chandeliers du conseiller expert multidevises pour le cadre temporel H4.

// le nombre de lignes dans le tableau correspond au nombre de devises analysées

datetime Time_H4[6][150] ; // tableau des heures d'ouverture des bars



int OnInit()

{

}

void OnDeinit(const int reason)
{
//---
ArrayFree(Time_buf) ;
ArrayFree(Close_buf) ;
ArrayFree(Open_buf) ;

ArrayFree(High_buf) ;

ArrayFree(Low_buf) ;

}


void OnTick()

{

//------------------------------------------------------------------------------

Voici un morceau de code pour déterminer le moment où une nouvelle barre s'ouvre Nev_Time[0]

et le numéro de série de la barre traitée en cours de test ou de négociation

//------------------------------------------------------------------------------------------------------------------------

ArraySetAsSeries(Close_buf, true) ; //définir l'indexation du tableau close_array comme dans timeseries
ArraySetAsSeries(Open_buf, true) ; //set l'indexation pour le tableau open_array comme dans timeseries
ArraySetAsSeries(High_buf, true) ; //définir l'indexation du tableau high_array comme dans timeseries
ArraySetAsSeries(Low_buf, true) ; //définir l'indexation du tableau low_array comme dans timeseries

ArraySetAsSeries(Time_buf, true) ; //définir l'indexation du tableau time_array comme dans timeseries


for( nomer_instr=0 ; nomer_instr<=5 ; nomer_instr++ )
{


//========================================================================
CopyTime( Name_symbol[nomer_instr], PERIOD_H1,0,160,Time_buf) ; // copier les données temporelles historiques pour chaque barre dans le tampon.
CopyClose( Nom_symbole[nomer_instr], PERIOD_H1,0,160,Close_buf) ; // copier la clôture des données historiques pour chaque barre dans le tampon.
CopyOpen( Nom_symbole[nomer_instr], PERIOD_H1,0,160,Open_buf) ; // copier les données historiques ouvertes pour chaque barre dans le tampon
CopyHigh( Symbole_Nom[nomer_instr], PERIOD_H1,0,160,high_buf) ; // copier le haut des données historiques pour chaque barre dans le buffer
CopyLow( Name_symbol[nomer_instr], PERIOD_H1,0,160,low_buf) ; // copier les données historiques basses pour chaque barre dans le buffer
//========================================================================

for( i=1 ; i<=145 ; i++ )
{
Time_H1[nomer_instr][i]=Time_buf[i];
Close_H1[nomer_instr][i]=Close_buf[i];
Open_H1[nomer_instr][i]=Open_buf[i];
High_H1[nomer_instr][i]=High_buf[i];
Low_H1[nomer_instr][i]=Low_buf[i];
}

//======================================================================================
// vérifie le décalage temporel des données de chandelier générées pour une période d'une heure.

if( Schetchik_svech > 8 && Schetchik_svech < 15 )
{
si( nomer_instr == 5 )
{
Alert("================================================");
Alert(" numéro de barre = ",Schetchik_svech,", heure d'ouverture de la barre Nev_Time[0]=",Nev_Time[0]) ;
Alert(" numéro d'instrument : nomer_instr=",nomer_instr,", instrument : Symbole_nom[nomer_instr]=",Symbole_nom[nomer_instr]) ;
Alert("---------------------------------------------------------");
for( i=1 ; i<=5 ; i++ )
{
Alert("i=",i,", Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],", Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
}
}
}
//======================================================================================

} // fin de la boucle pour les devises utilisées sur le temps H1


//##############################################

Voici la même partie du graphique pour le cadre temporel H4.

//############################################


} // fin de la fonction OnTick()


La vérification des performances de ce logiciel m'a révélé un résultat inattendu :

- Pour le cas de H1, lorsque la sortie des paramètres des barres pour le graphique, sur lequel se trouve le Conseiller Expert, nous avons un décalage d'une heure entre l'ouverture de la barre zéro et la première barre.

Par exemple, l'Expert Advisor est sur le graphique EURUSD et l'heure d'ouverture de la barre zéro est Nev_Time[0]=2011.01.03 13:00:00, puis l'heure d'ouverture de la première barre Time_H1[1][1]=2011.01.03 12:00:00

Le résultat est conforme au bon sens.

- Maintenant, le conseiller expert est sur le même graphique et nous analysons les données d'une autre devise, par exemple AUDUSD :

l'heure d'ouverture de la barre zéro Nev_Time[0]=2011.01.03 13:00:00, puis l'heure d'ouverture de la 1ère barre Time_H1[1][1]=2011.01.03 11:00:00

Ce résultat est tout simplement inacceptable, mais je n'ai pas trouvé de raisons à cet effet dans les articles.

Veuillez me conseiller sur la façon de me débarrasser de cette nuisance, je ne peux pas écrire un conseiller expert pour chaque devise.

Merci pour vos commentaires.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Boris.45: l'heure d'ouverture de la barre zéro Time_H1[1][1]=2011.01.03 13:00:00, puis l'heure d'ouverture de la première barre Time_H1[1][1]=2011.01.03 11:00:00
Et que retourne Time_H1[1][0] ?
 
Yedelkin:

Que retourne Time_H1[1][0] ?

Je n'utilise pas cet élément du tableau, car je vais passer directement à l'algorithme de recherche de fractales sur les 5 dernières barres. Et Time_H1[1][0] est le temps d'ouverture de la barre zéro où les paramètres de cette barre n'ont pas encore été formés. Je peux me tromper, mais d'après ma propre expérience, je sais que l'utilisation des paramètres d'une barre zéro pour former des séries temporelles conduit à leur distorsion.

Raison: