[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 - 5. - page 203

 
hoz:


Pour commencer, habituez-vous à mettre les supports là où vous en avez besoin. Comme ça :

Et en général, vous devriez avoir une fourchette de temps, pas une valeur fixe. Votre logique n'est pas du tout correcte. Pas 1 heure OU 3 heures, mais 1 heure à 3 heures ! !!
Merci. Je me suis trompé.
 
stater:
Bonjour, pourriez-vous me donner une commande (s'il y en a une) pour sélectionner aléatoirement un nombre soit 0 soit 1, merci d'avance ?
int x =MathRand() % 2 ;
 

Pendant le test de l'Expert Advisor j'ai trouvé des erreurs d'exécution de code :
- l'exécution de la boucle for(i=0;i<OrdersTotal();i++) est interrompue au prochain tick (ci-dessous en Gras),
- Les ordres d'achat sont sélectionnés et fermés dans n'importe quel ordre.

Pouvez-vous me dire comment en trouver la cause et la réparer ?
Le code du programme et le rapport du journal du testeur.

Code du programme.

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Droits d'auteur 2012, MetaQuotes Software Corp.
//| Test de l'opérateur de boucle.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#propriété lien ""
//+------------------------------------------------------------------+
//Déclarer des variables|
//+------------------------------------------------------------------+
int Mn=357;//Numéro magique
int i;//Indice du compteur d'itération
double PriTP;//TP series
int Tick;//Compteur de ticks
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert|
//+------------------------------------------------------------------+
int init()
{
//----Setting orders
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0 :",OrdersTotal=",OrdersTotal());//
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation de l'expert|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert|
//+------------------------------------------------------------------+
int start()
{
//----Compteur de coups
Tick++;//Tick
//----Close Ordres d'achat
for(i=0;i<OrdersTotal();i++)//initialiser la boucle
{
Print("Kc1 :"," Tick=",Tick," i=",i);//Message
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Sélectionner l'ordre i
{
if(OrderSymbol()==Symbol())//Symbole
{
if(OrderMagicNumber()==Mn)//Numéro d'identification
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Type de transaction de l'ordre actuellement sélectionné
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Clôture de la position
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}// Fermé si(OrderMagicNumber()==Mn)
}// Fermé si(OrderSymbol()==Symbol()
}// Fermé si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}// Fermé for(i=0;i<OrdersTotal();i++)
//----
retour(0) ;
}

Entrées du carnet de bord du testeur.

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=4 i=0
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=3 i=1
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #4 acheter 2.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 at 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #2 acheter 1.00 EURUSD à 1.25773 sl : 1.25516 tp : 1.26023 au prix de 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #5 acheter 3.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #3 acheter 1.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 à 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #1 acheter 0.50 EURUSD à 1.25773 sl : 1.25416 tp : 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc0 : OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : open #7 sell stop 3.00 EURUSD at 1.25473 sl : 1.25916 tp : 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : open #6 buy limit 1.00 EURUSD at 1.25623 sl : 1.25366 tp : 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #5 acheter 3.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #4 acheter 2.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #3 acheter 1.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : open #2 buy 1.00 EURUSD at 1.25773 sl : 1.25516 tp : 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #1 acheter 0.50 EURUSD à 1.25773 sl : 1.25416 tp : 1.26123 ok
2013.03.01 12:11:21 PM Test de Poligon1 commencé
2013.03.01 12:11:21 18 18:30 Poligon1 EURUSD, M15 : chargé avec succès

Regards. Shurkin

 
Shurkin:

En testant l'Expert Advisor, nous avons détecté quelques erreurs dans le code :
- l'exécution de l'opérateur de boucle for(i=0;i<OrdersTotal();i++) est interrompue par le tick suivant (indiqué en gras ci-dessous),
- Les ordres d'achat sont sélectionnés et fermés dans un ordre aléatoire.

Regards. Shurkin


1. Les ordres ne peuvent pas être ouverts dans la fonction init() (dans le testeur de stratégie, mais cela ne fonctionnera pas sur la démo).

2. Lorsque vous clôturez des ordres, comptez de la fin au début, et non l'inverse, comme vous l'avez fait.

 
Shurkin:

Lors du test de l'Expert Advisor, des erreurs d'exécution du code ont été détectées :
- l'exécution de l'instruction en boucle for(i=0;i<OrdersTotal();i++) est interrompue par le tick suivant (souligné en gras ci-dessous),
- les ordres d'achat sont sélectionnés et fermés dans un ordre aléatoire.

Pouvez-vous me dire comment trouver la cause et la réparer ?
Je vous fournis le code du programme et le rapport du journal du testeur.

Le code du programme.

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| Test de l'opérateur de boucle.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#lien de propriété ""
//+------------------------------------------------------------------+
//|Variables déclarées|
//+------------------------------------------------------------------+
int Mn=357;//Nombre magique
int i ;//Compteur d'itérations
double PriTP;//Série deTP
int Tick;//Compteur de ticks
//+------------------------------------------------------------------+
//| fonction d'initialisation des experts |
//+------------------------------------------------------------------+
int init()
{
//----Set orders
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE)//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0 :"," OrdersTotal=",OrdersTotal());//PriTP
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0) ;
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----Counter Tick
Tick++;//Tick
//----Close BUY Orders
for(i=0;i<OrdersTotal();i++)//initialiser la boucle
{
Print("Kc1 :"," Tick=",Tick," i=",i);//Envoyer le message
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Sélectionner l'ordre i
{
if(OrderSymbol()==Symbol())//Symbole
{
if(OrderMagicNumber()==Mn)//Numéro d'identification
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Type d'opération de l'ordre actuellement sélectionné
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Clôture de la position
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}/Closed if(OrderMagicNumber()==Mn)
}// Closed if(OrderSymbol()==Symbol()
}// Closed if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}// Fermé for(i=0;i<OrdersTotal();i++)
//----
return(0) ;
}

