статический массив ?

 

Привет всем,

Во-первых, спасибо всем за ответы, это было здорово изучать MQL4

Я перехожу к пониманию того, как строить массивы.

Тема:

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

Итак, я думаю, статический массив[1,2,3,4,5,6,7].

array[1] = (Low[3] < Low[4] && Low[3] < Low[3]) // или что-то вроде этого?

Low_1 = array[1]

Low_2 = array[2] и так далее.

Является ли это стандартным способом сделать это или я заблуждаюсь?

Пожалуйста, подскажите, спасибо

 

Прочитайте сначала ... затем прочитайте еще раз, пока не поймете.

https://book.mql4.com/variables/arrays

Например, первый элемент массива - это элемент 0 , немного похоже на Bars, fumy that, eh ? ;-)

 
  1. Вы ошиблись.
  2. array[1,2,3,4,5,6,7] giberish
  3. array[1] = (Low[3] < Low[4] && Low[3]... является ли массив bool
  4. Low_1 = array[1] подразумевает, что массив не является bool
  5. "хранить сигналы в статическом массиве" Почему он должен быть статическим, если вы можете вычислять их, когда это необходимо.
 

Упс, я имел в виду int array[1][7];

Спасибо за ответ

Ну, после некоторого дальнейшего чтения, вашего направления и вопросов, я думаю, что массив может быть не тем, что я пытаюсь сделать.

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

Я подумаю над этим еще раз.

Спасибо

 
Agent86:


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

Почему? Можете ли вы объяснить, чего вы пытаетесь достичь?
 

Думаю, я сделаю что-то более похожее на это:

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


Спасибо.

static double Low_A;
   
   if(Low[2] < Low[2]
      && Low [2] < Low[1])
      {
      Low_A = Low[3];
      Print (Low_A + " Low_A has formed");
      }
 
RaptorUK:
Почему? Можете ли вы объяснить, чего вы пытаетесь достичь?

Конечно, это не максимумы и минимумы конкретной свечи, но, возможно, серия свечей.

Скажем, в качестве примера можно назвать Low_A в зависимости от того, сколько свечей я хочу использовать, но можно сказать, что минимумом считаются 4 свечи выше слева и 4 свечи выше справа, и эта низкая свеча будет считаться Low_A

Или я могу использовать больше свечей или меньше, чтобы составить минимум или максимум, а затем создать другие подобные свечи для максимумов и минимумов.
Затем создать несколько функций для сравнения предыдущих минимумов с последующими минимумами и предыдущих максимумов с последующими максимумами.

Затем, возможно, построить линию тренда из серии либо 2 максимума/минимума, либо 3 максимума/минимума, либо, возможно, даже больше

Или я могу просто использовать, как в этом примере, одну свечу, которая имеет 1 более низкую свечу слева и 1 более низкую свечу справа, и назвать это минимумом.

Первоначально я рассматривал возможность поместить результат в массив, но я не думаю, что это сделает то, что я хотел, или, по крайней мере, я не понимаю массивы достаточно хорошо, чтобы определить это на данный момент. Дальнейшее чтение, несомненно, поможет мне разобраться. ХА!

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

Если я печатаю Low[2], это дает мне 8 цифр вместо 5 цифр, и некоторые из них все 0.0000000.

Возможно, потому что тип данных, который я использовал, был static double Low_A;

Я не уверен, что мне нужно заставить его печатать правильно, однако для хранения правильного статического значения я не уверен, какие данные использовать.

 
Хорошо, я отказываюсь от статического массива и идеи статического двойника.

Мне нужен новый дизайн. Очевидно, что то, что я пытался сделать, не будет работать должным образом, и теперь я понимаю почему.

Итак, снова возвращаемся к чертежной доске. OUCH
 

Вернемся к этому,

После дополнительного изучения я задался вопросом, существует ли вообще такая вещь, как статический массив, или массив является статическим по умолчанию, и после прочтения ссылок, которые вы предоставили, я скажу, что все они являются статическими по умолчанию. Отлично.


В любом случае, я думаю о iFractals вместо того, чтобы пытаться отмечать максимумы и минимумы, как я их определяю. Я могу использовать фракталы до тех пор, пока не получу больше знаний и не прочитаю больше.

Так что насчет iFractals, как я могу отмечать их и ссылаться на них?
Могу ли я просто создать дополнительные iFractals, изменить сдвиг и ссылаться на него таким образом, или сдвиг с iFractals все еще будет говорить о Барах, а не о предыдущем Фрактале?

//+------------------------------------------------------------------+
//|                Support and Resistance                            |
//|                Copyright © 2004/5     Barry Stander              |
//|                http://www.4Africa.net/4meta/                     |
//+------------------------------------------------------------------+

#property copyright "Support and Resistance             Barry_Stander_4@yahoo.com"
#property link      "http://www.4Africa.net/4meta/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

//---- buffers
double v1[];
double v2[];
double val1;
double val2;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(2);

   SetIndexArrow(0, 119);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");

   SetIndexArrow(1, 119);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i=Bars;
//----
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0) v1[i]=High[i];
      else          v1[i]=v1[i+1];

      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0) v2[i]=Low[i];
      else          v2[i]=v2[i+1];
      
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+


Кто-то написал этот код, и я понимаю, как он работает, но я не уверен, что понимаю, как я буду выбирать из массива конкретный High и/или Low aka Support/Resistance.

То есть я могу сделать функцию, которая будет открывать сделку if(val1 > imacd) или что-то в этом роде, но как насчет предыдущих фракталов, или, скажем, 2 назад,

Будет ли это просто вопросом сдвига?

Или мне нужно поместить это в другой массив?

Пожалуйста, посоветуйте.

Спасибо

 
Есть 2 буфера (массива), в которых хранятся значения цен фракталов ... val1 и val2. Если вы хотите найти предыдущие значения фракталов, вы просто делаете цикл, увеличивая значение сдвига, и проверяете значения буфера, пока не найдете те, которые не EMPTY_VALUE ( https://docs.mql4.com/customind/SetIndexEmptyValue ).