Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 730
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
bars[]
Обозвал Bars, компилятор обругал на чём свет стоит. Вы проверяли эту конструкцию, или просто предположили что должно работать, или Я делаю что-то не так?
Да, моя ошибка. Назовите bars. В общем идея в том, что бы давать выразительные имена переменным, тогда не надо будет создавать дополнительные переменные, существование которых не всегда бывает оправданным.
Называл не для того, чтоб что-то выразить, а для того, чтоб сократить код при работе с ними:
Ну и дальше в том-же духе, в противном случае - длина строк увеличивается
Спасибо всем за разъяснения!
Называл не для того, чтоб что-то выразить, а для того, чтоб сократить код при работе с ними:
Ну и дальше в том-же духе, в противном случае - длина строк увеличивается
Спасибо всем за разъяснения!
Если хотите сократить код до минимума, делайте обращение непосредственно к массиву данных
//| test09.mq5 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ArraySetAsSeries(bars, true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
{
}
}
//+------------------------------------------------------------------+
Добрый день!
Где и как правильно удалять выставленные ордера и открытые позиции при выгрузке (удалении) эксперта? Если несложно, поделитесь примером пожалуйста.
Спасибо.
У одного из советников какая-то странная ерунда. Тестируется советник нормально, при нажатии на "Запустить одиночное тестирование" прогоняется только один единственный, первый раз. Далее при нажатии на одиночное тестирование или при нажатии на любую строчку в Оптимизации, в Журнале показывается:
2017.02.08 13:31:05.165 Tester cannot get inputs for pass 4234087422336
2017.02.08 13:31:34.829 Tester cannot get inputs for pass 4076312468706
2017.02.08 13:31:47.973 Tester cannot get inputs for pass 1004506640527
Остальные советники ведут себя нормально. Что бы это могло быть?
Господа, записываю огромную матрицу 10000*10000
{
//--- запишем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
//---
if(handle!=INVALID_HANDLE)
{
for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
{
for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
{
arra[q]=sm.d[q].m[nBar-z]; // M(I) SMA
}
//--- запишем данные массива в конец файла FileTell IsFileLineEnded
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arra);
}
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError()," handle ",handle);
//---
count=1;
}
Как считаете эффективен по скорости этот алгоритм?
Потому что при матрице 1000*1000 скорость несколько секунд, при увеличении до 10000*10000 система встает
Господа, записываю огромную матрицу 10000*10000
{
//--- запишем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
//---
if(handle!=INVALID_HANDLE)
{
for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
{
for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
{
arra[q]=sm.d[q].m[nBar-z]; // M(I) SMA
}
//--- запишем данные массива в конец файла FileTell IsFileLineEnded
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arra);
}
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError()," handle ",handle);
//---
count=1;
}
Как считаете эффективен по скорости этот алгоритм?
Потому что при матрице 1000*1000 скорость несколько секунд, при увеличении до 10000*10000 система встает
Ничего не путаешь?
Это как можно получить такую матрицу если допускаются не более чем четырёхмерные массивы?
Ничего не путаешь?
А 10000 х 10000 разве не двумерный?
и всё такое...
Это как можно получить такую матрицу если допускаются не более чем четырёхмерные массивы?
Ничего не путаешь?