kazakov.v: Учитываешь, что в dll массив приходит не как т.н. "таймсерия"? Т.е. price[0] - это самая первая, самая старая цена.
Давай подумаем. Если пихать в длл таймсерию, у которой обратная индексация, то, как ты говоришь, price[0] в длл это в МТ4 самая первая (левая) цена, в моем случае цена Open бара с индексом Bars-1 в МТ4. А у нашего 0-го бара в МТ4 в длл будет индекс Bars-1. Получается, что если пихнуть в длл массив и задать вывод 1000 баров, то в случае с обычным массивом выведется так же, т.е. крайние правые (для МТ4) 1000 баров. А в случае с таймсерией выведутся крайние левые 1000 баров. Т.е. в любом случае будут цены. Просто в случае с таймсерией это будут не те цены. В последнем своем посте с картинками я и не стремился за правильностью. Просто вывел цены, с 0 по 999. Сейчас попробовал с 1000 по 1999. Та же 1000, но со смещением 1000. Ситуация та же самая. Но кое что новое обнаружил. Просто индюк не вылетал, повода лазить в журнал не было, а сейчас посмотрел. Обнаружил там запись: 2014.04.01 10:35:37.904 Access violation read to 0xC0D4F8B4 in 'E:\Program Files\Alpari MT4 Beta\MQL4\indicators\i_STO.ex4'. Ранее я нарывался на подобную запись, если в запарке массив объявлял, например aaa[], а размер ему задать забывал ArrayResize(aaa,1000). Тогда если такой массив при позднем связывании суется в dll, то и вылетает Access violation read. Но почему сейчас вылетела, не понятно. Посмотрел в отладчике, про массив open написано dynamic array[57040],TS. Все верно, евра, часовка, 57040 баров.
Возвращает значение технического индикатора Moving Average.
double iMA( stringsymbol, // имя символа int timeframe, // таймфрейм int ma_period, // период intma_shift, // сдвиг средней intma_method, // метод усреднения intapplied_price, // тип цены intshift// сдвиг );
Параметры
symbol
[in] Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe
[in] Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.
ma_period
[in] Период усреднения для вычисления индикатора.
ma_shift
[in] Сдвиг индикатора относительно ценового графика.
ma_method
[in] Метод усреднения. Может быть любым из значений перечисления ENUM_MA_METHOD.
applied_price
[in] Используемая цена. Может быть одним из значений перечисления ENUM_APPLIED_PRICE.
shift
[in]
Индекс получаемого значения из индикаторного буфера (сдвиг
относительно текущего бара на указанное количество периодов назад).
Вы вместо значения из перечисления ENUM_MA_METHOD пытаетесь вставить что-то своё. Вас ничего не смущает? Даже то, что компилятору не нравится?
Добрый день. Подскажите, есть скрипт PeriodConverter. Можно получить любой период графика и открыть его через меню Файл->Открыть автономно. Можно ли тоже самое сделать программно через эксперт, т.е. непосредственно открыть такой автономный график?
alxm:
Добрый день. Подскажите, есть скрипт PeriodConverter. Можно получить любой период графика и открыть его через меню Файл->Открыть автономно. Можно ли тоже самое сделать программно через эксперт, т.е. непосредственно открыть такой автономный график?
stringo: Торговля данному эксперту запрещена. На месте соответствующего флага - 0
Так то оно так. Но почему после ChartApplyTemplate торговля становится разрешена? Такое впечатление, что глобальная кнопка перекрывает локальные установки эксперта.
Ого. Уже можно и такое присваивание делать:
int var1, var2, var3, var4, var5;
var1 = var2 = var3 = var4 = var5 = 0;
Перепробовал всё, что пришло в голову. Не помогло ничего.
...
Ого. Уже можно и такое присваивание делать:
int var1, var2, var3, var4, var5;
var1 = var2 = var3 = var4 = var5 = 0;
Учитываешь, что в dll массив приходит не как т.н. "таймсерия"? Т.е. price[0] - это самая первая, самая старая цена.
подскажите где ошибка
improper enumerator cannot be used
код перед стартом:
вот пишет такую ошибку: improper enumerator cannot be used
Посмотрите справку по функции iMa():
iMA
Возвращает значение технического индикатора Moving Average.
double iMA(
string symbol, // имя символа
int timeframe, // таймфрейм
int ma_period, // период
int ma_shift, // сдвиг средней
int ma_method, // метод усреднения
int applied_price, // тип цены
int shift // сдвиг
);
Параметры
symbol
[in] Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe
[in] Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.
ma_period
[in] Период усреднения для вычисления индикатора.
ma_shift
[in] Сдвиг индикатора относительно ценового графика.
ma_method
[in] Метод усреднения. Может быть любым из значений перечисления ENUM_MA_METHOD.
applied_price
[in] Используемая цена. Может быть одним из значений перечисления ENUM_APPLIED_PRICE.
shift
[in] Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Вы вместо значения из перечисления ENUM_MA_METHOD пытаетесь вставить что-то своё. Вас ничего не смущает? Даже то, что компилятору не нравится?
flags=339
Добрый день. Подскажите, есть скрипт PeriodConverter. Можно получить любой период графика и открыть его через меню Файл->Открыть автономно. Можно ли тоже самое сделать программно через эксперт, т.е. непосредственно открыть такой автономный график?
Торговля данному эксперту запрещена. На месте соответствующего флага - 0
Так то оно так. Но почему после ChartApplyTemplate торговля становится разрешена? Такое впечатление, что глобальная кнопка перекрывает локальные установки эксперта.
Нельзя ли в следующий билд добавить 2 функции:
string ExpertName(long chart_id) - имя эксперта, запущенного на указанном чарте
bool ExpertAllowLiveTrading(long chart_id, bool bAllow) - разрешить/запретить торговлю для эксперта на чарте
И в функцию ExpertRemove можно добавить chart_id в качестве параметра.