[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

 
J'essaie, mais ça ne marche pas. J'obtiens beaucoup d'erreurs dans le code((.
 
Voulez-vous partager quelque chose ? )
 

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.

 
palomnik:

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;//Если=0, то текуший
extern int Distanse=0;//Дистанция линии от фрактала в пунктах
extern string FrApNam="Ap";//Имя линии соотв.Фракталу вверх
extern string FrDnNam="Dn";//Имя линии соотв.Фракталу вниз
extern color ClAp=Blue;//Цвет линии соотв.Фракталу вверх
extern color ClDn=Red;//Цвет линии соотв.Фракталу вниз
extern bool comment=true;//Разрещение на комментарий
//-----------------------------------------------------------------------------+
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);//КОРОБКА

SetIndexBuffer(1,ind_buffer2);
return;}
void deinit(){

return;}


//+----------------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit;
double tmp;
int i, j,k;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//-----------------------------------------------------------------------------+
LineAp();
LineDn();
double FAP=NormalizeDouble((FrApPrise-Distanse*Point),5);//ЗНАЧЕНИЕ
double FDP=NormalizeDouble((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,
"\nFractal Channel ="
,diap+"Point");



return(0);
}
//-----------------------------------------------------------------------------+
// Ищет горизонтальную линию по имени перерисовывает если изменилась цена | 
//-----------------------------------------------------------------------------+
void LineDn(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise-Distanse*Point,MarketInfo(Symbol(),MODE_DIGITS));
//Comment(FrPrise);
if(ObjectFind(FrDnNam)==0){
if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrDnPrise=FrPrise; 
ObjectDelete(FrDnNam);
SetHLine(ClDn,FrDnNam,FrDnPrise,0,1);
WindowRedraw();
return;} 
//-----------------------------------------------------------------------------+
// Ищет горизонтальную линию по имени перерисовывает если изменилась цена | 
//-----------------------------------------------------------------------------+
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();
return;}
//-----------------------------------------------------------------------------+ 
//| Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий ТФ) |
//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
if (sy=="" || sy=="0") sy=Symbol();
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);
if (f!=0) return(NormalizeDouble(f, d));
}
Print("FindNearFractal(): Фрактал не найден");
return(0);
}

//+----------------------------------------------------------------------------+
//| Описание : Установка объекта OBJ_HLINE горизонтальная линия |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| cl - цвет линии |
//| nm - наименование ("" - время открытия текущего бара) |
//| p1 - ценовой уровень (0 - Bid) |
//| st - стиль линии (0 - простая линия) |
//| wd - ширина линии (0 - по умолчанию) |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (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);
}



Надо к данному индикатору написать советник.Передающий верхнюю и нижнюю цены.по М1 и М5 таймфреймам. 

Vous ne savez pas à quoi sert le src? Effacez votre gribouillage !
 
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
Il existe de nombreuses façons de procéder :

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.

 
Zhunko merci beaucoup. Tout revient avec un boomerang et le bon aussi.