[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 767
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
Oui, une partie du code fonctionne et une partie du code indique 4107 et 130 erreurs et le plus intéressant est qu'ils prennent le prix d'une seule et même fonction et travaillent sur une seule et même fonction d'ouverture.
Essayez la structure suivante quelque part, cet exemple est pour mon cas .
si (OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice,0,Ask,0,0,Mg,0,Red)== -1)
Print("Erreur 1 OP_BUYSTOP "," Open=",OpenPrice," Stop Loss=",Ask," Trall=",TrallBuy," StopLoss=",StopLoss) ;
voir le résultat dans le journal à
Bonjour les connaisseurs. Aidez-moi à comprendre ce code...
//+------------------------------------------------------------------+
//| Calculer les positions ouvertes |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0 ;
//----
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICEA)
{
si(OrderType()==OP_BUY) achète++ ;
si(OrderType()==OP_SELL) vend++ ;
}
}
//---- volume des commandes de retour
if(buys>0) return(buys) ;
sinon retour(-vendues) ;
}
//+------------------------------------------------------------------+
//| Calculer la taille optimale du lot |
//+------------------------------------------------------------------+
double LotSize(){
double lotMM ;
if(PairsTraded==0){
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000) / 10 ;
} else {
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000 /PairsTraded) / 10 ;
}
si (MM==vrai){
si (lotMM < 0.1) lotMM = Lots ;
si (lotMM > 1.0) lotMM = MathCeil(lotMM) ;
si (lotMM > 100) lotMM = MaxLots ;
}
autre lotMM = Lots ;
retour (lotMM) ;
}
//+------------------------------------------------------------------+
//| Vérifier les conditions d'un ordre ouvert |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double CCI5,CCI15,CCI30,CCIH1,CCIH4 ;
int envoyer ;
//----MultitimeFrame Réglage du CCI
CCI5 = iCCI(NULL,PERIOD_M5,50,PRICE_CLOSE,0) ;
CCI15 = iCCI(NULL,PERIOD_M15,50,PRICE_CLOSE,0) ;
CCI30 = iCCI(NULL,PERIOD_M30,50,PRICE_CLOSE,0) ;
CCIH1 = iCCI(NULL,PERIOD_H1,50,PRICE_CLOSE,0) ;
//----
//---- conditions de vente
if ((CCIH1<0)&&(CCI30<0)&&(CCI15<0)&&(CCI5<0))//op vendre
{
send=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,MagicName+"-Sell",MAGICEA,0,Red) ;
retour ;
}
//---- conditions d'achat
if ((CCIH1>0)&&(CCI30>0)&&(CCI15>0)&&(CCI5>0))//op acheter
{
send=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,MagicName+"-Buy",MAGICEA,0,Blue) ;
retour ;
}
}
//----
//+------------------------------------------------------------------+
//| Vérifier les conditions d'ordre de fermeture |
//+------------------------------------------------------------------+
void CheckForClose()
{
//----
//----
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=MAGICEA || OrderSymbol()!=Symbol()) continuer ;
//---- type d'ordre de contrôle
si (OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-TrailingStop*Point > OrderStopLoss()){
si (Bid > OrderOpenPrice()+TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,0,0,White) ;
}
} else {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-1*Point,0,0,White) ;
}
si (OrderSymbol()==Symbol() && OrderType()==OP_SELL && Ask-TrailingStop*Point < OrderStopLoss()){
si (Ask < OrderOpenPrice()-TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,White) ;
}
} else {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+1*Point,0,0,White) ;
}
}
//----
}
//+------------------------------------------------------------------+
//| Démarrer la fonction |
//+------------------------------------------------------------------+
void start()
{
//---- vérifier l'historique et le commerce
si(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par le symbole actuel
si(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
sinon CheckForClose() ;
//----
}
//+------------------------------------------------------------------+
Si je veux qu'il n'ouvre qu'une seule position et que je ne veux pas qu'il s'ouvre à nouveau après que je l'ai fermé, mais qu'il ouvre une position après que je l'ai fermé, il s'ouvre à nouveau.
Bonjour les connaisseurs. Aidez-moi à comprendre ce code...
... code ...Je ne comprends pas ce que j'ai fait de mal. J'ai besoin qu'il n'ouvre qu'une seule transaction sous condition formée et après sa fermeture jusqu'à la prochaine condition ne s'ouvre plus... mais ce que j'ai c'est qu'il s'ouvre, je ferme par exemple une fenêtre et il s'ouvre à nouveau au même endroit pourquoi ?
Vous l'avez et elle s'ouvrira tant que la condition d'ouverture existe.
Vérifier que la position a déjà été ouverte par ce signal, par exemple, bool OpnPose = false ; avant d'ouvrir une position par ce signal, vérifier l'indicateur et s'il n'est pas activé (OpnPose == false), ouvrir la position. Lorsqu'il s'ouvre, s'il s'est réellement ouvert et est sur le marché, vous activez le drapeau d'ouverture par ce signal : OpnPose = true ; dès qu'un nouveau signal arrive, vous écartez celui-ci :
OpnPose = false ;
Merci.
Oui, nous pouvons faire plus simple, après le déclenchement du signal, mettre un compteur pour que rien d'autre ne s'ouvre dans les 2 ou 3 bougies, de sorte que s'il se ferme manuellement, rien d'autre ne s'ouvre, et le compteur annule l'interdiction d'ouverture après quelques bougies.
Et après la levée de l'interdiction, l'EA remettra l'ordre sur le marché... Et s'il décide de fermer la position après 10, 15, 20 bougies et de ne pas la rouvrir, même si le signal est toujours là ? Vendredi, par exemple...
ma question est de savoir comment faire s'il y a un nouvel ordre à partir de l'exemple de juste le contraire s'il y a un ordre fermé "if(TotalHistoryOrders<OrdersHistoryTotal())// un autre ordre est apparu dans l'historique" et j'ai besoin que celui ouvert soit aussi déterminé
ma question est de savoir comment faire s'il y a un nouvel ordre à partir de l'exemple de juste le contraire s'il y a un ordre fermé "if(TotalHistoryOrders<OrdersHistoryTotal())// un autre ordre est apparu dans l'historique" et j'ai besoin que celui ouvert soit aussi déterminé
Lorsque vous essayez toutes les commandes et que vous éliminez celles qui ne sont pas nécessaires, comptez le nombre, mémorisez-le et si le nombre a changé avec une nouvelle boucle, cela signifie qu'une nouvelle commande est apparue ou a disparu.
J'ai juste besoin d'appeler la fonction et c'est tout, j'ai juste besoin d'une ligne "Si les ordres sont supérieurs à un, alors ....". c'est tout" et vous me proposez une fonction entière
C'est ainsi que je stocke les données relatives aux commandes