[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 88

 

Tout était ici C:\Users\======AppData\Local\VirtualStore\Program Files\====== - MetaTrader\\

vista

 

Veuillez me conseiller.

J'ai écrit un script simple (mettre deux pendants proches du marché pour le mettre sur le graphique avant la publication des nouvelles afin de ne pas avoir à le faire manuellement). Cela semble être beaucoup plus facile, mais cela ne fonctionne pas, aucun ordre n'est ouvert et le journal dit juste que le script est chargé avec succès, puis immédiatement supprimé dans la même seconde ! Il compile sans erreur. Je l'ai converti en forme expert, c'est-à-dire que j'ai ajouté init et deinit, pour le vérifier dans le testeur, cela a fonctionné. Mais, comme vous le comprenez, je n'ai pas besoin d'un Conseiller Expert, mais juste d'un script.

Qu'est-ce qui ne va pas ici ? Merci d'avance.

Voici le code du script :

#property copyright "alexey15"
#propriété lien ""
#property show_confirm

extern int SL = 15 ;
extern int TP = 90 ;
extern int DELTA = 15 ;
extern double LOT = 0.1 ;
extern int SLIP = 3 ;

//+------------------------------------------------------------------+
//| fonction de démarrage du programme de script |
//+------------------------------------------------------------------+
int start()
{
//----
double BUYPRICE = Ask + DELTA*Point ;
double SELLPRICE = Bid - DELTA*Point ;
int OPEN_ORDER ;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue) ;
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red) ;


//----
retour(0) ;
}
//+------------------------------------------------------------------+

 
wiwkin52:

Bonjour. Aidez-moi, s'il vous plaît. J'ai désinstallé le mt et tous les indicateurs qui vont avec, tous. Maintenant, je l'ai installé et tout est encore là. Que dois-je faire ? Il y a peut-être des copies des indicateurs et de tout le reste stockées quelque part ?

Avez-vous seulement désinstallé ou avez-vous également supprimé le dossier MT de Program Files ?
 
alexey15:

Veuillez me conseiller.

J'ai écrit un script simple (mettre deux pendants dans les deux sens près du marché pour le mettre sur le graphique avant la publication des nouvelles afin de ne pas avoir à le faire manuellement). Cela semble être beaucoup plus facile, mais cela ne fonctionne pas, aucun ordre n'est ouvert et le journal dit juste que le script est chargé avec succès, puis immédiatement supprimé dans la même seconde ! Il compile sans erreur. Je l'ai converti en forme experte, c'est-à-dire que j'ai ajouté ininit et deinit, pour le vérifier dans le testeur, cela a fonctionné. Mais, comme vous le comprenez, je n'ai pas besoin d'un Conseiller Expert, mais juste d'un script.

Qu'est-ce qui ne va pas ici ? Merci d'avance.

Voici le code du script :


Je l'ai vérifié. Votre script fonctionne.

Imprimez l'erreur juste au cas où :

int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int TicketBS,TicketSS;
TicketBS=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
TicketSS=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);
 if(TicketBS<=0 || TicketSS<=0)Print("Error = ",GetLastError());
//----
return(0);
}

 
alexey15:

Veuillez me conseiller.

J'ai écrit un script simple (mettre deux pendants dans les deux sens près du marché pour le mettre sur le graphique avant la publication des nouvelles afin de ne pas avoir à le faire manuellement). Cela semble être beaucoup plus facile, mais cela ne fonctionne pas, aucun ordre n'est ouvert et le journal dit juste que le script est chargé avec succès, puis immédiatement supprimé dans la même seconde ! Il compile sans erreur. Je l'ai converti en forme experte, c'est-à-dire que j'ai ajouté init et deinit, pour le vérifier dans le testeur, cela a fonctionné. Mais, comme vous le comprenez, je n'ai pas besoin d'un Conseiller Expert, mais juste d'un script.

Qu'est-ce qui ne va pas ici ? Merci d'avance.

Il fonctionne sur le nombre à quatre chiffres. Je ne l'ai pas vérifié sur les niveaux à cinq chiffres mais j'ai ajouté une vérification des contraintes sur StopLevel :

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
En principe, vous pouvez faire des ajustements de points pour quatre, cinq chiffres afin d'éviter les erreurs. Parce que le niveau Delta devrait être dix fois plus grand sur un cinq chiffres, c'est-à-dire 150 au lieu de 15, et les arrêts et les prises en conséquence...
.

Alors cela ressemblerait à ceci :

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
double PointX;

if(Digits==5 || Digits==3) PointX = Point * 10;    // Корректировка Point под трёх- пятизнак
if(Digits==4 || Digits==2) PointX = Point;

int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*PointX;
double SELLPRICE = Bid - DELTA*PointX;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*PointX,BUYPRICE+TP*PointX,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*PointX,SELLPRICE-TP*PointX,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
 

Bonjour !

Quelqu'un a-t-il des conseils sur les indices... ?

 
volshebnik:

Bonjour !

Quelqu'un a-t-il des conseils sur les indices... ?

C'est vrai, les indices.
 
splxgf:
C'est vrai, les indices.
Pas drôle) La question était ici - https://www.mql5.com/ru/forum/131277/page87 Mais comme les administrateurs du forum ne recommandent pas de répéter les questions, je ne l'ai pas postée à nouveau.
 
volshebnik:

Bonjour !

Pouvez-vous me dire ce qui ne va pas ? J'utilise le testeur sur GBPUSD - il ouvre les transactions comme il se doit. Je l'utilise sur l'indice dollar DXH1 - il n'ouvre pas beaucoup de transactions, l'erreur "130" - Arrêts incorrects. De plus, on ne sait pas très bien ce qui ne va pas - il s'ouvre et ne s'ouvre pas dans des situations similaires, mais plus que cela. Spread et niveau de stop pour le Dollar Index -100 et 200. Spread et niveau de stop pour GBPUSD -3 et 4. Prix dans l'indice du dollar, par exemple 78,150, dans la paire - 4 décimales. Mais il est comptabilisé.

Voici une partie du code :


Juste sur le dessus de ma tête :

1) SL et TP sont non normalisés ;

2) OrderSend utilise Digits lors de la normalisation, alors que la commande est passée par Symb.

Essayez de cette façon :

int opDigits=MarketInfo(Symb,MODE_DIGITS);
SL = NormalizeDouble(SL,opDigits);
TP = NormalizeDouble(TP,opDigits);
ОткрФрвверх = NormalizeDouble(ОткрФрвверх,opDigits);
ticketup=OrderSend(Symb, OP_BUYSTOP, Lot, ОткрФрвверх,0, SL, TP,NULL,A,0,вверх); // Ордер вверх
 
PapaYozh:


A vue de nez :

1) SL et TP ne sont pas normalisés ;

2) OrderSend utilise Digits pour la normalisation, alors que l'ordre est fixé par Symb.

Essayez de cette façon :

Merci beaucoup ! Cela a fonctionné, mais rarement, parfois la même erreur se produit - 130....... ( Est-il toujours nécessaire de normaliser les arrêts ou seulement sur les indices ? (juste sur les paires de devises, les stops ont toujours fonctionné, à mon avis, sans normalisation).