Entrées du journal du testeur.

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=4 i=0
2013.03.01 12:12:09 2012.03 03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #4 buy 2.50 EURUSD at 1.25773 sl : 1.25616 tp : 1.25923 at price 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #2 buy 1.00 EURUSD à 1.25773 sl : 1.25516 tp : 1.26023 au prix de 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #5 buy 3.50 EURUSD at 1.25773 sl : 1.25616 tp : 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #3 acheter 1.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 au prix 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : close #1 acheter 0.50 EURUSD à 1.25773 sl : 1.25416 tp : 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc1 : Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : Kc0 : OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : open #7 sell stop 3.00 EURUSD at 1.25473 sl : 1.25916 tp : 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : open #6 buy limit 1.00 EURUSD at 1.25623 sl : 1.25366 tp : 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #5 achat 3.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #4 achat 2.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : ouvert #3 acheter 1.50 EURUSD à 1.25773 sl : 1.25616 tp : 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15 : open #2 buy 1.00 EURUSD at 1.25773 sl : 1.25516 tp : 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00:00 Poligon1 EURUSD,M15 : ouvert #1 acheter 0.50 EURUSD à 1.25773 sl : 1.25416 tp : 1.26123 ok
2013.03.01 12:11:21 Poligon1 test démarré
2013.03.01 12:11:21 Poligon1 EURUSD,M15 : chargé correctement

Regards. Shurkin

Je n'ai pas regardé tout votre bordel (il faut utiliser le bouton SRC au-dessus du champ de saisie pour le joindre) - ce n'est pas agréable de scruter du code partout sur la page, mais la première chose qui a attiré mon attention était une ligne for(i=0 ; i<OrdersTotal() ; i++) . Pour la fermer, vous devez utiliser la boucle inverse : for(i=OrdersTotal()-1; i>=0 ; i -- )
 
Roger:
int x =MathRand() % 2 ;


Pourquoi renverrait-il 0 ou 1 au lieu d'un autre nombre ? Selon l'aide,MathRand() retourne un entier pseudo-aléatoire entre 0 et 32767
 
hoz:

Et pourquoi renverrait-il 0 ou 1 au lieu d'un autre nombre ? Après tout, selonMathRand() renvoie un nombre entier pseudo-aléatoire compris entre 0 et 32767.

C'est le reste de la division! Regardez dans les étapes arithmétiques et dans votre imprimante !

Mettez-le et vous ne verrez que deux résultats en alternance :

  int x =MathRand() % 2;
  Print("x =",x);
 
Salutations à tous ! Je veux savoir comment arrêter le Conseiller Expert, lorsque les conditions d'entrée sur le marché sont remplies, il commence à écrire dans le fichier journal "Ordre déclenché !" et le fait plusieurs dizaines de fois par minute, en conséquence le fichier journal devient cosmiquement énorme. Comment puis-je faire en sorte qu'elle n'écrive qu'une seule fois, et pas avant la fermeture de la position, car elle peut rester suspendue pendant quelques heures...
 
Allis:
Salutations à tous ! Je veux savoir comment arrêter le conseiller expert, lorsque les conditions pour entrer sur le marché sont réunies, il commence à écrire dans le fichier journal "Ordre déclenché !" et le fait quelques dizaines de fois par minute, en conséquence le fichier journal devient cosmiquement énorme. Comment faire pour qu'elle n'écrive qu'une seule fois, et pas avant de fermer la position, car elle peut rester suspendue pendant quelques heures...
Bonjour, Allis ! L'impression devrait être prescrite, où il n'y a pas de lecture par les tics ! Je mets dans l'impression, s'il y a une erreur, et s'il a ouvert, et ainsi sera écrit dans le magazine qui a ouvert, et seulement une fois !
 
borilunad:
Salut Allis ! L'impression doit être prescrite là où il n'y a pas de lecture de coche ! Je mets dans l'impression s'il y a une erreur, et si elle s'est ouverte, et ainsi il est prescrit dans le carnet de bord qu'elle s'est ouverte, et une seule fois !

Vous êtes un magicien)) Merci !