okidoki543: Merci, mais j'aimerais une solution précise. Ainsi, la barre actuelle n'est pas prise en compte, mais seulement les barres précédentes.
Pour avoir une solution exacte, vous avez besoin de votre code, à partir duquel vous voulez obtenir une solution exacte. Mais vous n'avez pas le code. Donc vous n'avez pas non plus de solution...
всokidoki543: Merci, mais j'aimerais une solution précise. Ainsi, la barre actuelle n'est pas prise en compte, mais seulement les barres précédentes.
Mince, j'ai creusé dans le code de quelqu'un d'autre, encore une fois à vue d'œil pour essayer de changer cette pièce. Dans ce cas, c'est probablement PRICE_CLOSE ou 0 qui devrait être...
MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1); // Текущее значение 1-й МА
MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 2); // Предыдущее значение 1-й МА
MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1); // Текущее значение 2-й МА
MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 2); // Предыдущее значение 2-й МА
Voici le code, j'ai changé les décalages de 0 à 1. Cela aidera-t-il ?
//============================================================================================ // // // // // //============================================================================================ inttern MA1_Period=7 ; // 1ère période MA extern intMA2_Period=13 ; // Période de la 2ème MA extern int MA1_Method=1 ; // Méthode de calcul MA1 (SMA=0,EMA=1,SMMA=2,LWMA=3) extern int MA2_Method=1 ; // Méthode de calcul MA2 (SMA=0,EMA=1,SMMA=2,LWMA=3) extern int MA1_Price=0 ; // Méthode de calcul du prix MA1 extern int MA2_Price=0 ; // Méthode de calcul du prix MA2 extern int MA1_Shift=1 ; // décalage temporel de MA1 extern int MA2_Shift=1 ; // décalage temporel MA2 extern double Lot = 0.01 ; // Lot fixe extern int slippage = 0 ; // Écart de prix pour les ordres au marché int New_Bar ; // 0/1 Formation de nouvelles barres int Time_0 ; // Heure de début d'une nouvelle mesure
int PosClose ; // Sens de la traversée int total ; // Nombre d'ordres ouverts double MA1_0 ; // Valeur actuelle du 1er МА (rose) double MA1_1 ; // Valeur précédente de la 1ère MA (rose) double MA2_0 ; // Valeur actuelle de la 2ème MA (bleu) double MA2_1 ; // Valeur précédente de la 2ème MA (bleu) int orderBuy ; // 1 = fait de la présence de l'ordre d'achat int orderSell ; // 1 = fait de la présence d'un ordre de vente //============================================================================================ int init() {
} //============================================================================================ int start() {
double prix ;
int total=OrdersTotal() ; // total des commandes for(int i=total-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) // Sélectionner la commande { if(OrderType()==OP_BUY) // si c'est un ordre d'achat { orderBuy=1 ; if(CrossPositionClose()==1) // Clôture de l'ordre s'il est satisfaisant { // condition CrossPositionClose()=1 price=MarketInfo(Symbol(),MODE_BID) ; OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE) ; } } if(OrderType()==OP_SELL) // Si un ordre d'achat est placé. { orderSell=1 ; if(CrossPositionClose()==2) // Fermez l'ordre s'il est satisfait { // condition CrossPositionClose()=2 price=MarketInfo(Symbol(),MODE_ASK) ; OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE) ; } } } }
New_Bar=0 ; // Remettons-la à zéro d'abord. if (Time_0 != Time[0]) // Si l'heure de début de la barre est déjà différente { New_Bar= 1 ; // Voici une nouvelle barre. Time_0 = Time[0] ; // Se souvenir de la nouvelle heure de début de barre }
MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 0) ; // Valeur actuelle de la 1ère MA MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1) ; // Valeur précédente de la 1ère MA MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 0) ; // Valeur actuelle de la 2ème MA MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1) ; // Valeur précédente de la 2ème MA
retour ; }
//============================================================================================ int CrossPositionClose() { PosClose=0 ; // c'est ici que le chien est enterré!! :) if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0)) // CrossPosition Close { { PosClose=1 ; } if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0)) // Intersection descendante { PosClose=2 ; } return(PosClose) ; // retourne la direction de l'intersection. } //============================================================================================
//============================================================================================ int MAMethod(int MA_Method) { switch(MA_Méthode) { cas 0 : return(0) ; //return MODE_SMA=0 cas 1 : return(1) ; // retour MODE_EMA=1 cas 2 : return(2) ; // Retour MODE_SMMA=2 cas 3 : return(3) ; //return MODE_LWMA=3 } } //============================================================================================ int MAPrice(int MA_Price) { switch(MA_Price) { cas 0 : return(PRICE_CLOSE) ; // Retour PRICE_CLOSE=0 cas 1 : return(PRICE_OPEN) ; //return PRICE_OPEN=1 cas 2 : return(PRICE_HIGH) ; //return PRICE_HIGH=2 cas 3 : return(PRICE_LOW) ; //return PRICE_LOW=3 cas 4 : return(PRICE_MEDIAN) ; //return PRICE_MEDIAN=4 cas 5 : return(PRICE_TYPICAL) ; //return PRICE_TYPICAL=5 cas 6 : return(PRICE_WEIGHTED) ; //return PRICE_WEIGHTED=6 } } //============================================================================================
Deux de mes messages sur le forum s'ouvrent d'un seul clic, ou bien ma souris fait des siennes ou autre chose. Je dois le supprimer à nouveau plus tard......Mais je vais vérifier ce post....
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Merci, mais j'aimerais une solution précise. Ainsi, la barre actuelle n'est pas prise en compte, mais seulement les barres précédentes.
Merci, mais j'aimerais une solution précise. Ainsi, la barre actuelle n'est pas prise en compte, mais seulement les barres précédentes.
Mince, j'ai creusé dans le code de quelqu'un d'autre, encore une fois à vue d'œil pour essayer de changer cette pièce. Dans ce cas, c'est probablement PRICE_CLOSE ou 0 qui devrait être...
Voici le code, j'ai changé les décalages de 0 à 1. Cela aidera-t-il ?
//============================================================================================
//
//
//
//
//
//============================================================================================
inttern MA1_Period=7 ; // 1ère période MA
extern intMA2_Period=13 ; // Période de la 2ème MA
extern int MA1_Method=1 ; // Méthode de calcul MA1 (SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int MA2_Method=1 ; // Méthode de calcul MA2 (SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int MA1_Price=0 ; // Méthode de calcul du prix MA1
extern int MA2_Price=0 ; // Méthode de calcul du prix MA2
extern int MA1_Shift=1 ; // décalage temporel de MA1
extern int MA2_Shift=1 ; // décalage temporel MA2
extern double Lot = 0.01 ; // Lot fixe
extern int slippage = 0 ; // Écart de prix pour les ordres au marché
int New_Bar ; // 0/1 Formation de nouvelles barres
int Time_0 ; // Heure de début d'une nouvelle mesure
int PosClose ; // Sens de la traversée
int total ; // Nombre d'ordres ouverts
double MA1_0 ; // Valeur actuelle du 1er МА (rose)
double MA1_1 ; // Valeur précédente de la 1ère MA (rose)
double MA2_0 ; // Valeur actuelle de la 2ème MA (bleu)
double MA2_1 ; // Valeur précédente de la 2ème MA (bleu)
int orderBuy ; // 1 = fait de la présence de l'ordre d'achat
int orderSell ; // 1 = fait de la présence d'un ordre de vente
//============================================================================================
int init()
{
}
//============================================================================================
int start()
{
double prix ;
int total=OrdersTotal() ; // total des commandes
for(int i=total-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) // Sélectionner la commande
{
if(OrderType()==OP_BUY) // si c'est un ordre d'achat
{
orderBuy=1 ;
if(CrossPositionClose()==1) // Clôture de l'ordre s'il est satisfaisant
{ // condition CrossPositionClose()=1
price=MarketInfo(Symbol(),MODE_BID) ;
OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE) ;
}
}
if(OrderType()==OP_SELL) // Si un ordre d'achat est placé.
{
orderSell=1 ;
if(CrossPositionClose()==2) // Fermez l'ordre s'il est satisfait
{ // condition CrossPositionClose()=2
price=MarketInfo(Symbol(),MODE_ASK) ;
OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE) ;
}
}
}
}
New_Bar=0 ; // Remettons-la à zéro d'abord.
if (Time_0 != Time[0]) // Si l'heure de début de la barre est déjà différente
{
New_Bar= 1 ; // Voici une nouvelle barre.
Time_0 = Time[0] ; // Se souvenir de la nouvelle heure de début de barre
}
MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 0) ; // Valeur actuelle de la 1ère MA
MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1) ; // Valeur précédente de la 1ère MA
MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 0) ; // Valeur actuelle de la 2ème MA
MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1) ; // Valeur précédente de la 2ème MA
retour ;
}
//============================================================================================
int CrossPositionClose()
{
PosClose=0 ; // c'est ici que le chien est enterré!! :)
if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0)) // CrossPosition Close {
{
PosClose=1 ;
}
if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0)) // Intersection descendante
{
PosClose=2 ;
}
return(PosClose) ; // retourne la direction de l'intersection.
}
//============================================================================================
//============================================================================================
int MAMethod(int MA_Method)
{
switch(MA_Méthode)
{
cas 0 : return(0) ; //return MODE_SMA=0
cas 1 : return(1) ; // retour MODE_EMA=1
cas 2 : return(2) ; // Retour MODE_SMMA=2
cas 3 : return(3) ; //return MODE_LWMA=3
}
}
//============================================================================================
int MAPrice(int MA_Price)
{
switch(MA_Price)
{
cas 0 : return(PRICE_CLOSE) ; // Retour PRICE_CLOSE=0
cas 1 : return(PRICE_OPEN) ; //return PRICE_OPEN=1
cas 2 : return(PRICE_HIGH) ; //return PRICE_HIGH=2
cas 3 : return(PRICE_LOW) ; //return PRICE_LOW=3
cas 4 : return(PRICE_MEDIAN) ; //return PRICE_MEDIAN=4
cas 5 : return(PRICE_TYPICAL) ; //return PRICE_TYPICAL=5
cas 6 : return(PRICE_WEIGHTED) ; //return PRICE_WEIGHTED=6
}
}
//============================================================================================
Sepulca, j'ai déjà essayé, le compilateur le jure.
Ce n'est pas possible, je vais essayer moi-même. ......
Sepulca, merci, votre code fonctionne. Seulement, j'ai remis les équipes à leur place.
Je vais le vérifier sur des délais plus longs, je vais le torturer pendant quelques jours pour être sûr que ce code fonctionne.