Вопросы по программированию в МТ4

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 16 янв 2017, 07:48

Например глобальные переменные.

Зайдите в сервис - глобальные переменные. Там их можно менять.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Вопросы по программированию в МТ4

Сообщение ВЯЧЕСЛАВПЕТРОВ » 16 янв 2017, 19:50

Как можно получить уровень маржи для расчета. Пример чтобы ордера не открывались больше при достижении уровня маржи в 100%.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 19 янв 2017, 05:09

Раздел справки Получение рыночной информации
SymbolInfoDouble

Возвращает соответствующее свойство указанного символа. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.



double SymbolInfoDouble(
string name, // символ
ENUM_SYMBOL_INFO_DOUBLE prop_id // идентификатор свойства
);


2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.



bool SymbolInfoDouble(
string name, // символ
ENUM_SYMBOL_INFO_DOUBLE prop_id, // идентификатор свойства
double& double_var // сюда примем значение свойства
);


Параметры

name

[in] Имя символа.

prop_id

[in] Идентификатор свойства символа. Значение может быть одним из значений перечисления ENUM_SYMBOL_INFO_DOUBLE.

double_var

[out] Переменная типа double, принимающая значение запрашиваемого свойства.

Возвращаемое значение

Значение типа double. В случае неудачного выполнения информацию об ошибкe можно получить с помощью функции GetLastError():

·4106 – символ не выбран в "Обзоре рынка" (нет в списке доступных),

·4051 – неверный идентификатор свойства символа,

·4024 – внутренняя ошибка.

Примечание

Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с момента подключения терминала к торговому счету не было еще ни одной котировки. В таком случае запрашиваемое значение будет неопределенным.

В большинстве случаев достаточно использовать функцию SymbolInfoTick(), которая позволяет получить за один вызов значения Ask, Bid, Last, Volume и время прихода последнего тика.



SYMBOL_MARGIN_INITIAL

Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия ордера объемом в один лот. Используется при проверке средств клиента при входе в рынок.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Вопросы по программированию в МТ4

Сообщение tatarin » 02 фев 2017, 14:42

Помогите разобраться с буферами индикатора.
Нашел интересный гибридный стрелочник на 5 разных индикаторах, там 2 буфера.
Пробовал использовать его сигналы на известном шаблонном советнике exp_iCustom_v9_Martingale, которому надо указать номер буферов для покупки и продажи. Так вот, продажи проходят, а покупки - нет. Метод подбора не помог.
Для продажи используется буфер 0.

Вот кусок кода советника:
Код: выделить все
extern int        _O_M1_iBuyBufIndex         = 0;        // индекс буфера со стрелками на покупку
extern int        _O_M1_iSellBufIndex        = 1;        // индекс буфера со стрелками на продажу


А вот полный код индикатора:
Код: выделить все
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 Green

//extern
bool Allert=true;
bool Istoriy = true;
bool Rsi=true;
bool Cci_1=true;
bool Cci_2=true;
bool Stoh=true;
bool DIMI=true;
int Rasst_Arrow=10;
int Up_arrow=234;
int Down_arrow=233;
int Shift=1;
string comm1="Параметры RSI";
int Period_RSI=8;
int Primenit_k_RSI=0;
double RSI_lewel_UP=70;
double RSI_lewel_DOWN=30;
string comm2="Параметры CCI_1";
int CCI_1_period=14;
int CCI_1_primenit_k=0;

extern double CCI_UP=120;
extern  double CCI_DOWN=-120;
extern double DYMIL_UP=60;
extern double DYMIL_DOWN=40;

string comm3="Параметры CCI_2";
int CCI_2_period=7;
int CCI_2_primenit_k=0;

//extern 

string comm4="Параметры Stoh";
int Period_K=5;
int ZAmedlenie=2;
int Period_D=3;
int  Ceni    =0;
int Metod_MA=0;
double Stoh_UP=80;
double Stoh_DOWN=20;
string comm5="Параметры Dymi";
int stdevLength = 5;
int avgOfStdevLength = 10;
int DYMILength = 30;
int DYMILengthLowerLimit = 3;
int DYMILengthUpperLimit = 30;




int Gi_84 = 24;
bool Gi_88 = FALSE;
double G_ibuf_92[];
double G_ibuf_96[];


