Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 99
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
Dratuti. Comment faire un panneau comme celui-ci ?
Dratuti. Comment faire un panneau comme celui-ci ?
Dratuti. Comment faire un panneau comme celui-ci ?
Vitaly Muzichenko,Artyom Trishkin, merci.
Continuer à écrire un autre piggybacking sur martingale, perdre même dans le testeur, sinon comment faire pousser un élan.
Il existe actuellement un paramètre souhaité, qui devrait être responsable de la possibilité d'ouvrir la commande suivante après que la ou les commandes précédentes aient été fermées.
il y a 2 scénarios
1) si la valeur est vraie
ouvrir une commande
processus
fermer
et rouvrir
2) si faux
Ouvrir la commande
Processus
Fermer
et ensuite faire ExpertRemove
le problème est que ces deux conditions s'excluent mutuellement, mais qu'elles doivent être combinées en 1 EA puisque
1) la valeur est fixée au départ
2) la valeur est fixée dans les conditions d'entrée et de traitement et acceptée pour le traitement (si vrai, ouvert)
3) après la fermeture, nous mettons le faux
Si quelqu'un s'intéresse à ces choses, je serais heureux d'entendre mes variantes.C'est simple :
Nous avons des problèmes de logique.
Tout est simple :
Quelque chose ne semble pas normal, si c'est vrai - vous devriez être en train de couper du chou, pas dans les buissons).
Veuillez me conseiller. Le conseiller expert n'ouvre pas d'ordres dans le terminal. La compilation est en cours, selon les graphiques les ordres devraient être ouverts. Mais ils ne le sont pas. Je joins le code.
double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//déterminer le nombre de lots
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);// paramètres MACD de la barre actuelle
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//les paramètres MACD de la barre précédente
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//les paramètres MACD de la ligne principale décalés de 2 barres
double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//Paramètres Trailing Stop par paramètres ParabolicSAR de la barre courante
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);/Paramètres du StopLoss par les paramètres ParabolicSAR de la barre précédente
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//paramètres ParabolicSAR de la barre courante
double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//ParabolicSAR de la barre précédente
//+------------------------------------------------------------------+
//| Fonction tick expert|
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Heure de la barre actuelle
bool New_Bar=false ; // Marque une nouvelle barre.
int ticket,total,cnt ;
//---------------------------------------------------------------------------
{
New_Bar=false ; // Pas de nouvelle barre.
if(Time[0]==New_Time) // Compare les temps
{
New_Bar=true ; // La nouvelle barre est prise en compte.
if(New_Bar==false) // Si une barre n'est pas nouvelle
return ; // ...puis sortie
}
}
total=OrdersTotal();// Détermination du nombre de commandes
si(total<1)
{
//---pas d'ordres ouverts
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
//Contrôle de la disponibilité des fonds pour ouvrir le lot minimum
{
Print("Pas assez de fonds. Fonds libres = ",AccountFreeMargin()) ;
retour ;
}
//-- condition pour l'ouverture d'une position longue (BUY)
si((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green) ;
if(ticket>0)//vérification de la position ouverte
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
sinon
Print("BUY order open error : ",GetLastError()) ;
retour ;
}
}
//-- condition pour l'ouverture d'une position courte (SELL)
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red) ;
if(ticket>0)//vérification de la position ouverte
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre de vente ouvert : ",OrderOpenPrice()) ;
sinon
Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;
retour ;
}
}
//--- sortir du bloc "aucun ordre ouvert".
}
//--il est important d'entrer correctement sur le marché mais il est encore plus important d'en sortir correctement.
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // vérifier le numéro magique de la commande
OrderSymbol()==Symbol()) // vérification du symbole de l'ordre
{
//--- position longue ouverte
si(OrderType()==OP_BUY)
{
//--- doit être fermé ?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//--- ordre de fermeture et de sortie
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError()) ;
retour ;
}
//------------------Modifier l'ordre par StopLoss
if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Erreur de modification de commande. Code d'erreur=",GetLastError()) ;
sinon
Print("Le prix du Stop Loss de l'ordre a été modifié avec succès ;)
retour ;
}
}
else // aller court
si(OrderType()==OP_SELL)
{
//--- doit être fermé ?
si((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//--- ordre de fermeture et de sortie
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError()) ;
retour ;
}
//-----------------Modifier l'ordre par StopLoss
if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Erreur de modification de commande. Code d'erreur=",GetLastError()) ;
sinon
Print("Le prix du Stop Loss de l'ordre a été modifié avec succès ;)
retour ;
}
}
}
//-------------------------------------------------------------------------------------------------------
Oui, c'est plus simple que ça.
mais que se passe-t-il si nous gardons ceci comme solution de repli et faisons ce qui suit
vérifier l'état et...c'est-à-dire comment bloquer l'entrée pour la suite des opérations.