Ответить
17.08.2014, 18:27
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Назрел другой вопрос. Как в классе сделать так, чтобы переменная была статичная?
Я пробывал в секции private инициализировать переменную с модификатором static, но что-то компилятор ругается:
PHP код:
unresolved static variable 'BaseInfo::LotDecimal'    BaseInfo.mqh    60    10 

Я так понимаю такой вариант не поддерживается. Какие ещё есть варианты?

Последний раз редактировалось hoz; 17.08.2014 в 18:51.
22.08.2014, 14:41
Аватар для barabashkakvn
barabashkakvn barabashkakvn вне форума Заблокирован
Регистрация: 20.08.2014 / Сообщений: 20
Поблагодарили 4 раз(а) / Репутация: 5
  • Отправить сообщение для barabashkakvn с помощью Skype™
Назрел другой вопрос. Как в классе сделать так, чтобы переменная была статичная?
Я пробывал в секции private инициализировать переменную с модификатором static, но что-то компилятор ругается:
PHP код:
unresolved static variable 'BaseInfo::LotDecimal'    BaseInfo.mqh    60    10 

Я так понимаю такой вариант не поддерживается. Какие ещё есть варианты?
Теперь статический член класса должен быть проинициализирован в обязательном порядке.
24.08.2014, 19:43
Аватар для ctmcn
ctmcn ctmcn вне форума Новичок форума
Регистрация: 02.04.2011 / Сообщений: 35
Поблагодарили 6 раз(а) / Репутация: 7
Здравствуйте !
При компиляции в 670 билде пишет варнинг... поправте пожалуйта.
С уважением.
24.08.2014, 20:27
Аватар для barabashkakvn
barabashkakvn barabashkakvn вне форума Заблокирован
Регистрация: 20.08.2014 / Сообщений: 20
Поблагодарили 4 раз(а) / Репутация: 5
  • Отправить сообщение для barabashkakvn с помощью Skype™
Здравствуйте !
При компиляции в 670 билде пишет варнинг... поправте пожалуйта.
С уважением.
Возьмите оригинал _http://www.mql5.com/ru/code/8604 Всё компилируется и работает.

Последний раз редактировалось NSerega; 24.08.2014 в 22:02.
24.08.2014, 21:32
Аватар для ctmcn
ctmcn ctmcn вне форума Новичок форума
Регистрация: 02.04.2011 / Сообщений: 35
Поблагодарили 6 раз(а) / Репутация: 7
Сообщение от: barabashkakvn
Возьмите оригинал _http://www.mql5.com/ru/code/8604 Всё компилируется и работает.
А я о чем говорю - "оригинал":
варнинг - "not all control paths return a value - 56 строка"
Как убрать ?

Последний раз редактировалось NSerega; 24.08.2014 в 22:03.
24.08.2014, 22:03
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,851
Поблагодарили 9,512 раз(а) / Репутация: 9517
А я о чем говорю - "оригинал":
варнинг - "not all control paths return a value - 56 строка"
Как убрать ?
Вы малость ошиблись темой, нужно в "Больничку".
25.08.2014, 05:37
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
Цитата:
Здравствуйте !
При компиляции в 670 билде пишет варнинг... поправте пожалуйта.
С уважением.
int deinit()
{
ObjectDelete("pr" + sName);
}
Дальше, со словарём.
not all control paths return a value Center of Gravity.mq4 48 1


Последний раз редактировалось _SERG_; 25.08.2014 в 05:43.
26.08.2014, 03:17
Аватар для Александр_Стручков
Александр_Стручков Александр_Стручков вне форума Интересующийся
Регистрация: 14.07.2014 / Адрес: Ачинск / Сообщений: 20
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Всем доброго времени!

Выдает ошибку array out of range. Не могу сообразить как победить

Сов мультивалютный. Вспомогательный. Просто выдает алерт при выполнении условия по любой паре из списка.

Скрытый текст

PHP код:
extern string sym="EURUSD,EURJPY";
extern int per1=150;//Период быстрого мувинга
extern int per2=250;//Период медленного мувинга
extern int timeframe=15;//Таймфрейм
double ma1;
double ma2;
double ma11;
double ma22;

