Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 513

 

Est-ce que je le fais bien ?

y = OrderOpenPrice()-Ask ;

Je soustrais le prix actuel du prix du dernier ordre ouvert ?

int i_buy=0; int i_sell=0;

for(int i=0;i<OrdersTotal();i++){

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()){

switch(OrderType()){// Есть ли открыте ордера

case OP_BUY:

i_buy++;

break;

case OP_SELL:

i_sell++;

break;

}

y = OrderOpenPrice()-Ask;

}

}


if((i_buy==0 && i_sell==0) || y > Step) //--- нет открытых ордеров, открываем или расстояние от последнего ордера до текущей цены. Больше step

OrderSend(Symbol(), OP_BUY,StartLot,Ask,Slippage,0,Ask+TakeProfit*Point(),WindowExpertName()+" "+(string)0,0,0,clrBlue);


 
woin2110:

https://docs.mql4.com/ru/trading/orderselecthttps://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z ; //déclaration de la variable "z".
double y ; //déclaration de la variable "y".


if(OrderSelect(10,SELECT_BY_POS)==true) //si la commande sélectionnée (par ticket) est présente

{

OrderLots()=z //attribue le lot de cette commande à la variable "z".

OrderOpenPrice()=y //attribue le prix d'ouverture à la variable "y".

}

essayez ceci

Mais n'embrouillez pas les gens et ne racontez pas de conneries, s'il vous plaît. Vous dites par ticket, mais vous écrivez sélection par index. Et si vous sélectionnez par ticket, vous n'avez pas besoin de spécifier le pool - la fonction l'ignore et le sélectionne dans l'une ou l'autre des deux listes - dans celle où il se trouve. Et pour vérifier à partir de quelle liste l'ordre est sélectionné, nous devons vérifier l'heure de clôture de l'ordre après une sélection réussie et si elle est supérieure à zéro - alors l'ordre a déjà été fermé, sinon - il est sélectionné à partir de la liste des positions ouvertes.

Vous n'affectez pas la valeur du lot à une variable, et vice versa - vous essayez d'affecter la valeur de la variable à la fonction renvoyant le lot de l'ordre sélectionné - cela n'a aucun sens

Exactement la même chose que ce que vous essayez de faire avec la fonction qui renvoie le prix d'ouverture.

 

artmedia70:

Dites-moi ce que je fais de mal. Tout semble être correct.

if((i_buy==0 && i_sell==0) || y > Step)

Ou (i_buy==0 && i_sell==0) ou y > Step. Si l'un ou l'autre est vrai. Ensuite, nous le passons et ouvrons une commande.

 
evillive:

Si Alpari - tu ne pourras jamais. Si une autre société de courtage, cela dépend du compte. Si nous avons une bonne relation de travail avec Alpari, nous aurons une meilleure compréhension du marché. Il faut étudier les termes de l'échange avant de commencer à faire quelque chose, tout y est écrit.

Le service d'assistance 8-800-200-01-31 a expliqué qu'à la fin de la semaine dernière, il avait corrigé un bogue qui permettait d'ouvrir des ordres dans les comptes ECN en même temps que l'on fixait le SL et le TP. J'ai fermé la dernière position jeudi.

Vous avez raison de dire que les règles de négociation ne disent rien à ce sujet et que seul OrderModify() permet de sauvegarder maintenant.

Merci pour la réponse.

 
Zolotai:

artmedia70:

Dites-moi ce que je fais de mal. Tout semble être correct.

if((i_buy==0 && i_sell==0) || y > Step)

Ou (i_buy==0 && i_sell==0) ou y > Step. Si l'un ou l'autre est vrai. Ensuite, nous le passons et ouvrons une commande.

Je ne comprends pratiquement pas la question...

Je ne sais pas ce qui nous manque, mais une commande peut être ouverte... C'est-à-dire que si cette condition est remplie et qu'un ordre doit être ouvert, alors

Je peux vous dire ce que ça dit ici :

Si i_buy et i_sell sont tous deux égaux à zéro, un ordre peut être ouvert. Ou, si l'un d'entre eux n'est pas égal à zéro, ou peut-être même les deux ne sont pas égaux, mais si y est supérieur à Step, alors ouvrez également un ordre.

 
artmedia70:

Je ne comprends pratiquement pas la question...

Je ne sais pas ce qui nous manque, mais une commande peut être ouverte... C'est-à-dire que si cette condition est respectée, un ordre doit être ouvert.

Je peux vous dire ce que ça dit ici :

"Ouvrir un ordre si i_buy et i_sell sont tous deux égaux à zéro. Ou si l'un d'entre eux n'est pas égal à zéro, ou peut-être même les deux ne sont pas égaux, mais si y est supérieur à Step, alors un ordre doit également être ouvert.



Je comprends bien dans la boucle. Nous procédons du premier ordre ouvert au dernier. Par conséquent, nous devrions prendre le prix de la dernière commande.

Il y a plus. J'ai mis Alert("d") dans OnTick. J'ai exécuté le code dans le testeur mais je n'ai pas entendu de bip ou de fenêtre.

 
Zolotai:

Dans le cycle de la fourche, si je comprends bien. Nous allons de la première commande ouverte à la dernière. Par conséquent, je prends le prix de la dernière commande.

J'ai aussi ceci. J'ai mis Alert("d") dans OnTick. J'ai exécuté le code dans le testeur mais je n'ai pas entendu de bip ou de fenêtre.

Les alertes dans le testeur sont affichées dans le journal du testeur. Mais le cycle, le saut, la sélection, la force brute ne sont pas clairs. Pouvez-vous avoir l'essentiel de ce que vous voulez obtenir ?
 

Bonjour !

Comment lutter contre le message "MetaEditor not found" lors de l'édition d'une EA ? MetaTrader build 600.

Je ne me souviens pas d'un tel problème dans les anciennes versions...

Cela peut-il s'expliquer par le fait que l'ordinateur sur lequel je travaille est plutôt de faible puissance et qu'il est chargé 50-75% du temps. J'ai 7 instances MT4 en cours d'exécution, mais dans des conditions normales (c'est-à-dire sans charge externe comme l'accès via TeamViewer et en essayant de lancer MetaEditor), ses performances sont suffisantes, et le Gestionnaire des tâches en arrière-plan montre une utilisation moyenne du CPU <=45-50% pendant 15-20 minutes.

Ce problème ne se produit pas dans 100% des cas et MetaEditor, après avoir fait preuve d'une patience et d'une persistance peu communes, fonctionnera à chaque fois à partir de la 5ème-10ème-25ème fois. Mais c'est vraiment ennuyeux d'essayer de démarrer MetaEditor pendant une demi-heure.

 
artmedia70:
Les alertes du testeur sont imprimées dans le journal du testeur. Et ce qu'il en est de la boucle, du saut, de la sélection et du forçage brutal n'est pas clair. Pouvez-vous obtenir l'essentiel de ce que vous voulez comme résultat ?


Je veux juste écrire le robot le plus simple. Ça marche par Martin, par lui-même.

C'est là que réside l'erreur.

y = OrderOpenPrice()-Ask ;

Je n'obtiens pas les nombres entiers que je pensais. Mais par exemple 0.0044. Comment puis-je obtenir 44, un nombre entier ?

 
Zolotai:


Je veux juste écrire le robot le plus simple. Ça marche par Martin, par lui-même.

C'est là que réside l'erreur.

y = OrderOpenPrice()-Ask ;

Je n'obtiens pas les nombres entiers que je pensais. Mais par exemple 0.0044. Comment puis-je obtenir 44, un nombre entier ?



int y = int((OrderOpenPrice()-Ask)/Point);