[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 87

 
Mathemat:

Désolé, mais c'est définitivement dans les Annales. L'ignorance de la langue anglaise n'est pas une excuse.

Je ne sais pas quel est le spread de l'EURUSD sur le micro, honnêtement. Vous êtes probablement banni de ce forum. Ces salauds pensent toujours à quelque chose pour vous empêcher d'entrer.

J'ai réussi à me connecter, merci.
 

Bonjour, s'il vous plaît, aidez-nous sur un point, je crois élémentaire.

int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,0,0) ;
Alert(GetLastError()) ;
return ;
}

Le script ouvre un ordre au marché et tout est OK. Mais si je fixe une valeur de SL ou de TP, je reçois l'erreur "Wrong Stop".

int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,Bid-50*Point,Bid+50*Point) ;
Alert(GetLastError()) ;
return ;
}

Ce code ne fonctionne plus. Qu'est-ce qu'il y a ? Je n'arrive pas à comprendre...

int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,1.31845,1.40000) ;
Alert(GetLastError()) ;
return ;
}

Et cela ne fonctionne pas même si j'entre des valeurs numériques de stop et de profit. La distance minimale entre l'ordre et l'ordre stop est acceptable.

 

Chers professionnels ! J'ai une question. j'ai un EA, il trade selon plusieurs critères, comment faire pour qu'il modifie les ordres séparément ? par exemple, j'ai ouvert deux ordres d'achat par des signaux différents, un niveau de breakeven est de 90pp avec des incréments de 40pp, un autre est de 50pp avec des incréments de 50pp. je n'ai pas pu le faire. Comme je l'ai déjà essayé, j'ai vu combien de signaux j'ai obtenu, et je ne sais pas comment les utiliser. Merci d'avance !

 
azik1306:

Chers professionnels ! J'ai une question. j'ai un EA, il trade selon plusieurs critères, comment faire pour qu'il modifie les ordres séparément ? par exemple, j'ai ouvert deux ordres d'achat par des signaux différents, un niveau de breakeven est de 90pp avec des incréments de 40pp, un autre est de 50pp avec des incréments de 50pp. je n'ai pas pu le faire. Comme je l'ai déjà essayé, j'ai vu combien de signaux j'ai obtenu, et je ne sais pas comment les utiliser. j'ai déjà essayé et je n'ai aucune idée de comment l'utiliser.

-Il est possible d'ouvrir des trades par différents signaux avec différents numéros Magic.

-Il est possible de mettre des "marques" (par exemple, le même niveau de chalutage) dans le champ de commentaire lors de l'ouverture des transactions et de l'analyser ensuite

sans voir le code de votre question, je ne comprends pas très bien ce que vous voulez faire exactement séparément

 

le code est approximativement le suivant :

for( int c=1 ; c<=OrdersTotal() ; c++) // Boucle d'ordres
{
OrderSelect(c-1,SELECT_BY_POS) ; // S'il y en a un autre
// Analyse des ordres :
if(OrderMagicNumber()<1000)

if (R==1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue) ;
return ;
}
si (R==2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue) ;
return ;
}
Si (R==1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue) ;
return ;
}
Si (R==2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue) ;
return ;
}
retour ;
}
//--------------------------------------------------------------------

for(c=1 ; c<=OrdersTotal() ; c++) // Boucle d'ordres
{
OrderSelect(c-1,SELECT_BY_POS) ; // S'il y en a un autre
// Analyse des ordres :
if (OrderMagicNumber()>1000)
if (Z==3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
return ;
}
if (Z==4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
return ;
}
si (Z==3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
return ;
}
si (Z==4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
return ;
}
return ;
}

//--------------------------------------------------------------------
// Valeurs des ordres
RefreshRates() ; // Rafraîchir les données
Min_Lot=MarketInfo(Symb,MODE_MINLOT) ; // Min. lots
Free =AccountFreeMargin() ; // Fonds libres
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valeur d'un lot
Step =MarketInfo(Symb,MODE_LOTSTEP) ; // Taille de changement d'étape

if (Lots > 0) // Si des lots sont définis, alors
Lts =Lots ; // travaillez avec eux
else // % de fonds gratuits
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Pour ouvrir

if(Lts < Min_Lot) Lts=Min_Lot ; // Pas moins que le minimum
if(Lts*One_Lot > Free) // Beaucoup plus cher que gratuit.
{
Alert(" Not enough money ", Lts," Lots") ;
return ; // Exit start()
}
//--------------------------------------------------------------- 8 --
// Ouverture d'ordres