int G_bars_100 = 0;
int Bbars;
double RSI,CCI_1,CCI_2,STOH_m,STOH_s,Dymil;
int n,n1,n2,n3,n4,n5;
int m,m1,m2,m3,m4,m5;
string c;
// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 3);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 3);
   
   SetIndexArrow(1, Down_arrow);
   SetIndexArrow(0, Up_arrow);

   SetIndexBuffer(0, G_ibuf_92);
   SetIndexBuffer(1, G_ibuf_96);
 
   G_bars_100 = Bars;
   return (0);
}


// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   
   int Li_8 = IndicatorCounted();
   if (Li_8 < 0) return (-1);
   if (Li_8 > 0) Li_8--;
   int Li_12 = Bars - 1;
   if (Li_8 >= 1) Li_12 = Bars - Li_8 - 1;
   if (Li_12 < 0) Li_12 = 0;
   //Li_12=100;
   if(Istoriy==true)
   {
   for (int Li_16 = Li_12; Li_16 >= 0; Li_16--) {
   
   RSI=NormalizeDouble(iRSI(Symbol(),PERIOD_CURRENT,Period_RSI,Primenit_k_RSI,Li_16+Shift),4);
   CCI_1=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_1_period,CCI_1_primenit_k,Li_16+Shift),4);
   CCI_2=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_2_period,CCI_1_primenit_k,Li_16+Shift),4);
   STOH_m=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,0,Li_16+Shift),4);
   STOH_s=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,1,Li_16+Shift),4);
   Dymil=NormalizeDouble(iCustom(Symbol(),PERIOD_CURRENT,"DYMI",stdevLength,avgOfStdevLength,DYMILength,DYMILengthLowerLimit,DYMILengthUpperLimit,0,Li_16+Shift),4);
   if(Rsi)
   {if(RSI>RSI_lewel_UP)n1=1;else n1=0;
   }else n1=1;
 
  if(Cci_1)
  {if(CCI_1>CCI_UP)n2=1;else n2=0;
   }else n2=1;
  if(Cci_2)
  {if(CCI_2>CCI_UP)n3=1;else n3=0;
   }else n3=1;
   
  if(Stoh)
  {if(STOH_m>Stoh_UP&&STOH_s>Stoh_UP)n4=1;else n4=0;
   }else n4=1;
   
   if(DIMI)
   {if (Dymil>DYMIL_UP)n=1;else n=0;
   }else n=1;
 
    n5=n1*n2*n3*n4*n;
 
   if(n5>0 )
    {G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;}
   
    //////////////////////////////////////////////////////////////////////////////////////////////////




if(Rsi)
   {if(RSI<RSI_lewel_DOWN)m1=1;else m1=0;
   }else m1=1;
if(Cci_1)
  {if(CCI_1<CCI_DOWN)m2=1;else m2=0;
   }else m2=1;
if(Cci_2)
  {if(CCI_2<CCI_DOWN)m3=1;else m3=0;
   }else m3=1;

 if(Stoh)
  {if(STOH_m<Stoh_DOWN&&STOH_s<Stoh_DOWN)m4=1;else m4=0;
   }else m4=1;

if(DIMI)
   {if (Dymil<DYMIL_DOWN)m=1;else m=0;
   }else m=1;
 
    m5=m1*m2*m3*m4*m;
 
   if(m5>0 )
    {G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;}
 
   
 




    //
   
   }
   }
   /////////////////////////////////////
   if(n5>0 )
    {G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;
    c=Symbol()+" "+f0_0(Seconds())+"Sell!";
    if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
    }
   
   if(m5>0 )
    {G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;
    c=Symbol()+" "+f0_0(Seconds())+"Buy!";
   if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
   
   }
   
 
   
   
   
 
   return (0);
}

// 9B1AEE847CFB597942D106A4135D4FE6
int f0_1() {
   bool Li_ret_0 = FALSE;
   if (G_bars_100 != Bars) {
      Li_ret_0 = TRUE;
      G_bars_100 = Bars;
      Gi_88 = TRUE;
   }
   return (Li_ret_0);
}