int alert(string symbolstring pos)
{
if (
pos=="Short")
 
Alert ("Short","  ",symbol,"  ",Hour(),":",Minute()); 
 
SendMail("Short","Short"+"  "+symbol+"  "+IntegerToString(Hour(),10,' ')+":"+IntegerToString(Minute(),10,' '));
 
if (
pos=="Long")
 
Alert ("Long","  ",symbol,"  ",Hour(),":",Minute()); 
 
SendMail("Long","Long"+"  "+symbol+"  "+IntegerToString(Hour(),10,' ')+":"+IntegerToString(Minute(),10,' '));
return(
0);
}

string ma (string symb){
ma1=iMA(symb,timeframe,per1,0,MODE_EMA,PRICE_CLOSE,1);
ma2=iMA(symb,timeframe,per2,0,MODE_EMA,PRICE_CLOSE,1);
ma11=iMA(symb,timeframe,per1,0,MODE_EMA,PRICE_CLOSE,2);
ma22=iMA(symb,timeframe,per2,0,MODE_EMA,PRICE_CLOSE,2);
if (
ma11>ma22&&ma1<=ma2) return ("Short");else if (ma11<ma22&&ma1>=ma2) return ("Long"); else return("0");
}
int b;
int c;
string sym_arr[];
string time[];
string symbol_arr;
string time_arr;
void OnTick()
  {
b=StringSplit(sym,StringGetCharacter(",",0),sym_arr);
c=ArrayResize(sym_arr,ArraySize(sym_arr)+100);
if (
b>0)
{
for (
int i=0;i<b;i++)
{
symbol_arr=sym_arr[i];

if (
time[i]!=(string)iTime(symbol_arr,timeframe,1)&&ma(symbol_arr)!="0") {alert(symbol_arr,ma(symbol_arr));time[i]=(string)iTime(symbol_arr,timeframe,1);}
}
}

[свернуть]

Последний раз редактировалось Александр_Стручков; 26.08.2014 в 04:04.
26.08.2014, 05:55
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
Сообщение от: Александр_Стручков
Всем доброго времени!

Выдает ошибку array out of range. Не могу сообразить как победить

Сов мультивалютный. Вспомогательный. Просто выдает алерт при выполнении условия по любой паре из списка.

Скрытый текст

PHP код:
extern string sym="EURUSD,EURJPY";
extern int per1=150;//Период быстрого мувинга
extern int per2=250;//Период медленного мувинга
extern int timeframe=15;//Таймфрейм
double ma1;
double ma2;
double ma11;
double ma22;

int alert(string symbolstring pos)
{
if (
pos=="Short")
 
Alert ("Short","  ",symbol,"  ",Hour(),":",Minute()); 
 
SendMail("Short","Short"+"  "+symbol+"  "+IntegerToString(Hour(),10,' ')+":"+IntegerToString(Minute(),10,' '));
 
if (
pos=="Long")
 
Alert ("Long","  ",symbol,"  ",Hour(),":",Minute()); 
 
SendMail("Long","Long"+"  "+symbol+"  "+IntegerToString(Hour(),10,' ')+":"+IntegerToString(Minute(),10,' '));
return(
0);
}

string ma (string symb){
ma1=iMA(symb,timeframe,per1,0,MODE_EMA,PRICE_CLOSE,1);
ma2=iMA(symb,timeframe,per2,0,MODE_EMA,PRICE_CLOSE,1);
ma11=iMA(symb,timeframe,per1,0,MODE_EMA,PRICE_CLOSE,2);
ma22=iMA(symb,timeframe,per2,0,MODE_EMA,PRICE_CLOSE,2);
if (
ma11>ma22&&ma1<=ma2) return ("Short");else if (ma11<ma22&&ma1>=ma2) return ("Long"); else return("0");
}
int b;
int c;
string sym_arr[];
string time[];
string symbol_arr;
string time_arr;
void OnTick()
  {
b=StringSplit(sym,StringGetCharacter(",",0),sym_arr);
c=ArrayResize(sym_arr,ArraySize(sym_arr)+100);
if (
b>0)
{
for (
int i=0;i<b;i++)
{
symbol_arr=sym_arr[i];

if (
time[i]!=(string)iTime(symbol_arr,timeframe,1)&&ma(symbol_arr)!="0") {alert(symbol_arr,ma(symbol_arr));time[i]=(string)iTime(symbol_arr,timeframe,1);}
}
}

[свернуть]
Пишешь : string sym_arr[];, а какой именно ?
b = StringSplit ( sym,StringGetCharacter(",",0), sym_arr ); // Размерчик то не опрределён
Тут глючёк, начинаем менять размер.
c=ArrayResize(sym_arr, ArraySize(sym_arr)+100); // После того как ошибка уже есть.
Очевидное предложение , поменять строки местами, для начала.
Ну, и посмотреть, что написал по факту, а не то, что думал написать.
Успехов.

PS
Глюков много.
Проверь пошагово каждую строку, напиши к ней комментарий, что именно ты сделал в строке, и что должно получится в результате.
Думай не абстрактно, а конкретно.

Последний раз редактировалось _SERG_; 26.08.2014 в 06:14.
26.08.2014, 07:40
Аватар для Александр_Стручков
Александр_Стручков Александр_Стручков вне форума Интересующийся
Регистрация: 14.07.2014 / Адрес: Ачинск / Сообщений: 20
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Пишешь : string sym_arr[];, а какой именно ?
b = StringSplit ( sym,StringGetCharacter(",",0), sym_arr ); // Размерчик то не опрределён
Тут глючёк, начинаем менять размер.
c=ArrayResize(sym_arr, ArraySize(sym_arr)+100); // После того как ошибка уже есть.
Очевидное предложение , поменять строки местами, для начала.
Ну, и посмотреть, что написал по факту, а не то, что думал написать.
Успехов.

PS
Глюков много.
Проверь пошагово каждую строку, напиши к ней комментарий, что именно ты сделал в строке, и что должно получится в результате.
Думай не абстрактно, а конкретно.
SERG, большое спасибо за ответ! Решение, оказывается, было рядом

Нужно было либо изначально задать заведомо бОльший размер массива, либо повторно заполнять массив после изменения его размера. Оба варианта работают
26.08.2014, 17:08
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Подскажите, как правильно передать в метод классах структуру по ссылке? Желательно на примере. Теоритически я понимаю, но практически какие-то косяки возникают.
Вот структура:
PHP код:
// =================================================_______ СВОЙСТВА СИМВОЛА _______=======================================================
struct Symbol_Properties
{
   
datetime    gdt_Quote;           // Время поступления последней котировки
   
double      gda_Price [2];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   
double      gd_Spread;           // Размер спреда в пунктах
   
double      gd_Swap;             // Своп
   
double      gd_Comission;        // Комиссия
   
double      gd_Pt;               // Величина одного пункта
   
int         gi_Digits;           // Количество знаков в цене после запятой
   
int         gi_StopLevel;        // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   
int         gi_FreezLevel;       // Уровень заморозки ордеров в пунктах
};
//---- Создадим объект структуре Symbol_Properties
Symbol_Properties SSym
В классе, который метод которого должен вызывает данную структуру по ссылке вот так я сделал:
PHP код:
// Конструктор класса. ====================================================================================================================
BaseInfo::BaseInfo (Symbol_PropertiesSSym)
{
   
//---- Инициализируем закрытые переменные input-значениями
   
SetBootstrap (ib_Bootstrap);
   
SetRealTrade (ib_RealTrade);
   
SetVirtualTrade (ib_VirtualTrade);
   
//---- Инициализируем другие данные необходимые для работы класса
   
ExpertName StringConcatenate (WindowExpertName(), ":  "GetNameTF (_Period), "_"_Symbol);
   
RealTrade = (!IsTesting() && !IsOptimization());
   
VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode()));
   if ( 
SSym.gd_Pt == 0.0 )
       {
SSym.gd_Pt GetPoint (_Symbol);}
   
GetMarkerInfo (_SymbolSSymSPos, -1);
   
SLots.gd_MinLot MarketInfo (_SymbolMODE_MINLOT);
   
SLots.gd_MaxLot MarketInfo (_SymbolMODE_MAXLOT);
   
SLots.gd_LotStep MarketInfo (_SymbolMODE_LOTSTEP);
   
SLots.gd_LotSize MarketInfo (_SymbolMODE_LOTSIZE);
   
SLots.gi_LotDecimal LotDecimal();
   
CArraysMan.InitializeArraySTR (Comments"");
   
//---- Определение индекса " ошибок " в массиве комментариев Comments[]
   
IndErr ArraySize (Comments) - 1;
   
//---- Контроль возможных ошибок

Компилятор ругается в месте заголовка конструктора:
PHP код:
'CBase' - default constructor not defined    BaseInfo.mqh    63    10
declaration of 
'SSym' hides global declaration in file 'MarketData.mqh' at line 32    BaseInfo.mqh    66    40 
31.08.2014, 17:11
Аватар для viplert
viplert viplert вне форума Активный участник
Регистрация: 07.01.2014 / Сообщений: 126
Поблагодарили 41 раз(а) / Репутация: 42
В программировании на mql4 я нови чек и столкнулся с такой проблемой что при тестировании советника ордера на покупку открываются выше свечи на 4 пункта, почему так происходит ведь на продажу открывается правильно?
31.08.2014, 21:20
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
В программировании на mql4 я нови чек и столкнулся с такой проблемой что при тестировании советника ордера на покупку открываются выше свечи на 4 пункта, почему так происходит ведь на продажу открывается правильно?
Тебе просто надо понять что такое Ask и что такое Bid. По какой цене открываются покупки и по какой продажи. И всё встанет на свои места.
06.09.2014, 08:32
Аватар для barabashkakvn
barabashkakvn barabashkakvn вне форума Заблокирован
Регистрация: 20.08.2014 / Сообщений: 20
Поблагодарили 4 раз(а) / Репутация: 5
  • Отправить сообщение для barabashkakvn с помощью Skype™
В программировании на mql4 я нови чек и столкнулся с такой проблемой что при тестировании советника ордера на покупку открываются выше свечи на 4 пункта, почему так происходит ведь на продажу открывается правильно?
Вот из справки к терминалу:
Цитата:
Цена — текущая цена финансового инструмента. Для позиций на продажу отображается цена Bid, для позиций на покупку — цена Ask, для позиций по биржевым инструментам (в обоих направлениях) отображается цена последней совершенной сделки (Last);
10.09.2014, 18:22
Аватар для ctmcn
ctmcn ctmcn вне форума Новичок форума
Регистрация: 02.04.2011 / Сообщений: 35
Поблагодарили 6 раз(а) / Репутация: 7
Здравствуйте !
Подскажите, пожалуйста - какое значение в буфере (0 или 1 или другое) для зеленого, красного цвета на гистограмме индикатора Вильямса АО из стандартного набора МТ4. Если я правильно понимаю:
- 0 буфер для расчета числовых значений гистограммы,
- 1 буфер для окрашивания гистограммы в зеленый,
- 2 буфер для окрашивания гистограммы в красный.
Спрашиваю, потому, что обычно текущий бар на гистограмных индикаторах окрашивается в тот цвет, где в буфере в этот момент (1). На АО Вильямса может как-то по другому - проверял через тестер стратегий - не открываются ордера.
Любой другой гистограмный индикатор, у которого на текущет баре в буфере (1) - работает.
10.09.2014, 19:24
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,188 раз(а) / Репутация: 3193
  • Отправить сообщение для tommy27 с помощью Skype™
Здравствуйте !
Подскажите, пожалуйста...
А вы через Comment() выводите на экран показания буферов и всё понятно будет.
Я функцию такую написал, оч удобно.
Вместо b1,b2,b3 вставляйте переменные, которые надо посмотреть/проверить и всё:
PHP код:
////////////////////
// Commentariy()
////////////////////
void Commentariy()
  {
    
string st
            
"Buf1_____"+b1+"\n"+
            
"Buf2_____"+b2+"\n"+
            
"Buf3_____"+b3+"\n"+
           
            
"Spred__"+DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD),2);
           
   
Comment(st);  
  } 

