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
C'est ce que j'ai obtenu. S'il vous plaît, dites-moi ce qui ne va pas. Merci d'avance !
Bonjour !
J'écris ici car il ne semble y avoir personne sur mq4.
Pouvez-vous me dire ce que je fais mal ? L'option 2 ne fonctionne pas.
Bonjour, Veuillez m'aider à écrire une fonction dans MT4. Je connais le solde de mon compte, je sais combien de transactions seront ouvertes (par exemple 9), je connais le risque (par exemple 3% du solde du compte), je dois calculer un lot pour la première transaction, si chaque lot suivant sera doublé et si toutes les transactions se chevaucheront.
C'est ce que j'ai obtenu. S'il vous plaît, dites-moi ce qui ne va pas. Merci d'avance !
Bonjour !
J'écris ici, car il semble n'y avoir personne sur mq4.
Pouvez-vous me dire ce que je fais mal ? L'option 2 ne fonctionne pas.
Surligné : il devrait y avoir une affectation - "=" et vous avez une comparaison - "==".
Bonjour à tous !
J'apprends à écrire des robots dans mt4, j'ai décidé de commencer avec les options binaires. Je suis en train d'écrire une simple EA, mais le compilateur génère beaucoup d'avertissements, je ne peux pas le comprendre (
Aide : "Oh MQL4 Guru" =))))))
Merci d'avance)
Voici le code de l'EA.
//+------------------------------------------------------------------+
//|Bolinger_Bands_traider.mq4 |
//|Copyright 2017, Penrov Nikolay |
//|vk.com/buzamonolit |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Petrov Nikolay"
#Propriété lien "vk.com/buzamonolit"
#propriété version "1.00"
#propriété stricte
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert|
//+------------------------------------------------------------------+
extern int Bolinger_Bands = 20 ; // Période des bandes de Bollinger
extern double Delta = 0.0003 ; // A quelle distance ouvrir l'ordre.
string Symb ; // Nom de l'instrument financier.
int Total ; // Nombre de commandes
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert|
//+------------------------------------------------------------------+
int init()
{
//----
Initialize_Objects(0) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation de l'expert|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert|
//+------------------------------------------------------------------+
int start()
{
//----
double price = Bid ;
double CurrBol_High = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_UPPER, 0) ;
double CurrBol_Low = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_LOWER, 0) ;
double PriceBol_High = prix - CurrBol_High ;
double PriceBol_Low = prix - CurrBol_Low ;
datetime NextClose = Time[0] + Period()*60*2 ;
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1 ;
int err ;
// Comptage des commandes
Symb=Symbole() ;// Nom de l'aileron.symbole() ; // symbole() ; // symbole() ; // icône de commande() ; // symbole().
Total=0 ;// Nombre de commandes
for(int i=1 ; i<=OrdersTotal() ; i++) // Boucle de commande
{
si (OrderSelect(i-1,SELECT_BY_POS)==true) // S'il existe un suivant
{// Analyse des commandes :
if (OrderSymbol()!=Symb)continue ; // Pas notre instrument financier
si (OrderType()>1)// Nous avons un ordre en attente
{
Alert("Ordre en attente détecté. Le conseiller expert ne fonctionne pas ;)
retour(0) ;// Exit()
}
Total++ ;// Contre marché. commander
si (Total>1)// Pas plus d'une commande
{
Alert("Plusieurs ordres de marché. Le conseiller expert ne fonctionne pas.") ;
retour(0) ;// Exit()
}
}
}
ObjectSetText("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 5) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10, "Arial", DarkGreen ) ;
ObjectSetText("Obj_Label2", "Orders :" + Total + ", delta " + DoubleToStr(Delta,5) + ", distance to MA :" + DoubleToStr(PriceBol_High, 5), 10, "Arial", DarkGreen ) ;
ObjectSetText("Obj_Label3", "Ordres : " + Total + ", Delta " + DoubleToStr(Delta,5) + ", distance à la MA :" + DoubleToStr(PriceBol_Low, 5), 10, "Arial", DarkGreen ) ;
// analyse des prix et ouverture des ordres
si ((MathAbs(PriceBol_Low) < Delta) && (price > CurrBol_Low) && (Open[0] > CurrBol_Low+Delta) && (Total<1))
{
si (OrderSend(Symbol(), OP_BUY, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Green) >0) Print ("Opened OK") ;
sinon
{
err=GetLastError() ;
Print("error(",err,")) ;
retour(0) ;
}
Print ("CALL @ " + price + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose) ;
}
si ((MathAbs(PriceBol_High) < Delta) && (price < CurrBol_High) && (Open[0] < CurrBol_High-Delta) && (Total<1))
{
si (OrderSend(Symbol(), OP_SELL, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Red) > 0) Print ("Opened OK") ;
sinon
{
err=GetLastError() ;
Print("error(",err,")) ;
retour(0) ;
}
Print ("PUT @ " + price + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose) ;
}
//----
retour(0) ;
}
//+------------------------------------------------------------------+
int Initialize_Objects(int Win) // Fie utilisateur
{// .création d'objets
ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0) ; // création d'objet
ObjectSet("Obj_Label", OBJPROP_CORNER, 0) ; // Lié à un coin
ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13) ; // Coordonnée X
si (Win==0)
ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);//coordonnée Y
sinon
ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);//coordonnée Y
ObjectCreate("Obj_Label2",OBJ_LABEL,Win, 0,0) ; // Création d'objet
ObjectSet("Obj_Label2",OBJPROP_CORNER, 0) ; // Liaison avec un coin
ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13) ; // Coordonnée X
si (Win==0)
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//coordonnée Y
sinon
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Coordonnée Y
ObjectCreate("Obj_Label3",OBJ_LABEL, Win, 0,0) ; // Créer un objet
ObjectSet("Obj_Label3",OBJPROP_CORNER, 0) ; // Liaison avec un coin
ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13) ; // Coordonnée X
si (Win==0)
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//coordonnée Y
sinon
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Coordonnée Y
retour(0) ;// Sortir de l'utilisateur.fonction
}
Voici les avertissements. Je n'arrive pas à comprendre ce qu'il n'aime pas.
perte possible de données due à la conversion de type Bolinger_Bands_traider.mq4 51 24
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 76 35
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 76 227
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 77 43
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 78 43
conversion implicite de 'string' en 'number' Bolinger_Bands_traider.mq4 85 71
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 93 23
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 93 91
conversion implicite de 'string' en 'number' Bolinger_Bands_traider.mq4 99 72
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 107 23
conversion implicite de 'nombre' en 'chaîne de caractères' Bolinger_Bands_traider.mq4 107 91
0 erreur(s), 11 avertissement(s), temps de compilation : 204 msec 1 12
Élémentaire. L'erreur vient de la fonctionGetLots(). Toute la fonction.
Vous pouvez peut-être me dire comment l'écrire correctement. Je voulais calculer en utilisant la boucle par force brute à partir du lot maximum.
Vous pouvez peut-être me dire comment l'écrire correctement. Je voulais calculer en utilisant une boucle en essayant à partir du lot maximum.
Où est la logique ? Vous fixez le lot maximal autorisé pour la première commande, puis vous l'augmentez pour chaque commande successive. Cela ne vous semble-t-il pas, pour ne pas dire plus, pas très raisonnable ?
En outre, vous diminuez le lot du premier ordre dans la boucle en utilisant une méthode totalement incompréhensible, tandis que les lots des autres ordres, qui ont été "calculés" auparavant, restent inchangés, et ces valeurs ne dépassent en aucun cas les limites de cette fonction. Alors, que font-ils ?
Sans compter que la boucle d'incrémentation ne peut pas être un nombre réel, elle doit être un compteur, un entier. Mais vous définissez la valeur du lot comme un compteur et vous en soustrayez un à chaque itération. C'est une erreur majeure, une erreur très grave.
Clarifiez d'abord la logique dans votre esprit, puis essayez de la mettre en œuvre dans votre code.
Mais voici les avertissements. Je ne comprends pas ce qu'il n'aime pas.
perte possible de données due à la conversion de type Bolinger_Bands_traider.mq4 51 24
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 76 35
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 76 227
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 77 43
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 78 43
conversion implicite de 'string' en 'number' Bolinger_Bands_traider.mq4 85 71
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 93 23
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 93 91
conversion implicite de 'string' en 'number' Bolinger_Bands_traider.mq4 99 72
conversion implicite de 'nombre' en 'chaîne' Bolinger_Bands_traider.mq4 107 23
conversion implicite de 'nombre' en 'chaîne de caractères' Bolinger_Bands_traider.mq4 107 91
0 erreur(s), 11 avertissement(s), temps de compilation : 204 msec 1 12
Sortir une ligne avec le numéro 51, car il n'y a pas de compte ici pour comprendre l'erreur"possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24".
Le reste : "conversion implicite de 'nombre' en 'chaîne de caractères' Bolinger_Bands_traider.mq4 107 91
traduire les valeurs numériques en une chaîne de texte où nous créons l'objet - une chaîne de texte, par exemple
période()
il devrait l'être
DoubleToString(Période(),0)
traduire les valeurs numériques en une chaîne de texte où nous créons un objet chaîne de texte, par exemple
période()
il devrait l'être
DoubleToString(Période(),0)
Depuis quand la période est un type double?