// 945D754CB0DC06D04243FCBA25FC0802
string f0_0(int Ai_0) {
   if (Ai_0 == 60) return ("M1");
   if (Ai_0 == 300) return ("M5");
   if (Ai_0 == 900) return ("M15");
   if (Ai_0 == 1800) return ("M30");
   if (Ai_0 == 3600) return ("H1");
   if (Ai_0 == 14400) return ("H4");
   if (Ai_0 == 86400) return ("D1");
   if (Ai_0 == 604800) return ("W1");
   if (Ai_0 == 1619200) return ("MN1");
   return ("");
}

 double Imaxx(int Per)
   {double perr;
    perr = NormalizeDouble (iHigh(Symbol(),0,Per),Digits);
    return (perr);
   }
   //---Миниму--//
   double Iminn(int Per)
   {double perr;
    perr = NormalizeDouble (iLow(Symbol(),0,Per),Digits);
    return (perr);
   }
   //--Цена открытия--//
   double Cotkr(int Per)
   {double perr;
    perr = NormalizeDouble (iOpen(Symbol(),0,Per),Digits);
    return (perr);
    }
    //--Цена закрытия--//
    double Czakr(int Per)
   {double perr;
    perr = NormalizeDouble (iClose(Symbol(),0,Per),Digits);
    return (perr);
   }
   
Аватар пользователя
tatarin
 
Сообщений: 58
Зарегистрирован: 20 июл 2015, 09:48
Средств на руках: 4.80 Доллар
Группа: Базовая
Благодарил (а): 19 раз.
Поблагодарили: 17 раз.

Вопросы по программированию в МТ4

Сообщение YURIY007 » 04 фев 2017, 21:13

Alexandeer писал(а):Здравствуйте, я не так давно начал программировать на MQL4 и я не смог найти решения для пары проблем:

2) Когда тестишь советники открывается по умолчанию окно визуализации, со следующими настройками:
сетка, не красивые одноцветные бары. Короче как задать настройки для графика таким образом, что бы каждый раз при открытии графика они сохранялись?
Уверен, что на такие вопросы уже тысячу раз отвечено, но я честно не смог найти, я на форме искал и гуглил.

Включаешь тестер потом сразу можешь поставить на паузу правой кнопкой мыши кликаеш, выскакивает окно, внизу выбираешь свойства, потом настраиваешь как тебе угодно как обычный терминал, даже можешь закинуть индикатор в терминал тестера( но помни это будет больше тормозить при тестировке) потом выбираешь шаблон сохранить как а вот тут самое интересное, сохранить как записываешь слово " Tester" , и все у тебя всегда будет открываться сам этот шаблон сохраненный по словом тестер, если нужно можно изменить но снова сохранить под этим английским словом.
Аватар пользователя
YURIY007
 
Сообщений: 563
Зарегистрирован: 02 фев 2017, 17:47
Средств на руках: 2.30 Доллар
Откуда: Украина
Группа: Базовая
Благодарил (а): 271 раз.
Поблагодарили: 222 раз.
ПРОДАМ СТРОЧКУ В ПОДПИСИ — 25 WMZ на месяц. (для рекламы любого ресурса с вашей реф ссылкой).
мой журналквазиарбитражрегистрация на форум
1000$ в управление, без вложений (пишите в ЛС)

Вопросы по программированию в МТ4

Сообщение YURIY007 » 04 фев 2017, 21:29

ВЯЧЕСЛАВПЕТРОВ писал(а):Можно создать в момент работы советника дополнительную глобальную переменную изменять ее в свойствах и удалять.
Читал как работать с файлами и не понял как удалять строки в текстовом файле.
Как я понял скрипт и советник могут работать на одной паре одновременно, а два советника не могут.

Почему не могут, два советника могут работать главное чтобы у них были разные магик исе будет работать вешал на одну пару даже три робота по разных тс, так как я не профи в програмировании, то написал советники по разным стратегиям , а обединить в один что-то не получается.
Аватар пользователя
YURIY007
 
Сообщений: 563
Зарегистрирован: 02 фев 2017, 17:47
Средств на руках: 2.30 Доллар
Откуда: Украина
Группа: Базовая
Благодарил (а): 271 раз.
Поблагодарили: 222 раз.
ПРОДАМ СТРОЧКУ В ПОДПИСИ — 25 WMZ на месяц. (для рекламы любого ресурса с вашей реф ссылкой).
мой журналквазиарбитражрегистрация на форум
1000$ в управление, без вложений (пишите в ЛС)

Вопросы по программированию в МТ4

Сообщение ВЯЧЕСЛАВПЕТРОВ » 05 фев 2017, 09:38

YURIY007 писал(а):Почему не могут, два советника могут работать главное чтобы у них были разные магик исе будет работать вешал на одну пару даже три робота по разных тс, так как я не профи в програмировании, то написал советники по разным стратегиям , а обединить в один что-то не получается.

Что у меня не получается поставить два советника на одном графике поставить или я что то не понимаю?


