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
Merci Mladen pour le code ... Est-ce que cela a la double comparaison macd et le croisement 50 comme vous l'avez expliqué dans la logique précédente. Merci d'avance.
macerina
La différence est que dans la version graphique aspen le signal d'entrée secondaire est un croisement du rsi et de sa ligne de signal, alors que dans la version metatrader le signal secondaire est un croisement du rsi d'une ligne 50. La partie Macd est la même (vous devez prendre le signal de la barre fermée - c'est ainsi que cela se passe dans la version graphique d'Aspen).
merci pour l'info mladen ... est-il possible de définir une option dans le même indicateur pour sélectionner 50 line cross et signal line cross ...
Merci d'avance
sulaimoney Tout est OK avec ces procédures. Je joins un indicateur simple qui montre que tout est OK lorsque les appels à ces deux procédures sont exécutés l'un après l'autre. Vérifiez le reste du code puisque l'erreur ne se trouve pas dans ces deux procédures.
Bonjour Mladen
J'ai vérifié le code et j'ai trouvé quelques erreurs que j'ai remplacées.
Maintenant j'essaie d'utiliser la valeur de
double lastorderprice = 0 ;
Et
int bscount = 0 ;
Comme des variables sur une portée globale avec l'ea de sorte qu'ils peuvent être appelés à partir de par exemple void NewOrder()
// OnEveryTick
void LastBuySellOrder() // Boucle sur tous les ordres ouverts pour sélectionner le dernier ordre (achat/vente) OnEveryTick
{
double lastorderprice = 0 ;
datetime lastTime = 0 ;
datetime closeTime = 0 ;
int lastTicket = -1 ; // Aucun ordre ouvert.
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId
&&( OrderType() == OP_BUY || OrderType() == OP_SELL )
&& OrderOpenTime() >= lastTime && OrderCloseTime() == closeTime
&& OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime() ;
lastorderprice = OrderOpenPrice() ;
closeTime = OrderCloseTime() ;
lastTicket = OrderTicket() ;
}
return(lastTicket) ;
}
else
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
void PendingStopOrderCount()
{
int bscount = 0 ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUYSTOP )
{
bscount++ ;
}
}
sinon
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
}
// Si OpBuy ou OpSell existent
void NewOrder()
{
si (bscount==0)
{
BuyStopPending() ;
}
}
HI
Cet indicateur est repainter ? Si oui, combien de barres en arrière ?
xps_v8_oscillator.ex4xps_v8_oscillator.mq4
HI
Cet indicateur est un repainter ? Si oui, combien de barres en arrière ?
xps_v8_oscillator.ex4xps_v8_oscillator.mq4OK mais je l'utilise sur un graphique hors ligne M2 :S Donc ce n'est pas un Timeframe normal.
OK mais je l'utilise sur un graphique hors ligne M2 :S Donc ce n'est pas un Timeframe normal.
Essayez-le et vous verrez par vous-même (utilisez quelque chose comme autorefresh pour forcer l'indicateur à rafraîchir toutes les barres ou simplement, quand suffisamment de nouvelles barres sont construites, allez dans les paramètres, ne changez rien et cliquez sur OK). Faites attention aux périodes où la tendance change, que va-t-il se passer ?
C'est mieux que d'essayer d'expliquer ce qui ne va pas dans le code des vents solaires et de convaincre qui que ce soit.
Je ne peux pas changer de période, je peux seulement voir le code source, le voici :
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 1
#property indicator_buffers 3
#property indicateur_color2 C'72,49,255'
#property indicator_color3 C'255,49,72'
#property indicator_width2 6
#property indicator_width3 6
int period ;
extern bool alarm=false ;
double ExtBuffer0[] ;
double ExtBuffer1[] ;
double ExtBuffer2[] ;
double alertBar ;
double last ;
int init() {
//-----------------------------
switch ( Période() )
{
cas 1 : period = 2880;break ;
cas 5 : period = 576;break ;
cas 15 : period = 192;break ;
cas 30 : period = 96;break ;
cas 60 : period = 48;break ;
cas 240 : period = 48;break ;
cas 1440 : période = 48;pause ;
cas 10080 : period = 48;break ;
par défaut : period = 48;break ;
}
//-----------------------------
SetIndexStyle(0,DRAW_NONE) ;
SetIndexStyle(1,DRAW_HISTOGRAM) ;
SetIndexStyle(2,DRAW_HISTOGRAM) ;
IndicatorDigits(Digits+1) ;
SetIndexBuffer(0,ExtBuffer0) ;
SetIndexBuffer(1,ExtBuffer1) ;
SetIndexBuffer(2,ExtBuffer2) ;
IndicatorShortName("");// X :-)") ;
SetIndexLabel(0, NULL) ;
SetIndexLabel(1, NULL) ;
SetIndexLabel(2, NULL) ;
return(0) ;
}
int deinit()
{
//----
ObjectDelete("XPS") ;
ObjectDelete("XPS2") ;
ObjectDelete("XPS3") ;
//----
retour(0) ;
}
int start() {
int limite ;
int counted_bars=IndicatorCounted() ;
double prev,current,old ;
double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
double prix ;
double MinL=0 ;
double MaxH=0 ;
if(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars ;
for(int i=0 ; i<limit ; i++)
{ MaxH = High ;
MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)] ;
prix = (High+Low)/2 ;
Valeur = 0,33*2*((prix-MinL)/(MaxH-MinL)-0,5) + 0,67*Valeur1 ;
Valeur=MathMin(MathMax(Value,-0.999),0.999) ;
ExtBuffer0=0,5*MathLog((1+Value)/(1-Value))+0,5*Fish1 ;
Valeur1=Valeur ;
Poisson1=ExtBuffer0 ;
}
bool up = TRUE ;
for(i=limit-2 ; i>=0 ; i--)
{
current=ExtBuffer0 ;
prev=ExtBuffer0 ;
si (((current0))||(current<0)) up= false ;
si (((current>0)&&(prev0)) up= true ;
if(!up) {
ExtBuffer2=1 ;
ExtBuffer1=0 ;
if (alarme && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)
{
Alert("OSC... Possible Trend going DOWN on ",Period()," ",Symbol()) ;
alertBar = Bars;last = 2 ;
}
}
else {
ExtBuffer1=1 ;
ExtBuffer2=0 ;
if (alarme && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)
{
Alert("OSC... Possible tendance à la hausse sur ",Period()," ",Symbol()) ;
alertBar = Bars ;
dernier = 1 ;
}
}
}//Fin de la boucle
ObjectDelete("XPS") ;
ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0) ;
ObjectSetText("XPS", "!XPS v8", 28, "Arial Black", C'46,46,46') ;
ObjectSet("XPS", OBJPROP_CORNER, 2) ;
ObjectSet("XPS", OBJPROP_BACK, 0) ;
ObjectSet("XPS", OBJPROP_XDISTANCE, 6) ;
ObjectSet("XPS", OBJPROP_YDISTANCE, 8) ;
ObjectDelete("XPS2") ;
ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0) ;
ObjectSetText("XPS2", "!XPS v8", 28, "Arial Black", Silver) ;
ObjectSet("XPS2", OBJPROP_CORNER, 2) ;
ObjectSet("XPS2", OBJPROP_BACK, 0) ;
ObjectSet("XPS2", OBJPROP_XDISTANCE, 4) ;
ObjectSet("XPS2", OBJPROP_YDISTANCE, 10) ;
ObjectDelete("XPS3") ;
ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0) ;
ObjectSetText("XPS3", "Trade like a BOSS", 9, "Arial Black", Silver) ;
ObjectSet("XPS3", OBJPROP_CORNER, 2) ;
ObjectSet("XPS3", OBJPROP_BACK, 0) ;
ObjectSet("XPS3", OBJPROP_XDISTANCE, 7) ;
ObjectSet("XPS3", OBJPROP_YDISTANCE, 3) ;
retour(0) ;
}
Et alors ?
Je ne peux pas changer la période, mais je peux voir le code source, le voici :
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 1
#property indicator_buffers 3
#property indicator_color2 C'72,49,255' (couleur 2)
#property indicator_color3 C'255,49,72'
#property indicator_width2 6
#property indicator_width3 6
int period ;
extern bool alarm=false ;
double ExtBuffer0[] ;
double ExtBuffer1[] ;
double ExtBuffer2[] ;
double alertBar ;
double last ;
int init() {
//-----------------------------
switch ( Période() )
{
cas 1 : period = 2880;break ;
cas 5 : period = 576;break ;
cas 15 : period = 192;break ;
cas 30 : period = 96;break ;
cas 60 : period = 48;break ;
cas 240 : period = 48;break ;
cas 1440 : période = 48;pause ;
cas 10080 : period = 48;break ;
par défaut : period = 48;break ;
}
//-----------------------------
SetIndexStyle(0,DRAW_NONE) ;
SetIndexStyle(1,DRAW_HISTOGRAM) ;
SetIndexStyle(2,DRAW_HISTOGRAM) ;
IndicatorDigits(Digits+1) ;
SetIndexBuffer(0,ExtBuffer0) ;
SetIndexBuffer(1,ExtBuffer1) ;
SetIndexBuffer(2,ExtBuffer2) ;
IndicatorShortName("");// X :-)") ;
SetIndexLabel(0, NULL) ;
SetIndexLabel(1, NULL) ;
SetIndexLabel(2, NULL) ;
return(0) ;
}
int deinit()
{
//----
ObjectDelete("XPS") ;
ObjectDelete("XPS2") ;
ObjectDelete("XPS3") ;
//----
retour(0) ;
}
int start() {
int limite ;
int counted_bars=IndicatorCounted() ;
double prev,current,old ;
double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
double prix ;
double MinL=0 ;
double MaxH=0 ;
if(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars ;
for(int i=0 ; i<limit ; i++)
{ MaxH = High ;
MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)] ;
prix = (High+Low)/2 ;
Valeur = 0,33*2*((prix-MinL)/(MaxH-MinL)-0,5) + 0,67*Valeur1 ;
Valeur=MathMin(MathMax(Value,-0.999),0.999) ;
ExtBuffer0=0,5*MathLog((1+Value)/(1-Value))+0,5*Fish1 ;
Valeur1=Valeur ;
Poisson1=ExtBuffer0 ;
}
bool up = TRUE ;
for(i=limit-2 ; i>=0 ; i--)
{
current=ExtBuffer0 ;
prev=ExtBuffer0 ;
si (((current0))||(current<0)) up= false ;
si (((current>0)&&(prev0)) up= true ;
if(!up) {
ExtBuffer2=1 ;
ExtBuffer1=0 ;
if (alarme && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)
{
Alert("OSC... Possible Trend going DOWN on ",Period()," ",Symbol()) ;
alertBar = Bars;last = 2 ;
}
}
else {
ExtBuffer1=1 ;
ExtBuffer2=0 ;
if (alarme && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)
{
Alert("OSC... Possible tendance à la hausse sur ",Period()," ",Symbol()) ;
alertBar = Bars ;
dernier = 1 ;
}
}
}//Fin de la boucle
ObjectDelete("XPS") ;
ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0) ;
ObjectSetText("XPS", "!XPS v8", 28, "Arial Black", C'46,46,46') ;
ObjectSet("XPS", OBJPROP_CORNER, 2) ;
ObjectSet("XPS", OBJPROP_BACK, 0) ;
ObjectSet("XPS", OBJPROP_XDISTANCE, 6) ;
ObjectSet("XPS", OBJPROP_YDISTANCE, 8) ;
ObjectDelete("XPS2") ;
ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0) ;
ObjectSetText("XPS2", "!XPS v8", 28, "Arial Black", Silver) ;
ObjectSet("XPS2", OBJPROP_CORNER, 2) ;
ObjectSet("XPS2", OBJPROP_BACK, 0) ;
ObjectSet("XPS2", OBJPROP_XDISTANCE, 4) ;
ObjectSet("XPS2", OBJPROP_YDISTANCE, 10) ;
ObjectDelete("XPS3") ;
ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0) ;
ObjectSetText("XPS3", "Trade like a BOSS", 9, "Arial Black", Silver) ;
ObjectSet("XPS3", OBJPROP_CORNER, 2) ;
ObjectSet("XPS3", OBJPROP_BACK, 0) ;
ObjectSet("XPS3", OBJPROP_XDISTANCE, 7) ;
ObjectSet("XPS3", OBJPROP_YDISTANCE, 3) ;
retour(0) ;
}
Et alors ?Il applique la période 48 pour tout intervalle de temps qui n'est pas un intervalle de temps standard (comme les graphiques hors ligne "2 minutes").
Pour les versions des vents solaires pour lesquelles vous pouvez changer la période de calcul, voir ce fil de discussion : https://www.mql5.com/en/forum/179650
Salutations à vous gourous, S'il vous plaît aidez-moi à modifier ce script et laissez SEULEMENT l'ordre, la taille du lot, l'achat/vente. Je possède déjà un EA qui place automatiquement les take profit/stop loss, ce qui entre en conflit avec cet indy.
Ce script ouvre automatiquement le nombre d'ordres de marché que vous avez spécifié dans le MENU en une seule fois, mais actuellement, il n'ouvre qu'un seul ordre même si vous avez entré 5 ordres. S'il vous plaît, aidez-moi à réparer cette ERREUR et à SUPPRIMER complètement les prises de profits/arrêts de pertes du SCRIPT.
Soyez béni