L'objectif est d'obtenir la taille de lot correcte, quelle que soit la devise et la paire du compte, pour le risque et le seuil de perte spécifiés. Lerisqueest défini comme un pourcentage des pertes lorsque le Stop Loss est déclenché. Stop Loss SLen pips (où pips est la plus petite variation possible du prix de la paire). Je vais commencer cet EA sur un compte réel. Mais j'ai des doutes. Si quelqu'un parmi les programmeurs plus expérimentés pouvait me dire quelles erreurs peuvent se produire, je lui en serais très reconnaissant.
Testeur de stratégie d'abord. Ensuite, nous avons un compte de démonstration. Et seulement ensuite le vrai compte. Pour vérifier la formule, écrivez un script. Ou calculez-la sur une feuille de papier. J'ai pris balance=100, risque=0.1 SL=100, Tick=0.00001 Lot=100*0.1 / (100*0.00001) = 10 / 0.001 = 10000 lot de plus que la balance ? Devrions-nous considérer l'effet de levier ?
STARIJ: Premier testeur de stratégie. Puis un compte de démonstration. Et seulement alors un vrai. Pour vérifier la formule, écrivez un script. Ou calculez-la sur une feuille de papier. J'ai pris balance=100, risque=0.1 SL=100, Tick=0.00001 Lot=100*0.1 / (100*0.00001) = 10 / 0.001 = 10000 lot de plus que la balance ? Devrions-nous considérer l'effet de levier ?
MarketInfo(Symbol(),MODE_TICKVALUE)) ne renvoie pas la taille minimale des tick. C'est écrit dans l'aide :
Mais en fait, il renvoie la valeur de la variation minimale du prix du symbole dans la devise de dépôt d'un lot du contrat.
Dans votre exemple,MarketInfo(Symbol(),MODE_TICKVALUE)) retournera 1. Et alors tout est correct. Je l'ai essayé sur des comptes en dollars réels et en roubles et cela fonctionne. Voici le script que j'ai utilisé pour le vérifier :
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Библиотеки: Black or White Text Black or White Text...
Nous devons également faire en sorte que la précision de la fonction NormaliseDouble dépende du lot minimum autorisé. Si vous passez un lot à la fonction OrderSend, par exemple 0,11, et que l'outil n'est négocié qu'avec des lots multiples de 0,1, il y aura une erreur.
Je ne comprends pas pourquoi les transactions ouvertes ne sont pas supprimées en une seule fois, c'est-à-dire que l'EA en supprime certaines, mais l'erreur orderdelete 4108, l'ordre de marché ne peut pas être supprimé plusieurs fois, et ce n'est qu'ensuite qu'il les supprime.
Je ne comprends pas pourquoi les transactions ouvertes ne sont pas supprimées en une seule fois, c'est-à-dire que l'EA en supprime certaines, mais l'erreur orderdelete 4108, l'ordre de marché ne peut pas être supprimé plusieurs fois, et ce n'est qu'ensuite qu'il les supprime.
Bon après-midi. Je demande de l'aide. J'ai cherché sur le NET et sur le forum. Je teste l'Expert Advisor en mode standard, tout est OK... Aucune erreur ou avertissement. J'ai téléchargé les données tick et les ai ajoutées. (J'ai tout fait comme décrit ici - Comment tester les Expert Advisors avec une qualité de 99% - facile, gratuit, légal) et ici - "Comment obtenir une qualité de simulation de 99 % dans le testeur de stratégie Metatrader 4") Au démarrage, erreur constante 'array out of range in 'expert1.0.mq4' (69,25)... Je comprends qu'il s'agit d'un tableau. Je ne sais pas quoi faire. Mais puisque tout est OK en mode standard... Veuillez m'aider
qroner: Au démarrage, il y a une erreur constante array out of range dans 'expert1.0.mq4' (69,25)... J'ai compris que c'est à propos du tableau. Je ne sais pas quoi faire.
J'ai besoin de voir le code, ou un morceau de code, qui gère ce tableau.
Bonjour. J'ai écrit dans mon EA le calcul du lot comme ceci :
lot=NormalizeDouble(AccountBalance()*risk/(SL*MarketInfo(Symbol(),MODE_TICKVALUE)),2) ;
L'objectif est d'obtenir la taille de lot correcte, quelle que soit la devise et la paire du compte, pour le risque et le seuil de perte spécifiés. Lerisque est défini comme un pourcentage des pertes lorsque le Stop Loss est déclenché. Stop Loss SL en pips (où pips est la plus petite variation possible du prix de la paire). Je vais commencer cet EA sur un compte réel. Mais j'ai des doutes. Si quelqu'un parmi les programmeurs plus expérimentés pouvait me dire quelles erreurs peuvent se produire, je lui en serais très reconnaissant.Premier testeur de stratégie. Puis un compte de démonstration. Et seulement alors un vrai. Pour vérifier la formule, écrivez un script. Ou calculez-la sur une feuille de papier. J'ai pris balance=100, risque=0.1 SL=100, Tick=0.00001 Lot=100*0.1 / (100*0.00001) = 10 / 0.001 = 10000 lot de plus que la balance ? Devrions-nous considérer l'effet de levier ?
MarketInfo(Symbol(),MODE_TICKVALUE)) ne renvoie pas la taille minimale des tick. C'est écrit dans l'aide :
Taille de la variation minimale du prix du symbole dans la monnaie de dépôt.
Mais en fait, il renvoie la valeur de la variation minimale du prix du symbole dans la devise de dépôt d'un lot du contrat.
Dans votre exemple,MarketInfo(Symbol(),MODE_TICKVALUE)) retournera 1. Et alors tout est correct. Je l'ai essayé sur des comptes en dollars réels et en roubles et cela fonctionne. Voici le script que j'ai utilisé pour le vérifier :
#property copyright "Copyright 2016, MetaQuotes Software Corp.
#lien de propriété "https://www.mql5.com"
#propriété version "1.00"
#propriété stricte
#property show_inputs
extern double risk=0.10 ;
extern int sl=1000 ;
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script |
//+------------------------------------------------------------------+
void OnStart()
{
Alert(NormalizeDouble(AccountBalance()*risk/(sl*MarketInfo(Symbol(),MODE_TICKVALUE),2)))
}
//+------------------------------------------------------------------+
Vous avez raison. La vérification à l'aide d'un script est plus rapide et plus fiable
Nous devons également faire en sorte que la précision de la fonction NormaliseDouble dépende du lot minimum autorisé. Si vous passez un lot à la fonction OrderSend, par exemple 0,11, et que l'outil n'est négocié qu'avec des lots multiples de 0,1, il y aura une erreur.
Je ne comprends pas pourquoi les transactions ouvertes ne sont pas supprimées en une seule fois, c'est-à-dire que l'EA en supprime certaines, mais l'erreur orderdelete 4108, l'ordre de marché ne peut pas être supprimé plusieurs fois, et ce n'est qu'ensuite qu'il les supprime.
Je ne comprends pas pourquoi les transactions ouvertes ne sont pas supprimées en une seule fois, c'est-à-dire que l'EA en supprime certaines, mais l'erreur orderdelete 4108, l'ordre de marché ne peut pas être supprimé plusieurs fois, et ce n'est qu'ensuite qu'il les supprime.
Cette page explique comment supprimer. Vous avez 2 erreurs.
Au démarrage, il y a une erreur constante array out of range dans 'expert1.0.mq4' (69,25)... J'ai compris que c'est à propos du tableau. Je ne sais pas quoi faire.
J'ai besoin de voir le code, ou un morceau de code, qui gère ce tableau.
Télépathes, reposez-vous aujourd'hui.
Vous devez regarder le code ou une partie du code qui gère le tableau.
Télépathes, reposez-vous aujourd'hui.
}
Voici la fonction.
Je pensais juste que le problème n'était pas dans le code car il n'y a pas d'erreurs en mode standard.