Последний раз редактировалось tommy27; 10.09.2014 в 19:28.
ctmcn , Юла 
11.09.2014, 19:39
Аватар для div15
div15 div15 вне форума Интересующийся
Регистрация: 18.07.2011 / Сообщений: 7
Поблагодарили 0 раз(а) / Репутация: 1
кто поможет написать функцию LotExponent при срабатывании стоп лоса
11.09.2014, 21:35
Аватар для supporttr
supporttr supporttr вне форума Местный житель
Регистрация: 21.02.2009 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 0
Подскажите, как правильно передать в метод классах структуру по ссылке? Желательно на примере. Теоритически я понимаю, но практически какие-то косяки возникают.
Вот структура:
PHP код:
// =================================================_______ СВОЙСТВА СИМВОЛА _______=======================================================
struct Symbol_Properties
{
   
datetime    gdt_Quote;           // Время поступления последней котировки
   
double      gda_Price [2];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   
double      gd_Spread;           // Размер спреда в пунктах
   
double      gd_Swap;             // Своп
   
double      gd_Comission;        // Комиссия
   
double      gd_Pt;               // Величина одного пункта
   
int         gi_Digits;           // Количество знаков в цене после запятой
   
int         gi_StopLevel;        // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   
int         gi_FreezLevel;       // Уровень заморозки ордеров в пунктах
};
//---- Создадим объект структуре Symbol_Properties
Symbol_Properties SSym
В классе, который метод которого должен вызывает данную структуру по ссылке вот так я сделал:
PHP код:
// Конструктор класса. ====================================================================================================================
BaseInfo::BaseInfo (Symbol_PropertiesSSym)
{
   
//---- Инициализируем закрытые переменные input-значениями
   
SetBootstrap (ib_Bootstrap);
   
SetRealTrade (ib_RealTrade);
   
SetVirtualTrade (ib_VirtualTrade);
   
//---- Инициализируем другие данные необходимые для работы класса
   
ExpertName StringConcatenate (WindowExpertName(), ":  "GetNameTF (_Period), "_"_Symbol);
   
RealTrade = (!IsTesting() && !IsOptimization());
   
VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode()));
   if ( 
SSym.gd_Pt == 0.0 )
       {
SSym.gd_Pt GetPoint (_Symbol);}
   
