Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
её действительно надо вызывать на каждом тике, чтобы локальная база эксперта обновлялась, так как перенаправление доступа для безопасности идёт не напрямую в историю, а в её локальную копию.
Не понял.
В ArrayCopySeries можно копировать только
так в хелпе написано.
Как копировать из индикаторного массива непонятно.
Собственно я хотел узнать можно ли вот так написать индикатор:
//+------------------------------------------------------------------+ //| MIndex.mq4 | //| Copyright © 2005, Yuri Makarov. | //| http://mak.tradersmind.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Yuri Makarov." #property link "http://mak.tradersmind.com" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 OrangeRed extern string Curency = "USD"; double EurUsd[],UsdChf[],GbpUsd[],UsdJpy[],AudUsd[],UsdCad[]; double Idx[]; int init() { IndicatorShortName(Curency); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Idx); ArrayCopySeries(EurUsd,MODE_CLOSE,"EURUSD"); ArrayCopySeries(GbpUsd,MODE_CLOSE,"GBPUSD"); ArrayCopySeries(AudUsd,MODE_CLOSE,"AUDUSD"); ArrayCopySeries(UsdChf,MODE_CLOSE,"USDCHF"); ArrayCopySeries(UsdJpy,MODE_CLOSE,"USDJPY"); ArrayCopySeries(UsdCad,MODE_CLOSE,"USDCAD"); return(0); } void start() { int counted_bars=IndicatorCounted(); double USD; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(int i=0; i<limit; i++) if (UsdChf[i]*UsdJpy[i]*UsdCad[i]*EurUsd[i]*GbpUsd[i]*AudUsd[i] > 0) { USD = MathPow(UsdChf[i]*UsdJpy[i]*UsdCad[i]/EurUsd[i]/GbpUsd[i]/AudUsd[i],1./7.); if (Curency == "USD") Idx[i] = USD; if (Curency == "EUR") Idx[i] = USD*EurUsd[i]; if (Curency == "GBP") Idx[i] = USD*GbpUsd[i]; if (Curency == "AUD") Idx[i] = USD*AudUsd[i]; if (Curency == "CHF") Idx[i] = USD/UsdChf[i]; if (Curency == "JPY") Idx[i] = USD/UsdJpy[i]; if (Curency == "CAD") Idx[i] = USD/UsdCad[i]; } }У меня с этим индикатором и другие проблемы есть.
Причем эти проблемы были когда ArrayCopySeries вызывались на каждом тике.
В этой версии пока еще не видел.
Например такое ощущение, что не все данные по другим парам подкачиваются, если листать в начало чарта. Индикатор при этом показывает неправильные значения.
Поэтому я и спрашивал раньше, нельзя ли задавать в скрипте явно требуемую глубину истории. (мне ответили что этого не будет)
double CloseBuffer[]; ... int init() { SetIndexBuffer(0,CloseBuffer); ... } int start() { ... ArrayCopySeries(CloseBuffer,MODE_CLOSE,another_symbol,Period()); ... }то есть я провёл прямое копирование таймсерии чужого инструмента в свой самый первый индикаторный массив
в Вашем индикаторе практически всё правильно, за исключением того, что ArrayCopySeries необходимо перенести в функцию init. во-вторых, в Вашем вызове ArrayCopySeries не хватает четвёртого параметра - периода.
спасибо.
Да, я это сейчас сделал (и в скрипте выше ArrayCopySeries стоит в init).
Третий и четвертый параметры судя по хелпу необязательные, и скрипт и без четвертого работает.
Попробую его добавить, может глюки исчезнут.
Спасибо за инфо.
спасибо.
Да, я это сейчас сделал (и в скрипте выше ArrayCopySeries стоит в init).
Третий и четвертый параметры судя по хелпу необязательные, и скрипт и без четвертого работает.
Попробую его добавить, может глюки исчезнут.
Спасибо за инфо.
ОЧЕНЬ СИЛЬНО ИЗВИНЯЮСЬ!!!
вызовы ArrayCopySeries необходимо перенести из функции init в функцию start!
прошу прощения за описку
Я еще понаблюдаю.
прошу прощения за описку
А почему?
Хотелось бы понимать, чтобы было меньше глупых вопросов.
Поэтому извиняюсь если гдето есть прямое описание ответа на вопрос который я сейчас задам.
А можно ли передавать в dll массив вычисленного индикатора ?
И какую структуру нужно обьявлять как элемент этого массива в исходнике dll ?
А можно ли передавать в dll массив вычисленного индикатора ?
И какую структуру нужно обьявлять как элемент этого массива в исходнике dll ?
в dll можно передавать любые массивы.
массив вычисленного индикатора должен быть заполнен самостоятельно в цикле от 0 до Bars. перед этим массиву необходимо обеспечить соответствующий размер. самое интересное, что в своей dll Вы можете изменить значения в массиве.
посмотрите наш пример ExpertSample.dll, функции GetArrayItemValue и SetArrayItemValue
из пользовательского индикатора Вы можете сразу передать в dll индикаторный массив.