Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
Je dois remplir un tableau avec l'indicateur MASD. Si je comprends bien, il y a des données : l'indice de la barre, la valeurMODE_MAIN, la valeurMODE_SIGNAL, c'est-à-dire que le tableau devrait être de type tridimensionnel ( a [] [] []), ou quoi? Si vous pouvez donner un exemple.
très dangereux. Pour que cela fonctionne, vous devez, comme le recommande le batteur, "secouer" l'historique périodiquement. Je n'ai pas précisé à quel endroit.
En général, après beaucoup de souffrance, j'ai conclu qu'il est préférable d'utiliser la fonction CopyRates()
Les messages concernant les erreurs éventuelles sont remplis par chacun d'entre nous si nous le voulons.
bool newBar() { staticdatetime timeLastBar; MqlRates mqlRates[]; int s = 0; do { s++; } while(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, mqlRates) < 0 && s < 7); bool ret = timeLastBar != mqlRates[0].time; if(ret) timeLastBar = mqlRates[0].time; return(ret); }/*******************************************************************/
très dangereux. Pour que cela fonctionne, vous devez, comme le recommande le batteur, "secouer" l'historique périodiquement. Le lieu n'a pas été précisé.
Alexey, dis-moi, quand as-tu rencontré des erreurs en l'utilisant ? Vous en avez déjà eu un ?
J'utilise moi-même cette méthode et je n'ai pas rencontré de problème. Eh bien, peut-être que je dois encore le faire ?
J'aimerais avoir des explications - pour ainsi dire... :)
Alexei, dis-moi, quand as-tu rencontré des erreurs avec cette utilisation ? L'avez-vous déjà fait ?
Parce que j'utilise moi-même cette méthode et que je n'ai pas encore rencontré de problème. Eh bien, peut-être que je dois encore le faire.
J'aimerais avoir des explications - pour ainsi dire... :)
Où le batteur a-t-il dit ça ?
Et voilà le tressaillement.
Vladimir Karputov: Cela n'a pas fonctionné sur un symbole dans un terminal (sur l'échelle de temps M15) - je suis sûr à 99% que le problème est qu'en utilisant une autre échelle de temps, je dois "secouer" l'historique tout le temps. Je pense que c'est mieux de le faire par CopyTime().
Le problème n'est pas résolu par le chat par le lieu de causalité.
Par exemple, dans le terminal MT5 il y a quelques Expert Advisors (MACD Sample et Moving Averages), mais si vous voulez changer le handle de l'indicateur dans le code de ces Expert Advisors et mettre un TF spécifique, par exemple PERIOD_H4, au lieu de "_Period", alors dans le test par les prix ouverts du TF plus élevé, l'erreur de chargement de l'indicateur suivant se produit : cannot load indicator 'MACD' [4805] and as a result : tester stopped because OnInit failed. Quelles sont vos opinions ? Peut-être que je fais quelque chose de mal ? Est-il possible de coder le conseiller expert de manière à ce qu'il soit testé pour les prix ouverts de n'importe quel TF ?
J'ai essayé d'utiliser l'indicateur comme un indicateur personnalisé, l'erreur est la même.
Merci d'avance pour vos commentaires.
intOnInit(void) { //--- préparer la classe de commerce pour contrôler les positions si le mode de couverture est actif. ExtHedging=((ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) ; ExtTrade.SetExpertMagicNumber(MA_MAGIC) ; ExtTrade.SetMarginMode() ; //--- Indicateur de moyenne mobile ExtHandle=iMA(_Symbol,PERIOD_H4,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE) ; si(ExtHandle==INVALID_HANDLE) { printf("Erreur lors de la création de l'indicateur MA") ; return(INIT_FAILED) ; } //--- ok return(INIT_SUCCEED) ; }
Bonjour !
S'il vous plaît, aidez-moi à écrire un EA.
L'essence de l'Expert Advisor : ouvre 4 ordres de 1 lot.
2 à vendre : usdchf ; eurusd ;
2 à acheter : gbpusd ; usdjpy ;
Lorsque vous atteignez un profit total de 5 pips, fermez toutes les transactions. Et recommencer.
4 lots au total ?
Et s'il n'y a pas de profit ?
Bonjour !
S'il vous plaît, aidez-moi à écrire un EA.
L'essence de l'Expert Advisor : ouvre 4 ordres de 1 lot.
2 à vendre : usdchf ; eurusd ;
2 à acheter : gbpusd ; usdjpy ;
Lorsque vous atteignez un profit total de 5 pips, fermez toutes les transactions. Et recommencer à zéro.
Il n'est pas nécessaire de répéter votre question dans plusieurs fils de discussion.
Veuillez contacter Freelance.
Salutations.
Pouvez-vous me dire comment écrire la condition pour que l'action soit exécutée à l'ouverture d'une nouvelle bougie sur le graphique actuel ?
Bonjour, aidez-moi à comprendre les tableaux !
Je dois remplir un tableau avec l'indicateur MASD. Si je comprends bien, il y a des données : l'indice de la barre, la valeurMODE_MAIN, la valeurMODE_SIGNAL, c'est-à-dire que le tableau devrait être de type tridimensionnel ( a [] [] []), ou quoi? Si vous pouvez donner un exemple.
https://www.mql5.com/ru/articles/159
Sergey, avez-vous déjà utilisé ce code vous-même ?
L'article est généralement bon, mais c'est...
très dangereux. Pour que cela fonctionne, vous devez, comme le recommande le batteur, "secouer" l'historique périodiquement. Je n'ai pas précisé à quel endroit.
En général, après beaucoup de souffrance, j'ai conclu qu'il est préférable d'utiliser la fonction CopyRates()
Les messages concernant les erreurs éventuelles sont remplis par chacun d'entre nous si nous le voulons.
{
static datetime timeLastBar;
MqlRates mqlRates[];
int s = 0;
do
{
s++;
}
while(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, mqlRates) < 0 && s < 7);
bool ret = timeLastBar != mqlRates[0].time;
if(ret)
timeLastBar = mqlRates[0].time;
return(ret);
}/*******************************************************************/
Sergey, avez-vous déjà utilisé ce code vous-même ?
L'article est généralement bon, mais c'est...
très dangereux. Pour que cela fonctionne, vous devez, comme le recommande le batteur, "secouer" l'historique périodiquement. Le lieu n'a pas été précisé.
Alexey, dis-moi, quand as-tu rencontré des erreurs en l'utilisant ? Vous en avez déjà eu un ?
J'utilise moi-même cette méthode et je n'ai pas rencontré de problème. Eh bien, peut-être que je dois encore le faire ?
J'aimerais avoir des explications - pour ainsi dire... :)
Où le batteur a-t-il dit ça ?
Alexei, dis-moi, quand as-tu rencontré des erreurs avec cette utilisation ? L'avez-vous déjà fait ?
Parce que j'utilise moi-même cette méthode et que je n'ai pas encore rencontré de problème. Eh bien, peut-être que je dois encore le faire.
J'aimerais avoir des explications - pour ainsi dire... :)
Où Drubashka a-t-il dit une telle chose ?
https://www.mql5.com/ru/forum/89213
Il y a huit pages de chamailleries. Et pas seulement drubashka, mais Slawa dit que
Où voyez-vous un comportement inadéquat de cette fonction ? Avez-vous lu attentivement la documentation?
Renvoie des informations sur l'état des données historiques. Ne met pas à jour les informations, n'initie pas l'échange de données. Il suffit de rendre ce qui est là pour le moment.
Alexei, dis-moi, quand as-tu rencontré des erreurs avec cette utilisation ? L'avez-vous déjà fait ?
Parce que j'utilise moi-même cette méthode et que je n'ai pas encore rencontré de problème. Eh bien, peut-être que je dois encore le faire.
J'aimerais avoir des explications - pour ainsi dire... :)
Où le batteur a-t-il dit ça ?
Et voilà le tressaillement.
Cela n'a pas fonctionné sur un symbole dans un terminal (sur l'échelle de temps M15) - je suis sûr à 99% que le problème est qu'en utilisant une autre échelle de temps, je dois "secouer" l'historique tout le temps. Je pense que c'est mieux de le faire par CopyTime().
Alexei, dis-moi, quand as-tu rencontré des erreurs avec cette utilisation ? L'avez-vous déjà fait ?
Par exemple, dans le terminal MT5 il y a quelques Expert Advisors (MACD Sample et Moving Averages), mais si vous voulez changer le handle de l'indicateur dans le code de ces Expert Advisors et mettre un TF spécifique, par exemple PERIOD_H4, au lieu de "_Period", alors dans le test par les prix ouverts du TF plus élevé, l'erreur de chargement de l'indicateur suivant se produit : cannot load indicator 'MACD' [4805] and as a result : tester stopped because OnInit failed. Quelles sont vos opinions ? Peut-être que je fais quelque chose de mal ? Est-il possible de coder le conseiller expert de manière à ce qu'il soit testé pour les prix ouverts de n'importe quel TF ?
J'ai essayé d'utiliser l'indicateur comme un indicateur personnalisé, l'erreur est la même.
Merci d'avance pour vos commentaires.
int OnInit(void)
{
//--- préparer la classe de commerce pour contrôler les positions si le mode de couverture est actif.
ExtHedging=((ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) ;
ExtTrade.SetExpertMagicNumber(MA_MAGIC) ;
ExtTrade.SetMarginMode() ;
//--- Indicateur de moyenne mobile
ExtHandle=iMA(_Symbol,PERIOD_H4,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE) ;
si(ExtHandle==INVALID_HANDLE)
{
printf("Erreur lors de la création de l'indicateur MA") ;
return(INIT_FAILED) ;
}
//--- ok
return(INIT_SUCCEED) ;
}