tesla-pip: Никак не могу найти команду которая перерисовывает пользовательский индикатор. Если кто знает то пожалуйста подскажите. Заранее благодарен =)
И такой порядок вещей - нормальный (это принципы работы терминала).
Если хотите, чтобы при изменении параметров индикатора А индикатор Б изменял свои показания, сделайте обмен информацией м\у индикаторами (м.б. файл, глобальные переменные терминала, оперативная память компьютера): индикатор A при инициализации передаёт свои инициализируемые параметры, а индикатор Б периодически проверяет возможные изменения параметров индикатора А. При обнаружении изменений, индикатор Б тоже должен перинициализироваться с новыми параметрами (принудительный запуск init()).
Благодарю Вас за ответ,но я не могу им воспользоваться,т.к. не всё понял и не силён в программировании.Не могли бы Вы внести необходимые изменения в коды моих индикаторов.
MK07: Благодарю Вас за ответ,но я не могу им воспользоваться,т.к. не всё понял и не силён в программировании.Не могли бы Вы внести необходимые изменения в коды моих индикаторов.
Вы мне предлагаете сделать за Вас то, что Вам "поиграться". Извините, не интересно.
А, если учитесь программировать, - это Вам интересная задачка.
Доброго времени суток всем. Возникла проблема с индюком "CurrencyPowerMeter", а именно не могу переместить его в другое положение окна терминала. Если есть возможность помочь был бы очень рад.
Решил-таки спросить, может подскажите. Пишу индикатор, в индикаторе обрабатываю тики на тиковом таймфрейме (который открывается автономно, вот этот). В буферный массив у меня НЕ КАЖДЫЙ тик обрабатывается, а выборочно (предположим, тик через каждые 60 секунд, но это вовсе не обязательно). Вместо
int counted_bars=IndicatorCounted();
я так понимаю, следующая конструкция:
externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
Теперь вопрос. В чистом М1 варианте дальше стандартное
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
Чем заменить limit и counted_bars? Я так понимаю,
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
(т.к. количество тиков в 60 секунд непостоянно, т.е. просто написать int counted_bars=IndicatorCounted()/_количество_тиков_в_60_секунд_ не получится).
Или я во всём ошибаюсь?
p.s. опережая возможный вопрос, отвечу: я знаю что на форексе sec!=60 неприменимо, а sec=60 бессмысленно, но я и торгую не на форексе.
MK07: Благодарю Вас за ответ,но я не могу им воспользоваться,т.к. не всё понял и не силён в программировании.Не могли бы Вы внести необходимые изменения в коды моих индикаторов.
Извините, у вас машина есть? Если есть, вы же не считаете это роскошью, а только необходимостью? Если нет, вы же не собираетесь так оставлять на всю жизнь? Сейчас век такой, прграммирование знать надо так же, как надо иметь машину. Я вообще просто колхозник, но хоть как, но я делаю, для меня программирование от работы во дворе, например от слесарной работы, ничем не отличается, та же самая работа своими руками (в деревне живу). Болгарка, тачка или MQL4 для меня только инструмент. Может, для городских оно по-другому воспринимается, не знаю. Глобальные переменные в мануале вот, файловые функции стандартные вот, быстрее вот эти, но там через WinAPI. Я ещё вчера хотел ответить, но промолчал.
У меня есть массив .Я его инициализировал строками т.е. double mass [3567]={0.85374 , 0.85694 , 0.85974 ,.... };
И программа читала массив и исполняла его.
Сейчас тот же массив я инициализировал в одну колонку
double massi[3567]
{
mass [ 0] = 0.85374; mass [ 1] = 0.85694; mass [ 2] = 0.85974; mass [ 3] = 0.86174; mass [ 4] = 0.86474; mass [ 5] = 0.86494; mass [ 6] = 0.86504;
mass [ 7] = 0.86524;
}
Компилятор не выдает ни одной ошибки , но выдает предупреждение.И программа не исполняет ни массив ни код в целом.
'{' - expression on global scope not allowed C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)
Массив как и раньше(когда он был инициализирован строками и работал нормально) объявлен на глобальном уровне.
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
Никак не могу найти команду которая перерисовывает пользовательский индикатор. Если кто знает то пожалуйста подскажите. Заранее благодарен =)
Я уже нашёл. Всем спасибо =)
Добрый день.
Формулу придумать помогите.
у меня есть шаг доливок ШД=100;
если цена равна 25, то для неё уровень доливки будет УД=100
если цена равна 102, то для неё уровень доливки будет УД=200
если цена равна 215 то уровень доливки будет УД=300
цена опять упала до 135 уровень доливки будет УД=200
И такой порядок вещей - нормальный (это принципы работы терминала).
Если хотите, чтобы при изменении параметров индикатора А индикатор Б изменял свои показания, сделайте обмен информацией м\у индикаторами (м.б. файл, глобальные переменные терминала, оперативная память компьютера): индикатор A при инициализации передаёт свои инициализируемые параметры, а индикатор Б периодически проверяет возможные изменения параметров индикатора А. При обнаружении изменений, индикатор Б тоже должен перинициализироваться с новыми параметрами (принудительный запуск init()).
Первый код-индикатор А.
Второй код- индикатор Б.
прошлый вопрос решил, новый есть вопрос
у меня на каждом баре уровень доливки пересчитывается.
Как мне запомнить уровень на прошлом баре
и для открытия сделки его использовать
Благодарю Вас за ответ,но я не могу им воспользоваться,т.к. не всё понял и не силён в программировании.Не могли бы Вы внести необходимые изменения в коды моих индикаторов.
Вы мне предлагаете сделать за Вас то, что Вам "поиграться". Извините, не интересно.
А, если учитесь программировать, - это Вам интересная задачка.
int counted_bars=IndicatorCounted();я так понимаю, следующая конструкция:
Теперь вопрос. В чистом М1 варианте дальше стандартное
Чем заменить limit и counted_bars? Я так понимаю,
(т.к. количество тиков в 60 секунд непостоянно, т.е. просто написать int counted_bars=IndicatorCounted()/_количество_тиков_в_60_секунд_ не получится).
Или я во всём ошибаюсь?
p.s. опережая возможный вопрос, отвечу: я знаю что на форексе sec!=60 неприменимо, а sec=60 бессмысленно, но я и торгую не на форексе.
Благодарю Вас за ответ,но я не могу им воспользоваться,т.к. не всё понял и не силён в программировании.Не могли бы Вы внести необходимые изменения в коды моих индикаторов.
Всем добрый день!
Я учусь пользоваться массивами.
У меня есть массив .Я его инициализировал строками т.е. double mass [3567]={0.85374 , 0.85694 , 0.85974 ,.... };
И программа читала массив и исполняла его.
Сейчас тот же массив я инициализировал в одну колонку
double massi[3567]
{
mass [ 0] = 0.85374;
mass [ 1] = 0.85694;
mass [ 2] = 0.85974;
mass [ 3] = 0.86174;
mass [ 4] = 0.86474;
mass [ 5] = 0.86494;
mass [ 6] = 0.86504;
mass [ 7] = 0.86524;
}
Компилятор не выдает ни одной ошибки , но выдает предупреждение.И программа не исполняет ни массив ни код в целом.
'{' - expression on global scope not allowed C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)
Массив как и раньше(когда он был инициализирован строками и работал нормально) объявлен на глобальном уровне.
В журнале только 2 записи.
2013.04.12 16:14:44 XXX test started
2013.04.12 16:14:36 XXX EURUSD,H1: loaded successfully
ВОПРОС.ПОЧЕМУ ПРОГРАММА НЕ ЧИТАЕТ МАССИВ ИНИЦИАЛИЗИРОВАННЫЙ В ОДИН СТОЛБЕЦ.
Спасибо.