AForex05.02.17.png
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Вопросы по программированию в МТ4

Сообщение tatarin » 05 фев 2017, 09:41

На одном графике не получится. Можно открыть еще один на том же ТФ и туда поставить второй советник (с другим мэджиком, разумеется)
Аватар пользователя
tatarin
 
Сообщений: 58
Зарегистрирован: 20 июл 2015, 09:48
Средств на руках: 4.80 Доллар
Группа: Базовая
Благодарил (а): 19 раз.
Поблагодарили: 17 раз.

Вопросы по программированию в МТ4

Сообщение Alexandeer » 05 фев 2017, 14:54

Как написать советника который будет работать сразу с несколькими парами? Желательно с ссылками на источники
Аватар пользователя
Alexandeer
 
Сообщений: 17
Зарегистрирован: 04 ноя 2016, 04:54
Средств на руках: 8.00 Доллар
Группа: Новые пользователи
Благодарил (а): 18 раз.
Поблагодарили: 0 раз.

Вопросы по программированию в МТ4

Сообщение Kalkin » 05 фев 2017, 17:00

tatarin писал(а):Помогите разобраться с буферами индикатора.
Нашел интересный гибридный стрелочник на 5 разных индикаторах, там 2 буфера.
Пробовал использовать его сигналы на известном шаблонном советнике exp_iCustom_v9_Martingale, которому надо указать номер буферов для покупки и продажи. Так вот, продажи проходят, а покупки - нет. Метод подбора не помог.
Для продажи используется буфер 0.

Вот кусок кода советника:
Код: выделить все
extern int        _O_M1_iBuyBufIndex         = 0;        // индекс буфера со стрелками на покупку
extern int        _O_M1_iSellBufIndex        = 1;        // индекс буфера со стрелками на продажу


А вот полный код индикатора:
Код: выделить все
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 Green

//extern
bool Allert=true;
bool Istoriy = true;
bool Rsi=true;
bool Cci_1=true;
bool Cci_2=true;
bool Stoh=true;
bool DIMI=true;
int Rasst_Arrow=10;
int Up_arrow=234;
int Down_arrow=233;
int Shift=1;
string comm1="Параметры RSI";
int Period_RSI=8;
int Primenit_k_RSI=0;
double RSI_lewel_UP=70;
double RSI_lewel_DOWN=30;
string comm2="Параметры CCI_1";
int CCI_1_period=14;
int CCI_1_primenit_k=0;

extern double CCI_UP=120;
extern  double CCI_DOWN=-120;
extern double DYMIL_UP=60;
extern double DYMIL_DOWN=40;

string comm3="Параметры CCI_2";
int CCI_2_period=7;
int CCI_2_primenit_k=0;

//extern 

string comm4="Параметры Stoh";
int Period_K=5;
int ZAmedlenie=2;
int Period_D=3;
int  Ceni    =0;
int Metod_MA=0;
double Stoh_UP=80;
double Stoh_DOWN=20;
string comm5="Параметры Dymi";
int stdevLength = 5;
int avgOfStdevLength = 10;
int DYMILength = 30;
int DYMILengthLowerLimit = 3;
int DYMILengthUpperLimit = 30;




int Gi_84 = 24;
bool Gi_88 = FALSE;
double G_ibuf_92[];
double G_ibuf_96[];


int G_bars_100 = 0;
int Bbars;
double RSI,CCI_1,CCI_2,STOH_m,STOH_s,Dymil;
int n,n1,n2,n3,n4,n5;
int m,m1,m2,m3,m4,m5;
string c;
// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 3);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 3);
   
   SetIndexArrow(1, Down_arrow);
   SetIndexArrow(0, Up_arrow);

   SetIndexBuffer(0, G_ibuf_92);
   SetIndexBuffer(1, G_ibuf_96);
 
   G_bars_100 = Bars;
   return (0);
}


// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   
   int Li_8 = IndicatorCounted();
   if (Li_8 < 0) return (-1);
   if (Li_8 > 0) Li_8--;
   int Li_12 = Bars - 1;
   if (Li_8 >= 1) Li_12 = Bars - Li_8 - 1;
   if (Li_12 < 0) Li_12 = 0;
   //Li_12=100;
   if(Istoriy==true)
   {
   for (int Li_16 = Li_12; Li_16 >= 0; Li_16--) {
   
   RSI=NormalizeDouble(iRSI(Symbol(),PERIOD_CURRENT,Period_RSI,Primenit_k_RSI,Li_16+Shift),4);
   CCI_1=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_1_period,CCI_1_primenit_k,Li_16+Shift),4);
   CCI_2=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_2_period,CCI_1_primenit_k,Li_16+Shift),4);
   STOH_m=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,0,Li_16+Shift),4);
   STOH_s=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,1,Li_16+Shift),4);
   Dymil=NormalizeDouble(iCustom(Symbol(),PERIOD_CURRENT,"DYMI",stdevLength,avgOfStdevLength,DYMILength,DYMILengthLowerLimit,DYMILengthUpperLimit,0,Li_16+Shift),4);
   if(Rsi)
   {if(RSI>RSI_lewel_UP)n1=1;else n1=0;
   }else n1=1;
 
  if(Cci_1)
  {if(CCI_1>CCI_UP)n2=1;else n2=0;
   }else n2=1;
  if(Cci_2)
  {if(CCI_2>CCI_UP)n3=1;else n3=0;
   }else n3=1;
   
  if(Stoh)
  {if(STOH_m>Stoh_UP&&STOH_s>Stoh_UP)n4=1;else n4=0;
   }else n4=1;
   
   if(DIMI)
   {if (Dymil>DYMIL_UP)n=1;else n=0;
   }else n=1;
 
    n5=n1*n2*n3*n4*n;
 
   if(n5>0 )
    {G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;}
   
    //////////////////////////////////////////////////////////////////////////////////////////////////




if(Rsi)
   {if(RSI<RSI_lewel_DOWN)m1=1;else m1=0;
   }else m1=1;
if(Cci_1)
  {if(CCI_1<CCI_DOWN)m2=1;else m2=0;
   }else m2=1;
if(Cci_2)
  {if(CCI_2<CCI_DOWN)m3=1;else m3=0;
   }else m3=1;

 if(Stoh)
  {if(STOH_m<Stoh_DOWN&&STOH_s<Stoh_DOWN)m4=1;else m4=0;
   }else m4=1;

if(DIMI)
   {if (Dymil<DYMIL_DOWN)m=1;else m=0;
   }else m=1;
 
    m5=m1*m2*m3*m4*m;
 
   if(m5>0 )
    {G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;}
 
   
 




    //
   
   }
   }
   /////////////////////////////////////
   if(n5>0 )
    {G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;
    c=Symbol()+" "+f0_0(Seconds())+"Sell!";
    if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
    }
   
   if(m5>0 )
    {G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;
    c=Symbol()+" "+f0_0(Seconds())+"Buy!";
   if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
   
   }
   
 
   
   
   
 
   return (0);
}

// 9B1AEE847CFB597942D106A4135D4FE6
int f0_1() {
   bool Li_ret_0 = FALSE;
   if (G_bars_100 != Bars) {
      Li_ret_0 = TRUE;
      G_bars_100 = Bars;
      Gi_88 = TRUE;
   }
   return (Li_ret_0);
}

// 945D754CB0DC06D04243FCBA25FC0802
string f0_0(int Ai_0) {
   if (Ai_0 == 60) return ("M1");
   if (Ai_0 == 300) return ("M5");
   if (Ai_0 == 900) return ("M15");
   if (Ai_0 == 1800) return ("M30");
   if (Ai_0 == 3600) return ("H1");
   if (Ai_0 == 14400) return ("H4");
   if (Ai_0 == 86400) return ("D1");
   if (Ai_0 == 604800) return ("W1");
   if (Ai_0 == 1619200) return ("MN1");
   return ("");
}

 double Imaxx(int Per)
   {double perr;
    perr = NormalizeDouble (iHigh(Symbol(),0,Per),Digits);
    return (perr);
   }
   //---Миниму--//
   double Iminn(int Per)
   {double perr;
    perr = NormalizeDouble (iLow(Symbol(),0,Per),Digits);
    return (perr);
   }
   //--Цена открытия--//
   double Cotkr(int Per)
   {double perr;
    perr = NormalizeDouble (iOpen(Symbol(),0,Per),Digits);
    return (perr);
    }
    //--Цена закрытия--//
    double Czakr(int Per)
   {double perr;
    perr = NormalizeDouble (iClose(Symbol(),0,Per),Digits);
    return (perr);
   }
   


Привязка правильная. Чтобы понять, где не работает, надо брать и советник, и индикатор, и смотреть, как происходит вызов индикатора в советнике. Скорее всего, в том месте и ошибка. Проверьте передачу параметров.
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron