1) Заполняю двумерный массив временем образования экстремума ЗигЗага и самим значением экстремума.
2) Заполняю второй массив единицами или двойками в зависимости от того, является ли соответствующий данному элементу - вершина ЗигЗага локальным максимумом или минимумом.
3) Вывожу результаты через Alert.
но, в месте, где должны выводиться 1 или 2 всегда выводятся нули.
как в mql сравнивать даты и время (например, мне нужно определить, какая вершина ЗЗ образовалась раньше - для этого нужно сравнить время их образования...)
datetime - по сути int, он содержит кол-во секунд, начиная от 1970 года и заканчивая временем бара. Я проверяю на больше/меньше - работает... Остальное не смотрел - только пришел...
вопрос - можно ли изменить коментарий ордера? ну типа при операции OrderSend() я заношу в комент каконить значение "OrderNotModify", а проводя с этим ордером дальнейшее действие, к примеру частичное закрытие меняю OrderComment на "OrderIsModify"... или нет?
Массив с 0 заполняется, а здесь 0-вой индекс пропускается, и заполняем с 1-го, и
for (int u=1;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем
{
if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // выражение при старте всегда [1][1]<=[0][1]
{
Number_of_extremum[u]=1;// значит под номером u - нашли min
}
elseif (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]
{
Number_of_extremum[u]=2;// значит под номером u - нашли max
}
}
1) k - при старте - не равно нулю! k = количеству вершин ЗигЗага, которые мы обнаружили на определенной глубине истории!
2) "значит, всегда срабатывает [1][1]>=[0][1]" - почему всегда срабатывает? если предыдущий элемент массива TimeSave1 > последующего, то не сработает.
повторите, плз, что вы хотели сказать.
С k понятно. Вот это я не понимаю
for (int u=1;u<=k;u++) // на первом шаге счетчик присваивает u = 1
{
if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете
{
Пойду сюда с поклоном - всё равно весь свой калькулятор уже сломал... :) Хочу иметь возможность подсчитывать уровни фибы исходя из известных двух значений: Уровень ноль фибы соответствует цене 1.2807, уровень 23.6 соответствует 1.2838.
Необходимо найти остальные уровни 38.2, 50.0, 61.5, 100.0 и каким ценам они соответствуют.
Я даже не смог найти не то чтобы чёткую, вообще никакую взаимосвязь между 1.2807 и 1.2838, чтобы понимать принципы поиска всех остальных значений.
IgorM: ктонить встречал индикатор, чтобы на младшем ТФ видеть время открытия бара на старшем ТФ, не сколько время интересно, а начертить метки на графике где начался бар и где закончился
#property indicator_chart_window#property link "IgorM"externint num = 10;
externcolor line = White;
int init()
{return(0);
}
void clear(){
for(int i=ObjectsTotal()-1; i>=0;i--) {
string name = ObjectName(i);
if (StringFind(name,"timeH1_") !=-1) ObjectDelete(name);
}
}
int deinit(){
clear();
return(0);
}
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0) return(-1);
clear();
for (int i=0;i<=num;i++){
string name = "timeH1_"+TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
ObjectCreate(name,OBJ_VLINE,0,iTime(NULL,PERIOD_H1,i),0);
ObjectSet(name,OBJPROP_COLOR,line);
ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
}
return(0);
}
наверно так, код не оптимизирован, но рисует то что хотелось бы
Подскажите, в чем подвох:
1) Заполняю двумерный массив временем образования экстремума ЗигЗага и самим значением экстремума.
2) Заполняю второй массив единицами или двойками в зависимости от того, является ли соответствующий данному элементу - вершина ЗигЗага локальным максимумом или минимумом.
3) Вывожу результаты через Alert.
но, в месте, где должны выводиться 1 или 2 всегда выводятся нули.
в чем, собственно, подвох?!?
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
string TimeSave1[100][2], TimeSave2[100][2];
double A[], B[];
double Number_of_extremum[];
extern string Currency = "EURUSD";
+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----
int k;
k=0;
double date;
int status;
for(int shift = 0; shift <= Bars-1; shift++)
{
date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);
//----------------------------------------------------
if(date > 0)
{
TimeSave1[k][0]=TimeToStr(Time[shift]);
TimeSave1[k][1]=date;
k++;
}
}
//====================================================
for (int u=1;u<=k;u++)
{
if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))
{
Number_of_extremum[u]=1;// значит под номером u - нашли min
}
else
if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))
{
Number_of_extremum[u]=2;// значит под номером u - нашли max
}
}
//====================================================
for (int j=1;j<10;j++)
{
Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);
}
//----
return(0);
}
//+------------------------------------------------------------------+
и еще уточнение:
как в mql сравнивать даты и время (например, мне нужно определить, какая вершина ЗЗ образовалась раньше - для этого нужно сравнить время их образования...)
Остальное не смотрел - только пришел...
Друзья, вопрос:
Столкнулся с такой проблемой:
индикатор выводит некоторую информацию через Alert.
но, постепенно в поле вывода Alert'a накапливается слишком много всякой "бадяги"...
можно ли подчищать все старые записи в Алерте при новом запуске индикатора?
Заранее большое спасибо.
P.S.
прокомментируйте, плз, мой пост чуть ранее (почему выводятся нулевые значения, вместо 1 и 2)
по форумуне нашел...
вопрос - можно ли изменить коментарий ордера? ну типа при операции OrderSend() я заношу в комент каконить значение "OrderNotModify", а проводя с этим ордером дальнейшее действие, к примеру частичное закрытие меняю OrderComment на "OrderIsModify"... или нет?
Подскажите, в чем подвох:
Массив с 0 заполняется, а здесь 0-вой индекс пропускается, и заполняем с 1-го, и
Массив с 0 заполняется, а здесь 0-вой индекс пропускается, и заполняем с 1-го, и
не совсем разобрался в вашем комментарии.
1) k - при старте - не равно нулю! k = количеству вершин ЗигЗага, которые мы обнаружили на определенной глубине истории!
2) "значит, всегда срабатывает [1][1]>=[0][1]" - почему всегда срабатывает? если предыдущий элемент массива TimeSave1 > последующего, то не сработает.
повторите, плз, что вы хотели сказать.
не совсем разобрался в вашем комментарии.
1) k - при старте - не равно нулю! k = количеству вершин ЗигЗага, которые мы обнаружили на определенной глубине истории!
2) "значит, всегда срабатывает [1][1]>=[0][1]" - почему всегда срабатывает? если предыдущий элемент массива TimeSave1 > последующего, то не сработает.
повторите, плз, что вы хотели сказать.
С k понятно. Вот это я не понимаю
в правой части
можно ли изменить коментарий ордера?
Похоже, что нет.
так... похоже это жара... и на мой компилятор она действует тоже :)
смотрите, мне нужно пробежаться по массиву, в котором записаны дата образования max/min ЗигЗага и величина этого max/min.
мне нужно понять, собственно, какая из вершин ЗЗ является минимумом, а какая - максимумом.
для этого я сравниваю последующую вершину ЗЗ с предыдущей.
если последующая больше - значит она - вершина.
если меньше - значит она впадина.
в зависимости от того, вершина или впадина, в элемент другого массива добавляем 1 или 2 соответственно.
Любопытно при этом, ГДЕ МОЖЕТ БЫТЬ ОШИБКА!!!!
Хочу иметь возможность подсчитывать уровни фибы исходя из известных двух значений:
Уровень ноль фибы соответствует цене 1.2807, уровень 23.6 соответствует 1.2838.
Необходимо найти остальные уровни 38.2, 50.0, 61.5, 100.0 и каким ценам они соответствуют.
Я даже не смог найти не то чтобы чёткую, вообще никакую взаимосвязь между 1.2807 и 1.2838, чтобы понимать принципы
поиска всех остальных значений.
Подскажите кто-нить, плиз... :)
ктонить встречал индикатор, чтобы на младшем ТФ видеть время открытия бара на старшем ТФ, не сколько время интересно, а начертить метки на графике где начался бар и где закончился
наверно так, код не оптимизирован, но рисует то что хотелось бы