[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

 
FoxUA:

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.

 
mydone:

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 ;

 
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.
 

Merci.

 
Techno:
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 passera à nouveau un ordre sur le marché... Que se passe-t-il si l'EA décide de fermer la position après 10, 15 ou 20 chandeliers et ne la rouvre pas, même si le signal est toujours présent ? Vendredi, par exemple...
 
artmedia70:
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...
Même après une bougie, il y aura un signal complètement différent qui devra être pris en compte. Il suffit d'attendre 3 chandeliers pour que le premier signal disparaisse. A propos, vous utilisez un indicateur avec des temps de 5, 15, 30 et 60, donc 3 chandeliers de 30 ou 15 minutes seront suffisants.
 

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é

 
FoxUA:

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 passez en revue toutes les commandes et que vous éliminez celles qui ne sont pas nécessaires, comptez le nombre et enregistrez-le. Si le nombre change avec une nouvelle boucle, cela signifie qu'une nouvelle commande a été ouverte ou a disparu...
 
Techno:
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

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic