Questions des débutants MQL4 MT4 MetaTrader 4 - page 112
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
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.