[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 308
Alex, tu es là pour moi ? Je suis nouveau sur mql4 et j'essaie de comprendre ce code.
#property indicator_chart_window #property indicator_buffers 2 extern int TimeFrame=0;//Si=0, alors l'actuelle. extern int Distanse=0;//distance de la ligne de la fractale en points extern string FrApNam="Ap";//nom de la ligne correspondant à la fractale vers le haut. extern string FrDnNam="Dn";//nom de la ligne selon la fractale vers le bas. extern color ClAp=Blue;//color line correspond à Fractal upwards. extern color ClDn=Red;//couleur de la ligne selon Fractal Down. extern bool comment=true;//permission de commenter //-----------------------------------------------------------------------------+ double FrPrise,znach1,znach2 ; double FrApPrise=0,FrDnPrise=0 ; double ind_buffer1[] ; double ind_buffer2[] ; //+----------------------------------------------------------------------------+ void init() {if(TimeFrame==0){TimeFrame=Period();} SetIndexBuffer(0,ind_buffer1);//Buffer
//+----------------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted() ; int limite ; double tmp ; int i, j, k ; si(counted_bars<0) return(-1) ; si(counted_bars>0) counted_bars-- ; limit=Bars-counted_bars ; //-----------------------------------------------------------------------------+ LineAp() ; LineDn() ; double FAP=NormalizeDouble((FrApPrise-Distanse*Point),5);//Normalize double FDP=NormaliserDouble((FrDnPrise+Distanse*Point),5) ; int diap=MathRound((FrApPrise-FrDnPrise)/Point) ; ind_buffer1[0]=FAP ; ind_buffer2[1]=FDP ; Comment("TimeFrame="+TimeFrame+ "\nApPrise =",FAP, "\nDnPrise =",FDP, "Canal nFractal =" ,diap+"Point") ;
retour(0) ; } //-----------------------------------------------------------------------------+ // recherche une ligne horizontale par son nom, redessine si le prix change | //-----------------------------------------------------------------------------+ void LineDn(){ FrPrise=NormaliserDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS)) ; FrPrise=NormalizeDouble(FrPrise-Distance*Point,MarketInfo(Symbol(),MODE_DIGITS)) ; //Commentaire(FrPrise) ; if(ObjectFind(FrDnNam)==0){ if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}} FrDnPrise=FrPrise ; ObjectDelete(FrDnNam) ; SetHLine(ClDn,FrDnNam,FrDnPrise,0,1) ; WindowRedraw() ; retour;} //-----------------------------------------------------------------------------+ // recherche une ligne horizontale par nom, redessine si le prix a changé | //-----------------------------------------------------------------------------+ void LineAp(){ FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS)) ; FrPrise=NormalizeDouble(FrPrise+Distanse*Point,MarketInfo(Symbol(),MODE_DIGITS)) ; if(ObjectFind(FrApNam)==0){ if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){return;}} FrApPrise=FrPrise ; ObjectDelete(FrApNam) ; SetHLine(ClAp,FrApNam,FrApPrise,0,1) ; WindowRedraw() ; retour;} //-----------------------------------------------------------------------------+ //| Description : Recherche de la fractale la plus proche. Renvoie un niveau de prix. | //+----------------------------------------------------------------------------+ //| Paramètres : | //| sy - nom de l'instrument ("" ou NULL - symbole courant) | //| tf - timeframe ( 0 - TF actuel) | //| mode - type de fractale (MODE_LOWER|MODE_UPPER) | //+----------------------------------------------------------------------------+ double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) { si (sy=="" || sy=="0") sy=Symbole() ; double f=0 ; int d=MarketInfo(sy, MODE_DIGITS), s ; if (d==0) if (StringFind(sy, "JPY"<0) d=4 ; else d=2 ;
for (s=2 ; s<100 ; s++) { f=iFractals(sy, tf, mode, s) ; si (f!=0) return(NormalizeDouble(f, d)) } Print("FindNearFractal() : Fractal non trouvé") ; retour(0) ; }
//+----------------------------------------------------------------------------+ //| Description : Définir l'objet OBJ_HLINE ligne horizontale. //+----------------------------------------------------------------------------+ //| Paramètres : | //| cl - couleur de la ligne //| nm - nom ("" - heure d'ouverture de la barre actuelle) | //| p1 - niveau des prix (0 - Bid) | //| st - style de ligne (0 - ligne simple) | | //| wd - largeur de ligne (0 - par défaut) | | //+----------------------------------------------------------------------------+ void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0) ; si (p1<=0) p1=Bid ; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0 ;) ObjectSet(nm, OBJPROP_PRICE1, p1) ; ObjectSet(nm, OBJPROP_COLOR , cl) ; ObjectSet(nm, OBJPROP_STYLE , st) ; ObjectSet(nm, OBJPROP_WIDTH , wd) ; }
Il est nécessaire d'écrire un Expert Advisor pour cet indicateur qui passerait le prix supérieur et inférieur sur les délais М1 et М5.
Comment puis-je implémenter cette fonction dans mon EA ? Lorsque le TP ou le SL est déclenché sur un ordre Bay, tous les ordres Bay doivent être fermés.
David, il ne s'agit pas d'une seule fonction mais d'un petit conseiller expert, en résumé, il s'agit de comparer le nombre d'ordres passés et le nombre d'ordres fermés dans l'échantillon, je vous aiderai dans les détails dès que j'aurai traité le transfert de données de l'indicateur vers le conseiller expert, j'ai déjà donné les termes de référence ci-dessus.
Je n'ai pas encore trouvé comment transmettre les valeurs de l'indicateur à l'Expert Advisor. J'ai effectivement décrit le problème, mais j'ai obtenu une sorte de silence ((. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
palomnik: Monsieur, est-ce que quelqu'un comprend comment passer des valeurs d'un indicateur à un EA ? J'ai besoin d'aide, je ne le comprends pas moi-même, juste un moment et puis c'est fini. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
5. Cartographie. Vous pouvez transférer des données d'un terminal à un autre. Ou dans un terminal pour transférer des données d'une fenêtre à une autre sans limitation des variables globales de MT4.
Cela pourrait être utile. Cela fonctionne bien !
Dans le méta-éditeur, appuyez sur F5 pour compiler.
Important : L'éditeur de méta doit être exécuté à partir du même dossier que le terminal.
Alex, tu es là pour moi ? Je suis nouveau sur mql4 et j'essaie de comprendre ce code.
#property indicator_chart_window
#property indicator_buffers 2
extern int TimeFrame=0;//Si=0, alors l'actuelle.
extern int Distanse=0;//distance de la ligne de la fractale en points
extern string FrApNam="Ap";//nom de la ligne correspondant à la fractale vers le haut.
extern string FrDnNam="Dn";//nom de la ligne selon la fractale vers le bas.
extern color ClAp=Blue;//color line correspond à Fractal upwards.
extern color ClDn=Red;//couleur de la ligne selon Fractal Down.
extern bool comment=true;//permission de commenter
//-----------------------------------------------------------------------------+
double FrPrise,znach1,znach2 ;
double FrApPrise=0,FrDnPrise=0 ;
double ind_buffer1[] ;
double ind_buffer2[] ;
//+----------------------------------------------------------------------------+
void init()
{if(TimeFrame==0){TimeFrame=Period();}
SetIndexBuffer(0,ind_buffer1);//Buffer
SetIndexBuffer(1,ind_buffer2) ;
retour;}
void deinit(){
retour;}
//+----------------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted() ;
int limite ;
double tmp ;
int i, j, k ;
si(counted_bars<0) return(-1) ;
si(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars ;
//-----------------------------------------------------------------------------+
LineAp() ;
LineDn() ;
double FAP=NormalizeDouble((FrApPrise-Distanse*Point),5);//Normalize
double FDP=NormaliserDouble((FrDnPrise+Distanse*Point),5) ;
int diap=MathRound((FrApPrise-FrDnPrise)/Point) ;
ind_buffer1[0]=FAP ;
ind_buffer2[1]=FDP ;
Comment("TimeFrame="+TimeFrame+
"\nApPrise =",FAP,
"\nDnPrise =",FDP,
"Canal nFractal ="
,diap+"Point") ;
retour(0) ;
}
//-----------------------------------------------------------------------------+
// recherche une ligne horizontale par son nom, redessine si le prix change |
//-----------------------------------------------------------------------------+
void LineDn(){
FrPrise=NormaliserDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS)) ;
FrPrise=NormalizeDouble(FrPrise-Distance*Point,MarketInfo(Symbol(),MODE_DIGITS)) ;
//Commentaire(FrPrise) ;
if(ObjectFind(FrDnNam)==0){
if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrDnPrise=FrPrise ;
ObjectDelete(FrDnNam) ;
SetHLine(ClDn,FrDnNam,FrDnPrise,0,1) ;
WindowRedraw() ;
retour;}
//-----------------------------------------------------------------------------+
// recherche une ligne horizontale par nom, redessine si le prix a changé |
//-----------------------------------------------------------------------------+
void LineAp(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS)) ;
FrPrise=NormalizeDouble(FrPrise+Distanse*Point,MarketInfo(Symbol(),MODE_DIGITS)) ;
if(ObjectFind(FrApNam)==0){
if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrApPrise=FrPrise ;
ObjectDelete(FrApNam) ;
SetHLine(ClAp,FrApNam,FrApPrise,0,1) ;
WindowRedraw() ;
retour;}
//-----------------------------------------------------------------------------+
//| Description : Recherche de la fractale la plus proche. Renvoie un niveau de prix. |
//+----------------------------------------------------------------------------+
//| Paramètres : |
//| sy - nom de l'instrument ("" ou NULL - symbole courant) |
//| tf - timeframe ( 0 - TF actuel) |
//| mode - type de fractale (MODE_LOWER|MODE_UPPER) |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
si (sy=="" || sy=="0") sy=Symbole() ;
double f=0 ;
int d=MarketInfo(sy, MODE_DIGITS), s ;
if (d==0) if (StringFind(sy, "JPY"<0) d=4 ; else d=2 ;
for (s=2 ; s<100 ; s++) {
f=iFractals(sy, tf, mode, s) ;
si (f!=0) return(NormalizeDouble(f, d))
}
Print("FindNearFractal() : Fractal non trouvé") ;
retour(0) ;
}
//+----------------------------------------------------------------------------+
//| Description : Définir l'objet OBJ_HLINE ligne horizontale.
//+----------------------------------------------------------------------------+
//| Paramètres : |
//| cl - couleur de la ligne
//| nm - nom ("" - heure d'ouverture de la barre actuelle) |
//| p1 - niveau des prix (0 - Bid) |
//| st - style de ligne (0 - ligne simple) | |
//| wd - largeur de ligne (0 - par défaut) | |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
if (nm=="") nm=DoubleToStr(Time[0], 0) ;
si (p1<=0) p1=Bid ;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0 ;)
ObjectSet(nm, OBJPROP_PRICE1, p1) ;
ObjectSet(nm, OBJPROP_COLOR , cl) ;
ObjectSet(nm, OBJPROP_STYLE , st) ;
ObjectSet(nm, OBJPROP_WIDTH , wd) ;
}
Il est nécessaire d'écrire un Expert Advisor pour cet indicateur qui passerait le prix supérieur et inférieur sur les délais М1 et М5.
Alex, tu es là pour moi ? Je suis nouveau sur mql4 et j'essaie de comprendre ce code.
Monsieur, est-ce que quelqu'un comprend comment passer des valeurs d'un indicateur à un EA ? J'ai besoin d'aide, je ne le comprends pas moi-même, juste un moment et puis c'est fini. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
1. Par le biais d'une variable globale.
2. Via le dossier.
3. via iCustom().
4. Via des variables graphiques globales.
5. Cartographie. Vous pouvez transférer des données d'un terminal à un autre. Ou dans un terminal pour transférer des données d'une fenêtre à une autre sans limitation des variables globales de MT4.