Спасибо. Очень информативно.
Я пытаюсь понять, что означает этот код в этой статье, почему мы ставим * рядом с CINDICATOBUFFER, а затем используем at.
((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");
Буду признателен за подробное объяснение
спасибо
Я пытаюсь понять, что означает этот код в этой статье, почему мы имеем * рядом с CINDICATOBUFFER, а затем используем at.
((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");
Буду признателен за подробное объяснение
спасибо
строка
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. По умолчанию получается направление от настоящего в прошлое а надо сделать от прошлого в настоящее. Со вчерашнего дня бьюсь над этим вопросом! помогите!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Расширение стандартной библиотеки MQL5 и повторное использование кода:
Стандартная библиотека MQL5 значительно упрощает жизнь разработчика. Однако она не может удовлетворить все требования абсолютно всех разработчиков в мире, поэтому если вы хотите иметь в своем распоряжении больше пользовательских элементов, вам необходимо расширить ее. В статье описывается интеграция обычного индикатора ZigZag в стандартную библиотеку. В ходе работы мы придерживались принципов разработки, применяемых в компании MetaQuotes.
Говоря кратко, MQL5 API предлагает вам надежность, гибкость, простоту обслуживания, а также возможность повторного использования кода. Если вы собираетесь совершенствовать ваши навыки в языке MQL5 и разрабатывать сложные приложения, например, мультивалютные советники, вам прежде всего необходимо освоить стандартную библиотеку, чтобы обеспечить своим программам успешную жизнь.
По мере усложнения ваших торговых советников и индикаторов необходимость в усвоении понятий, связанных с разработкой фреймворков, будет только возрастать. В качестве конкретного примера могу назвать собственную потребность в сложном мультивалютном советнике, которая заставляет тщательно продумывать основы проекта при его разработке с нуля.
Автор: Jordi Bassaganas