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
Est-il possible d'ajouter une couleur, un style et un poids aux lignes de niveaux des indicateurs ?
Bonjour,
Je me demande si quelqu'un peut me dire s'il est possible d'ajouter de la couleur, du style et du poids aux lignes de niveaux des indicateurs ?
Pour commencer, j'aimerais spécifier à la fois le style et la couleur des niveaux RSI et je me demande si l'on peut le faire en ajoutant du code supplémentaire à la ligne par exemple : #property indicator_level1 70 ?
Si cela est possible, j'apprécierais beaucoup que quelqu'un me le montre.
Merci,
Laurus
...
Oui, vous pouvez
Utiliser les propriétés suivantes :
#property indicator_levelstyle
#property indicator_levelwidth
[/PHP]
If you use indicator_levelwidth greater than 1, only indicator_levelstyle that metatrader will allow is STYLE_SOLID (solid line). Also, you can specify only one color, style and width for all levels (if you need more than one color, style or width for levels, you either have to use buffers or objects - horizontal line, for example)
You can use the SetLevelStyle() function too for that purpose,with same limitations as described above
[PHP]
void SetLevelStyle( int draw_style, int line_width, color clr=CLR_NONE)
Salut,
Je me demande si quelqu'un peut me dire s'il est possible d'ajouter la couleur, le style et le poids aux lignes de niveaux des indicateurs ?
Pour commencer, j'aimerais spécifier à la fois le style et la couleur des niveaux RSI et je me demande si on peut le faire en ajoutant du code supplémentaire à la ligne par exemple : #property indicator_level1 70 ?
Si cela est possible, j'apprécierais beaucoup que quelqu'un me le montre.
Merci,
LaurusMerci pour votre réponse Mladen, votre aide est toujours très appréciée.
Ce que vous avez écrit est exactement ce que je craignais. Pour ce qui est de la partie fonctionnelle, cela me dépasse encore.
Si vous regardez l'image, vous verrez comment je voudrais que ce soit. Comme compromis, j'ai utilisé des lignes horizontales régulières, mais comme je dessine des lignes de tendance avec l'indicateur lui-même, ce n'est pas une bonne solution.
Merci,
Laurus
...
En regardant votre image, il semble que ce soit la seule solution que vous pouvez appliquer (en utilisant des objets). L'utilisation de tampons de dessin épuiserait simplement vos tampons de dessin et vous ne pourriez pas dessiner toutes les valeurs que vous utilisez sur cet indicateur. Parfois, nous "payons" encore la décision de Metatraders 4 de n'avoir que 8 tampons de dessin.
Merci pour votre réponse Mladen, votre aide est toujours très appréciée.
Ce que vous avez écrit est exactement ce que je craignais. Quand il s'agit de la partie fonctions, cela me dépasse encore.
Si vous jetez un coup d'oeil à l'image, vous verrez comment je voudrais que ce soit. Comme compromis, j'ai utilisé des lignes horizontales régulières, mais comme je dessine des lignes de tendance avec l'indicateur lui-même, ce n'est pas une bonne solution.
Merci,
LaurusUne DLL externe renvoie des résultats étranges
Bonjour !
Voici un exemple très simple d'un appel à une DLL externe. Le journal de bord devrait montrer des nombres croissants à partir de 0 lorsqu'il est utilisé avec le testeur de stratégie.
Cependant, le résultat est assez étrange. La première ligne du journal affiche un grand nombre (par exemple 18472), puis augmente correctement pendant un certain temps jusqu'à ce qu'il commence à sauter environ 10, parfois plus de 100, étapes à la fois.
Quelqu'un pourrait-il m'expliquer la raison de ce phénomène et comment le corriger ?
Merci !
// MyExpert.mql //
#import "MyDLL.dll"
int Test();
#import
void start(){
Print(Test());
}[/CODE]
// MyDLL.def //
LIBRARY MyDLL
EXPORTS
Test
[CODE]
// MyDLL.dll //
int i= 0;
int __stdcall Test() {
i++;
return i;
}problème de code intéressant pour l'indicateur
Salut les gars,
J'essaie d'apprendre la programmation MT4, et en ce moment même je développe un indicateur de détection PinBar, qui me dit d'acheter ou de vendre. J'ai développé cet indicateur spécialement pour le graphique de 4 heures, à cause des règles spéciales pour l'achat ou la vente. La règle pour les détections est la suivante :
Corps de la bougie <= 35% de la longueur de la bougie.
Au moins une mèche de bougie >= 50 % de la longueur de la bougie.
Jusqu'à présent, je n'ai aucun problème à détecter ces barres avec l'indicateur.
Cependant, la règle suivante me dit d'acheter ou de vendre.
Je fais un zoom avant sur le graphique en 1 heure et je regarde les 4 barres qui ont créé la pinbar sur le graphique en 4 heures.
J'ai utilisé la fonction iClose pour récupérer la valeur de la clôture de la première et de la dernière barre de cette formation sur la barre 1 heure.
Cependant...tel que programmé maintenant, je regarde toujours la première et la dernière bougie sur le graphique d'une heure lui-même. Et ce n'est pas correct. Il faut que ce soit la première et la dernière barre de la formation et non du graphique.
Voici le code que j'ai maintenant avec les mauvaises fonctions iClose.
{
Buy = Close;
SetLevel(true,i+1,Close);
}Je n'ai pas été capable de trouver les bonnes bougies d'une heure en arrière-plan de cette bougie de 4 heures.
Y a-t-il quelqu'un qui puisse me donner la réponse à mon problème ?
Je l'ai corrigé :
int H1BarNumber;
H4BarTime = Time ;
H1BarNumber = iBarShift(NULL, PERIOD_H1, H4BarTime) ;Merci beaucoup !
Jacob
En regardant votre image, il semble que ce soit la seule solution que vous pouvez appliquer (en utilisant des objets). L'utilisation de tampons de dessin épuiserait simplement vos tampons de dessin et vous ne pourriez pas dessiner toutes les valeurs que vous utilisez sur cet indicateur. Parfois, nous "payons" encore la décision de Metatraders 4 de n'avoir que 8 tampons de dessin.
Désolé pour ma réponse tardive Mladen et merci d'avoir clarifié la question. En ce qui concerne ce que vous avez écrit, au moins maintenant je suis sûr.
Je vous remercie,
Laurus
Aide sur les critères d'entrée
Bonjour à tous,
J'essaie d'établir un critère d'entrée en utilisant la MA. Mon critère d'entrée est simple, je veux entrer une transaction longue lorsque la MA rapide croise la MA lente à la hausse à la clôture de la bougie au lieu de la bougie actuelle et vice versa.
Ma situation actuelle est que mon EA déclenchera une transaction longue lorsque la Fast MA croise la Slow MA à la hausse et vice versa, cependant cette bougie n'a pas encore été fermée, et parfois lorsque la bougie se ferme, la MA finale peut ne pas croiser à la hausse donc, je n'aurais pas dû déclencher cette transaction particulière, et pourtant le système l'a déclenchée parce qu'elle a croisé à la hausse une fois et retour. C'est la même chose pour les transactions courtes.
Cela fait déjà quelques jours que j'essaie de résoudre ce problème, sans résultat. Quelqu'un peut-il m'éclairer sur la façon de procéder ? Merci.
//--- paramètres d'entrée
extern double TakeProfit=2700.0 ;
extern double Lots=0.1 ;
extern double StopLoss=2500.0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
int Crossed (double ligne1 , double ligne2)
{
static int last_direction = 0 ;
static int current_dirction = 0 ;
if(line1>line2)current_dirction = 1 ; //haut
if(line1<line2)current_dirction = 2 ; //down
if(current_dirction != last_direction) //changé
{
last_direction = current_dirction ;
return (last_direction) ;
}
else
{
return (0) ;
}
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total ;
double shortEma, longEma ;
if(Bars<100)
{
Print("barres inférieures à 100") ;
return(0) ;
}
if(TakeProfit<10)
{
Print("TakeProfit inférieur à 10") ;
return(0) ; // vérifier TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0) ;
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0) ;
int isCrossed = Crossed (shortEma,longEma) ;
total = OrdersTotal() ;
si(total < 1)
{
si(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point, "My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
return(0) ;
}
//+------------------------------------------------------------------+
Merci et salutations
Terrance
...
Terrance
Essayez de modifier ces lignes :
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);[/PHP]
to something like this :
[PHP] int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
De cette façon, vous n'avez même pas besoin de la fonction croisée et il vérifiera les croisements sur une barre fermée.
Salut les gars,
J'essaie d'établir un critère d'entrée en utilisant la MA. Mon critère d'entrée est simple, je veux entrer dans une transaction longue lorsque la MA rapide croise la MA lente vers le haut sur la fermeture de la bougie au lieu de la bougie actuelle et vice versa.
Ma situation actuelle est que mon EA déclenchera une transaction longue lorsque la Fast MA croise la Slow MA à la hausse et vice versa, cependant cette bougie n'a pas encore été fermée, et parfois lorsque la bougie se ferme, la MA finale peut ne pas croiser à la hausse donc, je n'aurais pas dû déclencher cette transaction particulière, et pourtant le système l'a déclenchée parce qu'elle a croisé à la hausse une fois et retour. C'est la même chose pour les transactions courtes.
Cela fait déjà quelques jours que j'essaie de résoudre ce problème, sans résultat. Quelqu'un peut-il m'éclairer sur la façon de procéder ? Merci.
//--- paramètres d'entrée
extern double TakeProfit=2700.0 ;
extern double Lots=0.1 ;
extern double StopLoss=2500.0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
int Crossed (double ligne1 , double ligne2)
{
static int last_direction = 0 ;
static int current_dirction = 0 ;
if(line1>line2)current_dirction = 1 ; //haut
if(line1<line2)current_dirction = 2 ; //down
if(current_dirction != last_direction) //changé
{
last_direction = current_dirction ;
return (last_direction) ;
}
else
{
return (0) ;
}
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total ;
double shortEma, longEma ;
if(Bars<100)
{
Print("barres inférieures à 100") ;
return(0) ;
}
if(TakeProfit<10)
{
Print("TakeProfit inférieur à 10") ;
return(0) ; // vérifier TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0) ;
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0) ;
int isCrossed = Crossed (shortEma,longEma) ;
total = OrdersTotal() ;
si(total < 1)
{
si(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point, "My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
return(0) ;
}
//+------------------------------------------------------------------+
Merci et salutations
TerranceTerrance
Essayez de changer ces lignes :
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);[/PHP]
to something like this :
[PHP] int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
Bonjour Mladen, j'ai essayé ce que vous m'avez dit et cela fonctionne à merveille. Cependant, je ne comprends pas bien la logique derrière les codes. Pourquoi définissez-vous le décalage de iMA à 1 et 2 et pourquoi codez-vous ceci : (diff1*diff2)<0) également ? Désolé mais je suis actuellement encore sur la phrase d'apprentissage.
Merci et salutations
Terrance