[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 77

 

Bonjour à tous

Veuillez me conseiller, pourquoi scoop achète, mais lorsque les conditions sont réunies, il ne ferme pas la position.

/---- paramètres d'entrée
extern int PerRSI=8 ;
extern int MagicNamber=77771 ;
extern double Lots=1.0 ;
//+------------------------------------------------------------------+
int start()
{
int
cnt, // indice de commande
ticket, // numéro d'identification de la commande
total ; // nombre de commandes déjà ouvertes
double
rsi_0, // Valeur. rsi_0 courant
rsi_1 ; // Valeur. rsi_1 1ère barre
si (Bars<100)
{
Print("barres inférieures à 100") ;
retour(0) ;
}
total=OrdersTotal() ;
si(total<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0) ; // Barre actuelle
rsi_1=iRSI(NULL,0, PerRSI,0,1) ; // Barre actuelle plus 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Si la ligne a franchi 30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green) ;
si(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre de vente ouvert : ",OrderOpenPrice())
}
else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;
retour(0) ;
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES) ;
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // s'agit-il d'une position ouverte ? OP_BUY ou OP_SELL
{
if(OrderType()==OP_BUY) // position longue ouverte
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // si la ligne a franchi 70
{
OrderClose(OrderTicket(),1,Bid,3,Violet) ; // fermer la position

return(0) ; // sortie
}}}}}}
 
KoZaNOStra >> :

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green) ;
si(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre de vente ouvert : ",OrderOpenPrice())
}


Qu'est-ce que c'est que ça ? À quoi sert la fonction OrderSelect() ?


Le reste est difficile à comprendre car le code est présenté sans indentations et on ne peut pas suivre les parenthèses - je ne veux pas gâcher ma vision.

 
Comment décolorer le graphique pour montrer le mouvement du bord de fuite ?
 
anat писал(а) >>

Merci beaucoup pour toute votre aide ! Et aussi au condor - y. Il y a maintenant un autre problème. Nous avons, par exemple, ouvert 10 positions d'achat. Lorsque nous fermons 1, 2, 3, etc. positions en utilisant le stop ou le take, l'Expert Advisor commence à acheter, s'il y a un signal d'achat. Mais j'ai besoin que TOUS les ordres soient d'abord fermés, et ensuite, quand il n'y a plus de position ouverte, un nouveau cycle de négociation commencera. En d'autres termes, nous avons besoin d'un compteur. Ouvrez d'abord les positions jusqu'à un nombre donné, puis, lorsque les positions sont fermées, jusqu'à zéro. Je vous remercie d'avance.

C'est exactement comme ça que ça se passe maintenant. Tant qu'il y a au moins un ordre ouvert, un autre ne s'ouvrira pas. Si vous voulez faire autrement, vous devez être plus précis. Ensuite, vous devez choisir - si vos ordres sont ouverts s'il y a des positions ouvertes ou non.

 

Voici une question :

Existe-t-il des outils de débogage dans MetaTrader ?

Veuillez partager vos expériences - comment déboguez vous les scripts et les EAs ?

Il s'agit de chiffres, de paramètres, de visions d'algorithmes, etc. Comment attrape-t-on les bogues dans l'algorithme ?

 
Ryan_ryan >> :

Voici une question :

Existe-t-il des outils de débogage dans MetaTrader ?

Veuillez partager vos expériences - comment déboguez vous les scripts et les Expert Advisors ?

Si j'ai besoin de faire du débogage, je le fais par Print()

Mais dans la plupart des cas, ce besoin ne se fait pas sentir.

 

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Pouvez-vous me dire pourquoi, dans cette conception, après la fermeture d'un ordre, "timeout.wav" sonne d'abord, "no error" égal au nombre d'ordres à fermer (si 2 ordres sont fermés, "no error" apparaîtra deux fois, etc.) et ensuite "money.wav" sonne. Ce qui est amusant, c'est que cela ne concerne que les transactions courtes. Pour les transactions longues, tout fonctionne bien. Qui sait quel est le problème et comment le résoudre ?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Pouvez-vous me dire pourquoi, dans cette conception, après la fermeture d'un ordre, "timeout.wav" sonne d'abord, "no error" égal au nombre d'ordres à fermer (si 2 ordres sont fermés, "no error" apparaîtra deux fois, etc.), et ensuite "money.wav" sonne. Ce qui est amusant, c'est que cela ne concerne que les transactions courtes. Pour les transactions longues, tout fonctionne bien. Qui sait quel est le problème et comment le résoudre ?

Le support n'est-il pas après le premier si fermé ?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Cette ligne tombe en quelque sorte.

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Pouvez-vous me dire pourquoi, dans cette conception, après la fermeture d'un ordre, "timeout.wav" sonne d'abord, "no error" égal au nombre d'ordres à fermer (si 2 ordres sont fermés, "no error" apparaîtra deux fois, etc.), et ensuite "money.wav" sonne. Ce qui est amusant, c'est que cela ne concerne que les transactions courtes. Pour les transactions longues, tout fonctionne bien. Qui sait quel est le problème et comment le résoudre ?


La condition du premier opérateur conditionnel "si" n'affecte que l'opérateur qui le suit (la ligne suivante).

Les autres sont exécutés SANS que l'ordre soit fermé. C'est-à-dire que même s'il n'y a pas de commande pour fermer la commande, l'un des sons de jeu fonctionnera.

La bonne méthode est la suivante :

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()== mnum) 
  {
     bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
     if ( sellclose) 
        PlaySound("money.wav");
     else 
     {
        Print("Ошибка : ", Error(GetLastError()));
        PlaySound("timeout.wav");  
     }
  }
 
infinum13 >> :

La parenthèse n'est-elle pas fermée après le premier "si" ?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Cette ligne ne se ferme pas.

Si(OrderType()==OP_SELL && OrderMagicNumber()==mnum alors tombe, mais fonctionne le truc sur les transactions courtes et longues, mais l'erreur "No error" avec le son "timeout.wav" ne fonctionne que pour les transactions courtes, pour les transactions longues, cela fonctionne bien, il y a les mêmes crochets et tout est identique.

Raison: