Алекс ты ко мне? Я в mql4 новичок.Вот пробую разобраться с даннмы кодом
#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);//КОРОБКА
//+----------------------------------------------------------------------------+ 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 таймфреймам.
Давид это не одна функция это небольшой советник.Вкрадце сказать что идет сравнение сколько было ордеров сколько стало и тех кого меньше закрываются по выборке.Помогу детальнее как только разберусь с передачей данных из индикатора в советник.ТЗ уже привел выше
Господа так кто нибудь разбирается как передавать значения из индикатора в советник? Помогите пожалуйста,сам никак не пойму,всего один момент и все.Собственно проблемму описывал но какая то тишина((. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
palomnik: Господа так кто нибудь разбирается как передавать значения из индикатора в советник? Помогите пожалуйста,сам никак не пойму,всего один момент и все.Собственно проблемму описывал но какая то тишина((. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
5. Маппинг. Можно передать данные из одного терминала в другой терминал. Или в одном терминале передать данные из одного окна в другое окно без ограничений глобальных переменных МТ4.
Может полезно будет. Так норм работает!
В метаэдиторе клавиша F5 - компилировать.
Важно! Метаэдитор должен быть запущен из той же папки, что и терминал.
Алекс ты ко мне? Я в mql4 новичок.Вот пробую разобраться с даннмы кодом
#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 таймфреймам.
Алекс ты ко мне? Я в mql4 новичок.Вот пробую разобраться с даннмы кодом
Господа так кто нибудь разбирается как передавать значения из индикатора в советник? Помогите пожалуйста,сам никак не пойму,всего один момент и все.Собственно проблемму описывал но какая то тишина((. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
1. Через глобальную переменную.
2. Через файл.
3. Через iCustom().
4. Через глобальные графические переменные.
5. Маппинг. Можно передать данные из одного терминала в другой терминал. Или в одном терминале передать данные из одного окна в другое окно без ограничений глобальных переменных МТ4.