[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 69
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
S'il vous plaît, que quelqu'un regarde mon message précédent (à la page 67). Je ne trouve pas l'erreur - les ordres en attente ne sont pas définis.
Il n'y a pas d'erreur. Tu devrais être plus prudent.
Il n'y a pas d'erreur. Vous devez être plus prudent
Non, non, non, non. Vous regardez le mauvais poste. Il y en a un autre juste en dessous :)). La version que vous avez vérifiée ne spécifie pas le niveau à partir du prix actuel (seulement le prix actuel) auquel le pendule doit être réglé. Merci pour vos commentaires.
Non, non, non. Vous avez regardé un mauvais poste. Il y en a un autre juste en dessous :)). La version que vous avez vérifiée ne contient pas le niveau du prix actuel (seulement le prix actuel), auquel le pendentif doit être fixé. Merci pour vos commentaires.
Quelque chose avec l'appel de la fonction OPENORDER() ou la fonction elle-même.
Cela fonctionne comme suit
si (BUYSTOP)
{
si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0) ;
}
Quelque chose avec l'appel de la fonction OPENORDER() ou la fonction elle-même.
Cela fonctionne comme suit
si (BUYSTOP)
{
si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0) ;
}
Aaaaaaaaah !!! Dieux de l'informatique ! !! Je l'ai parcouru dix fois ! Pourquoi ça ne marche pas ? ! L'essentiel est l'ouverture du marché. Ceux qui sont en suspens sont rédigés exactement sur le même principe. Que manque-t-il ? :)))))))
Veuillez indiquer comment insérer TrailingStopFrCnSAR_v2 dans Expert Advisor, ce qui est décrit dans le tutoriel ?
Comment désactiver le suivi des ordres, afin qu'il fonctionne lorsqu'un autre EA place un ordre en attente ou ouvre un ordre ?
Urrrrrrra !!!!!!!! J'ai trouvé le bug !
Si quelqu'un est intéressé, voici une version fonctionnelle :
#property copyright "Copyright © 2010, Khlystov Vladimir"
#p
lien de propriété "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0 ; //niveau d'exposition du SL, si 0, le SL n'est pas exposé.
extern int int takeprofit = 0 ; //t niveau de TP, si 0, TP n'est pas exposé
extern int Magic = 123456 ; //numéro d'une commande
extern bool BUY = false ; //ouverture de l'ordre BUY
extern bool SELL = false ; //ouverture de l'ordre SELL
extern bool BUYSTOP = false ; //ouverture de l'ordre BUYSTOP
extern bool SELLSTOP = false ; //ouverture de l'ordre SELLSTOP
extern double Lot = 0.1 ; // volume d'ordre
extern int slippage = 3 ; //écart de prix maximal autorisé pour les ordres au marché
extern int DistanceSet = 20 ; //Distance du marché
//--------------------------------------------------------------------
double SL,TP ;
//--------------------------------------------------------------------
int start()
{
si (BUY)
{
si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Acheter") ;
}
si (VENTE)
{
si (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Vendre") ;
}
si (BUYSTOP)
{
si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Buy Stop") ;
}
si (SELLSTOP)
{
si (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Sell Stop") ;
}
retour(0) ;
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err ;
while (true)
{ error=true ;
si (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0) ;
si (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,",Magic,0) ;
si (ord=="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0) ;
si (ord=="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,",Magic,0) ;
if (error==-1) //échec
{
ShowERROR() ;
err++;Sleep(2000);RefreshRates() ;
}
si (erreur || err >10) retour ;
}
retour ;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError() ;
switch ( err )
{
cas 1 : retour ;
cas 2 : Alert("No connection to the trade server ",Symbol());return ;
cas 3 : Alert("Erreur paramètres incorrects ",Symbol());return ;
cas 130 : Alert("Error close Ticket stops ",Symbol());return ;
cas 134 : Alert("Pas assez d'argent ",Symbol());return ;
cas 146 : Alert("Error Trade Subsystem is busy ",Symbol());return ;
cas 129 : Alert("Error Wrong price ",Symbol());return ;
cas 131 : Alert("Error Incorrect volume ",Symbol());return ;
cas 4200:Alert("Erreur L'objet existe déjà ",Symbol());return ;
défaut : Alert("Error ",err," ",Symbol());return ;
}
}
//--------------------------------------------------------------------
Merci beaucoup à tous ceux qui ont participé à la discussion ! !! Nulle part sans toi ! :)))))
Urrrrrrra !!!!!!!! J'ai trouvé l'erreur !
Un grand merci à tous ceux qui ont participé à la discussion ! !! Nulle part sans toi ! :)))))
vous avez toujours une erreur dans votre code.
N'oubliez pas : les arrêts et les prises dans les ordres en attente ne sont pas comptés à partir du prix actuel, mais à partir du prix d'ouverture de l'ordre.
AIDE ! Dites-moi, s'il vous plaît, si je ferme une partie d'une position (par exemple, un ordre pour 1 lot, et fermer 0,5 lot) le ticket OrderClose doit changer ? Mon testeur dit que c'est le cas... Comment l'éviter ? Voici un morceau de code de fermeture...
1 2011.01.31 06:57 vendre 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 fermer 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 vendre 2 2.04 1.36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 fermer 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 vendre 3 1.64 1.36177 0.00000 0.00000 0.00000 10125.98
Autre question : je veux diviser mon ordre en 4 parties et fermer chacune d'entre elles lorsque Cls_S==vrai se déclenche. J'ai essayé d'utiliser le compteur... Ça ne marche pas...
Quelqu'un peut-il me donner une idée ?
Merci d'avance !!!!
if (Tip==1 && ((Cls_S0==vrai&&TotClS==0)||(Cls_S1==vrai&&TotClS==1)
||(Cls_S2==vrai&&TotClS==2)||(Cls_S3==vrai&&TotClS==3)) // Un ordre de vente est ouvert.
{ // et il existe un critère pour le fermer
Alert("Attempting to close 0.2 Lot Sell ",Ticket,". En attente de réponse...") ;
RefreshRates() ; // Rafraîchit les données
Ans=OrderClose(Ticket,LotCt,Ask,5) ;
if (Ans==true) // Cela a marché :)
{
TotClS++ ;
Alert ("Closed 0.2 Lot Sell ",Ticket) ;
break ; // Sortie de la boucle fermée
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // Réessayer
return ; // Sortie de start()
}
break ; // Sortie de while
J'ai fait un dessin temporaire du tampon flag[] - il est vide, mais pourquoi ? Où est mon erreur ?
Je l'ai juste corrigé un peu, pour que ça montre quelque chose.
- Je mets l'indicateur dans une fenêtre séparée, alors vous pouvez le remettre
- Le tableau macd[] était suspendu dans l'air, il est devenu un indicateur, ce qui a augmenté la précision.
- Fixe ta condition complexe pour ouvrir, mets une condition simple pour régler
- a changé la condition pour le drapeau, donc au moins ça marche.
Ensuite, vous pouvez introduire progressivement des conditions, vous verrez immédiatement où se trouve le bug.