{
if (Total<2 && Opn_B==true && B==false)
{
// critère d'ouverture d'un ordre d'achat. Acheter
RefreshRates() ; // Mise à jour des données
SL=Bid - New_Stop(StopLoss)*Point ; // Calcul du SL ouvert.
TP=Bid + New_Stop(TakeProfit)*Point ; // Calcul du TP ouvert.
Alert("Tentative d'ouverture d'un achat. Attente de réponse...") ;
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,y);//Ouvrir l'achat
if (Ticket > 0) // Cela a marché :)
{
Alert ("Opened Buy order ",Ticket) ;
B=true ;
S=false ;
Y=OrderMagicNumber() ;
R=1 ;
return ; // Exit start()
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // Réessayer
// Quitter start()
}
if (Total<2 && Opn_S==true && S==false) // Ouvrir des ordres. none +
{
Sleep(10000) ; // ouvrir Vendre crit. Sell
RefreshRates() ; // Mise à jour des données
SL=Ask + New_Stop(StopLoss)*Point ; // Calcul du SL ouvert.
TP=Ask - New_Stop(TakeProfit)*Point ; // Calcul du TP ouvert.
Alert("Tentative d'ouverture de vente. Attente de réponse...") ;
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,y);//Ouvrir Sel
if (Ticket > 0) // Cela a marché :)
{
Alert ("Sell order opened ",Ticket) ;
S=true ;
B=false ;
Y=OrderMagicNumber() ;
R=2 ;
return ; // Sortie start()
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // Réessayer
// Quitter start()
}

if (Total<2 && Opn_B1==true && B1==false)
{
RefreshRates() ; // Mettre à jour les données
SL1=Bid - New_Stop1(StopLoss1)*Point ; // Calculer SL ouvert
TP1=Bid + New_Stop1(TakeProfit1)*Point ; // Calcul du TP ouvert.
Alert("Attempting to open Buy. Waiting for reply...") ;
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL1,TP1,NULL,x);//Ouverture de l'achat
if (Ticket > 0) // Cela a marché :)
{
Alert ("Opened Buy order ",Ticket) ;
B1=true ;
S1=false ;
X=OrderMagicNumber() ;
Z=3 ;
return ; // Exit start()
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // Réessayer
// Quitter start()
}
if (Total<2 && Opn_S1==true && S1==false) // Ouvrir des ordres. none +
{
Sleep(10000) ; // ouvrir Vendre crit. Sell
RefreshRates() ; // Mise à jour des données
SL1=Ask + New_Stop1(StopLoss1)*Point ; // Calcul du SL ouvert.
TP1=Ask - New_Stop1(TakeProfit1)*Point ; // Calcul du TP ouvert.
Alert("Tentative d'ouverture de vente. Attente de réponse...") ;
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL1,TP1,NULL,x);//Ouvrir le Sel
if (Ticket > 0) // Cela a marché :)
{
Alert ("Sell order open ",Ticket) ;
S1=true ;
B1=false ;
X=OrderMagicNumber() ;
Z=4 ;
return ; // Exit start()
}
if (Fun_Error(GetLastError())==1) // Traitement des erreurs
continue ; // Réessayer
// Exit start()
}
break ; // Exit while
}

 
J'ai essayé à la fois orderselect et majik, mais EA confond les commandes.
 
azik1306:

le code est quelque chose comme ceci :


Joignez ces codes larges avec un fichier, ou au moins avec SRC (sélectionnable dans la barre d'édition supérieure), car il est fatigant de lire de telles lignes.
 
azik1306:

le code est approximativement le suivant :

for( int c=1 ; c<=OrdersTotal() ; c++) // Boucle d'ordre
{
OrderSelect(c-1,SELECT_BY_POS) ; // S'il y a un suivant
// Analyse des commandes :
si(OrderMagicNumber()<1000)
si(R==1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue) ;
retour ;
}
si (R==2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue) ;
retour ;
}
Si (R==1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue) ;
retour ;
}
si (R==2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue) ;
retour ;
}
retour ;
}
//--------------------------------------------------------------------
// En principe, vous n'avez pas besoin d'écrire quoi que ce soit d'autre : il ne sera pas exécuté de toute façon.

for(c=1 ; c<=OrdersTotal() ; c++) // Boucle de commande

{
OrderSelect(c-1,SELECT_BY_POS) ; // S'il y a un suivant
// Analyse des commandes :
si (OrderMagicNumber()>1000)
si (Z==3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
retour ;
}

si (Z==4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
retour ;
}
si (Z==3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
retour ;
}
si (Z==4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue) ;
retour ;
}
retour ; // Mais "pour être sûr", il y a aussi une "photo test" ;)
}

........ Rien d'autre ne compte .......

//

//--------------------------------------------------------------------
// Valeur de l'ordre

 
Merci, je vais essayer maintenant.
 
Le code a été corrigé, mais l'EA ne veut pas aborder chaque commande individuellement.