GetMarkerInfo (_SymbolSSymSPos, -1);
   
SLots.gd_MinLot MarketInfo (_SymbolMODE_MINLOT);
   
SLots.gd_MaxLot MarketInfo (_SymbolMODE_MAXLOT);
   
SLots.gd_LotStep MarketInfo (_SymbolMODE_LOTSTEP);
   
SLots.gd_LotSize MarketInfo (_SymbolMODE_LOTSIZE);
   
SLots.gi_LotDecimal LotDecimal();
   
CArraysMan.InitializeArraySTR (Comments"");
   
//---- Определение индекса " ошибок " в массиве комментариев Comments[]
   
IndErr ArraySize (Comments) - 1;
   
//---- Контроль возможных ошибок

Компилятор ругается в месте заголовка конструктора:
PHP код:
'CBase' - default constructor not defined    BaseInfo.mqh    63    10
declaration of 
'SSym' hides global declaration in file 'MarketData.mqh' at line 32    BaseInfo.mqh    66    40 
#2569 && #2571
12.09.2014, 09:46
Аватар для extegonug
extegonug extegonug вне форума Интересующийся
Регистрация: 12.09.2014 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
где бы найти полный сборник уроков по этому языку, чтобы начать вникать в суть?
12.09.2014, 13:49
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,851
Поблагодарили 9,512 раз(а) / Репутация: 9517
где бы найти полный сборник уроков по этому языку, чтобы начать вникать в суть?
«Торговый робот своими руками»
Здесь описание: _http://mql.info-dvd.ru/
Здесь видео: _https://cloud.mail.ru/public/633ed41c36c0/torgrobot.rar
Пароль на архив: N76XJQ80PA1TWNQR5P9BJE6T8S1GT7

А так же смотри здесь: _http://tradelikeapro.ru/programmirovanie-na-mql-kurs/

Последний раз редактировалось mobidik; 12.09.2014 в 14:00.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 12:13. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO