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

 
barabashkakvn:
Je suis d'accord sur le int(round). Merci. Une conversion de type explicite ne ferait pas de mal. Bien que cela ait fonctionné sans conversion de type explicite.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
Je suis d'accord sur le int(round). Merci. Une conversion de type explicite ne ferait pas de mal. Mais cela fonctionnait bien sans conversion de type explicite.
Ça a marché, mais les remarques du compilateur... Ils sont ennuyeux.
 
barabashkakvn:

Je n'ai pas d'erreurs. La construction est la plus récente.

Merci, la mise à jour de MT5 m'a aidé. L'erreur a disparu. Le build date du 23 juillet 2013. Dans l'ancien build, d'ailleurs, il n'y avait pas de bons de conversion de type, c'est pourquoi je ne les avais pas remarqués.

Qui aurait pu s'attendre à des erreurs aussi graves de la part du compilateur.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

Merci, la mise à jour de MT5 m'a aidé. Le bug a disparu, la build était du 23 juillet 2013. Dans l'ancienne build, d'ailleurs, il n'y avait pas de bons de conversion de type, donc je ne les ai pas remarqués.

Qui aurait pu s'attendre à des erreurs aussi graves de la part du compilateur.

L'essentiel est que cela ait fonctionné :).
 

Il faut trouver le minimum dans l'intervalle de temps. J'ai fait le code suivant pour trouver le minimum dans l'intervalle de temps :

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

Pour trouver les minima dans cet intervalle, j'utilise la fonction CopyLow :

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

Ensuite, si je comprends bien, j'obtiens un tableau unidimensionnelLow[],

Je cherche le minimum dans le tableau avec ArrayMinimum:

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

J'ai essayé de définir aujourd'hui une heure de départ de 1 heure, une heure d'arrêt de 2 heures et d'appeler Alert pour vérifier min=-1.

Question : pour ce problème, les fonctions sont-elles choisies correctement pour résoudre ce problème, ou y a-t-il une erreur quelque part ? J'ai besoin d'obtenir le prix minimum.

 
Bonjour. Chers traders, S'il vous plaît aidez-moi avec la conception correcte de la pièce de programme pour 3 diapositives dans un EA multi-devises.

J'ai essayé de le chercher dans le manuel, mais c'est un exemple basé sur la classe, et je ne suis pas encore prêt pour cela.

Je veux écrire un EA sans utiliser de classes. J'ai exclu toutes les choses étrangères de la considération et pour obtenir 3 feuillets pour chaque...

J'ai écrit le fragment de programme suivant :

entrée int Kurtz_Period=5; // période de Kurtz

entrée int Mittel_Period=8 ;

entrée int Long_Period=13 ;

int maHandle ; //handle de l'indicateur de moyenne mobile

double ma_buf[] ; // c'est un tableau tampon pour les lectures de la moyenne mobile de la fonction MA

// et ensuite il sera copié dans les tableaux correspondants

datetime Time_buf[] ; // il s'agit d'un tableau de l'heure d'ouverture des bars.

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

double Kurtz[6][70] ; //Il s'agit d'un tableau pour le mouvement rapide de Kurtz, les numéros de ligne correspondent aux nombres de devises utilisées, tandis que les colonnes sont les nombres de mouvements.

double Mittel[6][70] ; // ceci est le tableau pour la moyenne mobile Mittel

double Long[6][70] ; // il s'agit d'un tableau pour une longue période glissante Long

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // il s'agit d'un tableau textuel de noms de devises :

int nomer_instr ; // il s'agit d'un numéro d'instrument (monnaie), uniquement pour organiser les cycles par monnaie.

int OnInit()

{

//-----

//-------

}

void OnDeinit(const int reason)

{

//---

ArrayFree(Time_buf) ;

ArrayFree( ma_buf) ; // met à zéro le tableau libéré

//-------

}

void OnTick()

{

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

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

ArraySetAsSeries(ma_buf, true) ; //set l'indexation du tableau ma_buf comme dans timeseries

for( nomer_instr=0 ; nomer_instr<=5 ; nomer_instr++ ) // ceci est une boucle sur toutes les devises utilisées

{

int digit = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)) ; // il s'agit du nombre de chiffres dans la cotation de la monnaie.

CopyTime( Name_symbol[nomer_instr], PERIOD_M1,0,160,Time_buf) ; // copier les données temporelles historiques pour chaque barre dans le tampon.

for( i=1 ; i<=145 ; i++ ) Time[nomer_instr][i]=Time_buf[i] ; // temps de la 1ère barre ouverte

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

//Block générant les comptes des 3 premières barres glissantes :Kurtz, Mittel, Long

manHandle = iMA( Symbole_Nom[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE ) ;

si( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alert("Erreur dans la copie des tampons de l'indicateur ---PERIOD_M1,Kurtz_Period--- Moyenne mobile - numéro d'erreur :",GetLastError()) ;

retour ;

}

for( i=1 ; i<=45 ; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit) ;

/*

//===============================================================

// BLOCK vérifie le décalage des barres comme dans les séries temporelles et la précision de la normalisation des nombres.

// MA-5 en mouvement rapide

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // il s'agit d'une clé pour sélectionner le mode du Conseiller Expert, maintenant il est en mode débogage

{

for( i=1 ; i<=5 ; i++ )

{

if(i==1) Alert("====================");

si(i==1) Alert(" heure d'ouverture de la 1ère barre: Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alert(" numéro de barre: i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//=================================================================

*/

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

maHandle = iMA( Symbole_Nom[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE ) ;

si(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Erreur dans la copie des tampons de l'indicateur ===PERIOD_M1, Mittel_Period,=== Moyenne mobile - numéro d'erreur :",GetLastError()) ;

retour ;

}

for( i=1 ; i<=45 ; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit) ;

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

maHandle = iMA( Symbole_Nom[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE ) ;

si(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Erreur dans la copie des tampons d'indicateurs ===PERIOD_M1, Long_Period,===Moving Average - numéro d'erreur :",GetLastError()) ;

retour ;

}

for( i=1 ; i<=45 ; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit) ;

// fin du bloc formant les comptes des 3 premières diapositives : Kurtz, Mittel,Long

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

} // fin de la boucle par devises utilisées

//============================================================

Autres opérateurs de programmes

//============================================================

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

}// Fin de OnTick()

//+------------------------------------------------------------------+

Aucune erreur n'est détectée sur ce programme au moment de la compilation, mais lorsqu'il est testé dans le journal de bord pour chaque glissement, un

message d'erreur : 4806 est "données demandées non trouvées".

Veuillez me dire où se trouve l'erreur.

Merci.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008:

Vous ne comprenez pas le principe de la classification par type? C'est très simple :

Cela semble clair maintenant) Il s'avère que l'opérande int st est d'un type mineur que datetime tp[].

C'est pourquoi il n'y a pas de conversion en secondes dans l'opération :

int st=tp[0];

J'ai essayé de trouver le minimum dans l'intervalle de temps. Je ne suis pas sûr de bien faire les choses. Pouvez-vous voir le message précédent ?

Comment peut-on appeler une alerte ou un commentaire sans avoir de nouveaux ticks pour effectuer les contrôles du week-end ?

 
forexman77:

Il faut trouver le minimum dans l'intervalle de temps. J'ai fait le code suivant pour trouver le minimum dans l'intervalle de temps :

Pour trouver les minima dans cet intervalle, j'utilise la fonction CopyLow :

Ensuite, si je comprends bien, j'obtiens un tableau unidimensionnelLow[],

Je cherche le minimum dans le tableau avec ArrayMinimum:

J'ai essayé de définir aujourd'hui une heure de départ de 1 heure, une heure d'arrêt de 2 heures et d'appeler Alert pour vérifier min=-1.

Question : pour ce problème, les fonctions sont-elles choisies correctement pour résoudre ce problème, ou y a-t-il une erreur quelque part ? Vous devez obtenir le prix minimum.

Veuillez lire attentivement:

Valeur de retour.

La fonction renvoie l'index de l'élément trouvé en tenant compte de la sérialité du tableau. Si elleéchoue, la fonction renvoie -1.

Par conséquent, ça devrait être comme ça :

Alert("min=",Low[ArrayMinimum(Low)]);
 

Vérifiez et testez pendant les week-ends et au-delà, vous devez écrire un scénario.

 
DC2008:

Vérifiez et testez pendant les week-ends et au-delà, vous devez écrire un scénario.

Merci !