Aide au codage - page 246

 
macerina:
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

 
mladen:
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

Dossiers :
 
toldmikl:
HI

Cet indicateur est un repainter ? Si oui, combien de barres en arrière ?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4
Oui, il s'agit d'un indicateur de vents solaires dont les périodes sont définies automatiquement en fonction de l'horizon temporel :

1 minute : période = 2880

5 minutes : période = 576

15 minutes : période = 192

30 minutes : période = 96

1 heure et plus : période = 48

 

OK mais je l'utilise sur un graphique hors ligne M2 :S Donc ce n'est pas un Timeframe normal.

 
toldmikl:
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 ?

 
toldmikl:
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

Dossiers :