строка
m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
у меня не находит путь к индикатору.
Как правильно указывать здесь путь, индикаторы которые пытаюсь вызвать лежать в стандартной папке
Стандартный Zigzag лежит в папке Examples - нужно добавить имя папки в путь
2017.07.12 10:38:05.703 Proba2 (EURUSD.m,M1) cannot load custom indicator 'Examples\ZigZag' [4302]
А кто будет смотреть на код ошибки?
ERR_MARKET_NOT_SELECTED |
4302 |
Символ не выбран в MarketWatch |
А кто будет смотреть на код ошибки?
ERR_MARKET_NOT_SELECTED |
4302 |
Символ не выбран в MarketWatch |
Ставлю NULL - работает, ставлю "EURUSD" - не работает!!!
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period, const int depth,const int deviation_create,const int backstep) { //--- проверяем историю if(!SetSymbolPeriod(symbol,period)) return(false); //--- создаем //m_handle=iCustom(symbol,period,"Examples\\ZigZag",depth,deviation_create,backstep); //m_handle=iCustom("EURUSD",period,"Examples\\ZigZag",depth,deviation_create,backstep); - НЕ работает m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep); - работает //--- проверяем результат if(m_handle==INVALID_HANDLE) return(false); //--- индикатор успешно создан if(!Initialize(symbol,period,depth,deviation_create,backstep)) { //--- ошибка инициализации IndicatorRelease(m_handle); m_handle=INVALID_HANDLE; return(false); } //--- ok return(true); } IndicatorRelease(m_handle); m_handle=INVALID_HANDLE; return(false); } //--- ok return(true); }
//+------------------------------------------------------------------+ //| Создаем индикатор "Zig Zag" | //+------------------------------------------------------------------+ bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period, const int depth,const int deviation_create,const int backstep) { //--- проверяем историю if(!SetSymbolPeriod(symbol,period)) return(false); //--- создаем m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep); //--- проверяем результат if(m_handle==INVALID_HANDLE) return(false); //--- индикатор успешно создан if(!Initialize(symbol,period,depth,deviation_create,backstep)) { //--- ошибка инициализации IndicatorRelease(m_handle); m_handle=INVALID_HANDLE; return(false); } //--- ok return(true); }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period, const int depth,const int deviation_init,const int backstep) { if(CreateBuffers(symbol,period,3)) { //--- строка состояния отрисовки m_name ="ZigZag"; m_status="("+symbol+","+PeriodDescription()+","+ IntegerToString(depth)+","+IntegerToString(deviation_init)+","+ IntegerToString(backstep)+") H="+IntegerToString(m_handle); //--- сохраняем настройки m_depth=depth; m_deviation=deviation_init; m_backstep=backstep; //--- создаем буферы ((CIndicatorBuffer*)At(0)).Name("ZIGZAG"); ((CIndicatorBuffer*)At(1)).Name("HIGH"); ((CIndicatorBuffer*)At(2)).Name("LOW"); //--- ok return(true); } //--- ошибка return(false); }
Помогите понять, как здесь задается направление индексации массива буфера индикатора, т.е. так же как задает ArraySetAsSeries. По умолчанию получается направление от настоящего в прошлое а надо сделать от прошлого в настоящее. Со вчерашнего дня бьюсь над этим вопросом! помогите!
Помогите понять, как здесь задается направление индексации массива буфера индикатора, т.е. так же как задает ArraySetAsSeries. По умолчанию получается направление от настоящего в прошлое а надо сделать от прошлого в настоящее. Со вчерашнего дня бьюсь над этим вопросом! помогите!
Ему это не требуется, так как он использует стандартный ZigZag
//--- создаем m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
Вот в этом ZigZag и ищите место, где задается направление. Только все равно непонятно, зачем вам это нужно - направление индексации можно менять самостоятельно в любой момент - https://www.mql5.com/ru/docs/series.
- www.mql5.com
Ему это не требуется, так как он использует стандартный ZigZag
Вот в этом ZigZag и ищите место, где задается направление. Только все равно непонятно, зачем вам это нужно - направление индексации можно менять самостоятельно в любой момент - https://www.mql5.com/ru/docs/series.
Спасибо за информацию, будем разбираться!
Ему это не требуется, так как он использует стандартный ZigZag
Вот в этом ZigZag и ищите место, где задается направление. Только все равно непонятно, зачем вам это нужно - направление индексации можно менять самостоятельно в любой момент - https://www.mql5.com/ru/docs/series.
Извините но все равно не понятно как менять направление индексации, к примеру если нет доступа к исходнику Zigzag. Направление индексации задает ArraySetAsSeries() - где входным параметром является массив по ссылке,
но у нас этого массива нет а есть только указатель на массив буфера индикатора в виде
//--- создаем буферы ((CIndicatorBuffer*)At(0)).Name("ZIGZAG"); ((CIndicatorBuffer*)At(1)).Name("HIGH"); ((CIndicatorBuffer*)At(2)).Name("LOW");
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Расширение стандартной библиотеки MQL5 и повторное использование кода:
Стандартная библиотека MQL5 значительно упрощает жизнь разработчика. Однако она не может удовлетворить все требования абсолютно всех разработчиков в мире, поэтому если вы хотите иметь в своем распоряжении больше пользовательских элементов, вам необходимо расширить ее. В статье описывается интеграция обычного индикатора ZigZag в стандартную библиотеку. В ходе работы мы придерживались принципов разработки, применяемых в компании MetaQuotes.
Говоря кратко, MQL5 API предлагает вам надежность, гибкость, простоту обслуживания, а также возможность повторного использования кода. Если вы собираетесь совершенствовать ваши навыки в языке MQL5 и разрабатывать сложные приложения, например, мультивалютные советники, вам прежде всего необходимо освоить стандартную библиотеку, чтобы обеспечить своим программам успешную жизнь.
По мере усложнения ваших торговых советников и индикаторов необходимость в усвоении понятий, связанных с разработкой фреймворков, будет только возрастать. В качестве конкретного примера могу назвать собственную потребность в сложном мультивалютном советнике, которая заставляет тщательно продумывать основы проекта при его разработке с нуля.
Автор: Jordi Bassaganas