Questions des débutants MQL5 MT5 MetaTrader 5 - page 143
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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.
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.
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.
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 ? J'ai besoin d'obtenir le prix minimum.
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.
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 :
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 ?
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 :
Vérifiez et testez pendant les week-ends et au-delà, vous devez écrire un scénario.
Vérifiez et testez pendant les week-ends et au-delà, vous devez écrire un scénario.