[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 753

 
Morzh09:

Подскажите, в чем подвох:

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 сравнивать даты и время (например, мне нужно определить, какая вершина ЗЗ образовалась раньше - для этого нужно сравнить время их образования...)

datetime - по сути int, он содержит кол-во секунд, начиная от 1970 года и заканчивая временем бара. Я проверяю на больше/меньше - работает...
Остальное не смотрел - только пришел...
 

Друзья, вопрос:


Столкнулся с такой проблемой:

индикатор выводит некоторую информацию через Alert.

но, постепенно в поле вывода Alert'a накапливается слишком много всякой "бадяги"...

можно ли подчищать все старые записи в Алерте при новом запуске индикатора?


Заранее большое спасибо.

P.S.

прокомментируйте, плз, мой пост чуть ранее (почему выводятся нулевые значения, вместо 1 и 2)

 

по форумуне нашел...

вопрос - можно ли изменить коментарий ордера? ну типа при операции OrderSend() я заношу в комент каконить значение "OrderNotModify", а проводя с этим ордером дальнейшее действие, к примеру частичное закрытие меняю OrderComment на "OrderIsModify"... или нет?

 
Morzh09:

Подскажите, в чем подвох: 

Массив с 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

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}
 
Abzasc:

Массив с 0 заполняется, а здесь 0-вой индекс пропускается, и заполняем с 1-го, и

не совсем разобрался в вашем комментарии.

1) k - при старте - не равно нулю! k = количеству вершин ЗигЗага, которые мы обнаружили на определенной глубине истории!

2) "значит, всегда срабатывает [1][1]>=[0][1]" - почему всегда срабатывает? если предыдущий элемент массива TimeSave1 > последующего, то не сработает.

повторите, плз, что вы хотели сказать.

 
Morzh09:

не совсем разобрался в вашем комментарии.

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 отнимаете

{

 в правой части

 
Michelangelo:

можно ли изменить коментарий ордера?

В OrderModify только ticket price stoploss takeprofit expiration arrow_color

 

Похоже, что нет.

 

так... похоже это жара... и на мой компилятор она действует тоже :)

смотрите, мне нужно пробежаться по массиву, в котором записаны дата образования max/min ЗигЗага и величина этого max/min.

мне нужно понять, собственно, какая из вершин ЗЗ является минимумом, а какая - максимумом.

для этого я сравниваю последующую вершину ЗЗ с предыдущей.

если последующая больше - значит она - вершина.

если меньше - значит она впадина.

в зависимости от того, вершина или впадина, в элемент другого массива добавляем 1 или 2 соответственно.

Любопытно при этом, ГДЕ МОЖЕТ БЫТЬ ОШИБКА!!!!

Файлы:
 
Пойду сюда с поклоном - всё равно весь свой калькулятор уже сломал... :)
Хочу иметь возможность подсчитывать уровни фибы исходя из известных двух значений:
Уровень ноль фибы соответствует цене 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"

extern int num    = 10;
extern color 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);
}

наверно так, код не оптимизирован, но рисует то что хотелось бы
Причина обращения: