[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 341

 
silhouette:

Какой должен быть размер массивов - я не знаю. Его индекс должен накапливаться на всем промежутке посчитанных баров, т.е. начиная с бара limit.

Попробую описать логику задачи словами.

  • Мы имеем три индикаторных буфера, которые рисуют цветную LSMA. Если ее значение на текущем баре выше, чем предыдущее - оставляем значение в желтом и зеленом буферах, вычищаем в красном. Если текущее значение ниже предыдущего - наоборот. Во всех иных случаях - вычищаем значение в красном и зеленом буфере, оставляем только в желтом.
  • Значение буфера зеленых серий - 1, значение индекса - 0. Если на текущем баре зеленый буфер !=EMPTY_VALUE и на предыдущем тоже !=EMPTY_VALUE, значит значение буфера зеленых серий увеличивается на единицу (происходит накопление значений). Если значение зеленого буфера == EMPTY_VALUE, при том, что значение красного буфера тоже == EMPTY_VALUE (на графике только желтый цвет), значит серия закончилась - присваиваем массиву зеленых серий с индексом 0 значение длины серий (сохраняем в буфер). Увеличиваем значение индекса массива на единицу (следующие теперь будет 1, 2, 3 и т.д.), сбрасываем значение серии до единицы, ждем начало следующей зеленой серии.
  • Аналогичные манипуляции проводим с массивом красных серий.

До тех пор, пока неясна цель заполнения сих массивов, никак не рождается алгоритма. Неясно - для каких дальнейших целей будут использоваться эти массивы. Отсюда и нет алгоритма, который подойдёт для их сохранения. Ведь они же будут постоянно переписываться новыми данными. Вы говорите о длине серии. Зелёная серия закончится как только начнётся жёлтая или красная. Аналогично - красная закончится как только начнётся жёлтая или зелёная. Т.е. актуальными будут только лишь одна серия, которая на данный момент есть и предшествующая ей противоположная. Или нужно несколько таких серий, чередующихся меж собою.

Короче - по рабоче-крестьянски: нафига нужны эти массивы этих серий? Как это будет в индюшке представлено графически, либо ещё зачем?

 

ЗДРАВСТВУЙТЕ!!!

Кто помог бы написать советник с функциями

1 время открытия H и M

2 множитель убыточного объема(лота)

3 объем лота

4 стоп лосс

5 тэйк профит

только на Buy позицию

Вроде бы просто а не получается

 
artmedia70:

До тех пор, пока неясна цель заполнения сих массивов, никак не рождается алгоритма. Неясно - для каких дальнейших целей будут использоваться эти массивы. Отсюда и нет алгоритма, который подойдёт для их сохранения. Ведь они же будут постоянно переписываться новыми данными. Вы говорите о длине серии. Зелёная серия закончится как только начнётся жёлтая или красная. Аналогично - красная закончится как только начнётся жёлтая или зелёная. Т.е. актуальными будут только лишь одна серия, которая на данный момент есть и предшествующая ей противоположная. Или нужно несколько таких серий, чередующихся меж собою.

Короче - по рабоче-крестьянски: нафига нужны эти массивы этих серий? Как это будет в индюшке представлено графически, либо ещё зачем?

В коде видно, что для каждого типа серий (зеленые или красные) есть свой массив.

Цель: сбор статистической информации для последующего анализа, как средствами MQL, так и в Экселе.

Проще говоря, массив должен выглядеть примерно так:

RedSeries[0]=10; RedSeries[1]=11; RedSeries[2]=4 ...

GreenSeries[0]=6; GreenSeries[1]=8; GreenSeries[2]=10 ...

Если важно, то динамика изменения цвета такова: зеленый цвет не может смениться на красный, как и красный не может смениться на зеленый. Т.е. между ними всегда существует желтый.

 

Объясните пожалуйста, если ордер найден для закрытия и его нужно закрыть, есть ли необходимость перечислять параметры после тикета?

Пример: OrderClose(OrderTicket(),OrderLots(),Bid,30,Blue);

заменить на OrderClose(OrderTicket(),NULL,NULL,NULL,NULL);

или на OrderClose(OrderTicket(),EMPTY,EMPTY,EMPTY,EMPTY);

Можно ли ещё короче записывать для закрытия, учитывая только тикет?

 
rosomah:

Объясните пожалуйста, если ордер найден для закрытия и его нужно закрыть, есть ли необходимость перечислять параметры после тикета?

Пример: OrderClose(OrderTicket(),OrderLots(),Bid,30,Blue);

заменить на OrderClose(OrderTicket(),NULL,NULL,NULL,NULL);

или на OrderClose(OrderTicket(),EMPTY,EMPTY,EMPTY,EMPTY);

Можно ли ещё короче записывать для закрытия, учитывая только тикет?


Нет. Существует понятие частичного закрытия ордера. Поэтому параметры должны быть указаны явно. Попробуйте на демо открыть ордер с лотом = 1,5, а затем закрыть у этого ордера лот = 1. Вы увидите, что если ордер поехал в профит, то можно закрыть его не весь, а только часть лотов, позволяя оставшимся лотам продолжать ехать в профит.
 
silhouette:

В коде видно, что для каждого типа серий (зеленые или красные) есть свой массив.

Цель: сбор статистической информации для последующего анализа, как средствами MQL, так и в Экселе.

Проще говоря, массив должен выглядеть примерно так:

RedSeries[0]=10; RedSeries[1]=11; RedSeries[2]=4 ...

GreenSeries[0]=6; GreenSeries[1]=8; GreenSeries[2]=10 ...

Если важно, то динамика изменения цвета такова: зеленый цвет не может смениться на красный, как и красный не может смениться на зеленый. Т.е. между ними всегда существует желтый.

Ну так задайте два двумерных массива. Один для Зелёных данных, другой - для красных. В одно измерение записывайте время, в другое числовое значение. Как только появлются зелёные данные, увеличивайте зелёный массив на 1 и вписывайте время и значение нулевого бара. Так же и для красного массива. Далее, после накопления данных в массивах, можете их обрабатывать как нужно. Либо сразу пишите все данные в файл из советника.
 

Всем привет.

Как распознать ордера, открытые советником, от таких же с пустым маджиком, открытых вручную?

 
swird:

Всем привет.

Как распознать ордера, открытые советником, от таких же с пустым маджиком, открытых вручную?

В цикле перебора ордеров надо делать проверку оператором OrderMagicNumber типа такого:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderMagicNumber()==MagNum) // тут
         {  //--- некоторое действие.

}  }  }  }
 
artmedia70:
Ну так задайте два двумерных массива. Один для Зелёных данных, другой - для красных. В одно измерение записывайте время, в другое числовое значение. Как только появлются зелёные данные, увеличивайте зелёный массив на 1 и вписывайте время и значение нулевого бара. Так же и для красного массива. Далее, после накопления данных в массивах, можете их обрабатывать как нужно. Либо сразу пишите все данные в файл из советника.

Спасибо.

Но я не могу понять смысл создания измерения по времени. Ведь в серии несколько баров и время у них разное. Таким образом, не получится записать серию.

И еще: не могу понять где находится логическая ошибка в моем коде. В чем заключается причина того, что он не работает? Без этого любые попытки что-то переделать бесполезны.

 
silhouette:

Спасибо.

Но я не могу понять смысл создания измерения по времени. Ведь в серии несколько баров и время у них разное. Таким образом, не получится записать серию.

И еще: не могу понять где находится логическая ошибка в моем коде. В чем заключается причина того, что он не работает? Без этого любые попытки что-то переделать бесполезны.

Зачем время в серии? Ну, например, (я не знаю какую статистику вы хотите собрать) при обработке статистических данных полезно было бы знать не только значение, но и время этого значения. При построении графиков в экселе можно будет наглядно видеть местоположение серии и данных в этой серии, их взаимное расположение относительно друг друга (красная и зелёная) и т.д. Если вам не нужно - не используйте.

Я не смотрел ваш код и не могу сказать где логическая ошибка. Помню - вы его делали на основе индикатора Виктора (Vinin), почему бы у Виктора и не спросить о том?