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

 
7777877:

Другими словами, если я правильно понял, то: какой бы массив (в т.ч.и массив-таймсерию) я не скопировал с помощью функции ArrayCopy в ПОЛЬЗОВАТЕЛЬСКИЙ  массив - для того, чтобы этот пользовательский массив стал массивом-таймсерией, я должен "обработать" его функцией ArraySetAsSeries со значением параметра set, равным true?

именно
 

  Уважаемые програмисты. просьба помочь в написании кода.по такому принцыпу -Сигнал BUY  -открыть позицию  BUY 1 .SL.TP.перевод в безубыток 

 Сигнал SELL -открыть позицию SELL 1.  SL.TP.перевод в безубыток . Сигнал BUY- если есть открытые позиции  BUY 1 и  SELL 1 то  открываем  BUY 2. Сигнал SELL-еслиесли есть открытые   позиции  SELL 1 и   BUY 1 то  открываем  SELL 2.   Сигнал BUY- если есть открытые позиции SELL 1.  BUY 1. SELL 2. то закрываем   SELL 2. открываем   BUY 2.    Сигнал SELL - еслиесли есть открытые   позиции  BUY 1. SELL 1. BUY 2. то закрываем   BUY  2. открываем   SELL 2. Врынке не должно работать больше 3 ордеров .Если кто то сможет помочь. то очень большое спасибо.  

 
Sepulca:

Да не партесь Вы так с динамическими массивами, задайте заранее, с запасом, или памяти вам не хватает?

 Памяти у меня приемлимо, но тут же суть не в этом :) 

 Какой смысл задавать массив из потенциально огромной количество элементов, если там, как вариант, будет их в разы меньше?

  Ведь создавая массив, он уже будет занимать часть оперативной памяти. 

 
ilunga:
именно

Чуть-чуть видоизменил скрипт:

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

В результате получил:


Естественно тут же возник вопрос: в данном случае функцией ArrayCopyRates(array1) я скопировал данные баров текущего графика в двумерный массив array1. После чего в следующей строке функцией ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) я скопировал данные массива array1 в массив array2. После чего функцией ArrayGetAsSeries проверил, является ли массив array2 массивом-таймсерией. И оказалось (как видно из скриншота), что массив таки является массивом-таймсерией, хотя предварительно я его не "обрабатывал" функцией ArraySetAsSeries.

Вопрос: почему в первом случае (предыдущий вопрос) требуется обработка функцией ArraySetAsSeries (чтобы искомый массив был организован как массив-таймсерия), а в этом случае такой обработки не требуется.

P.S. Извините за настойчивость, просто хочется полностью разобраться, чтобы не осталось "пробелов в истории". Благодарю за все предыдущие ответы.

 

Не могу понять , или туплю ....

 

В теории должно быть 0,3 но почему то 0,00 .... 

  Comment(3/10);

 Тоже дает 0 ...  Так как же получить дробные числа ?????

int start()
  {
double t;
t=3/10;
   Comment(t);

   return(0);
  }

 то же ноль ....

Уже не знаю с каким бубном прыгать ....... 

 
VOLDEMAR:

Не могу понять , или туплю ....

 

В теории должно быть 0,3 но почему то 0,00 .... 

 Тоже дает 0 ...  Так как же получить дробные числа ?????

 то же ноль ....

Уже не знаю с каким бубном прыгать ....... 

Читать документацию 3 раза в день по 4-5 часов. И только потом прыгать с бубном.

3.0/10.0 

 

Не догадываетесь почему ???

Может быть стоит делать адекватные учебники ???

Может быть делать адекватное обучение ???

Может быть вообще где то  эти вещи писать ???

 Может быть тогда вопросы исчезнут ???

И Вам не надо будет отвечать на очередную 100500 ую тупость !!!

Если есть такие вопросы это не вина человека который учится , это ваша вина !!! Вы это нигде не описали !!!

В справке это не написано , не написано как перевести из int в double

зато там написано что если к int присвоить значение типа double то дробная часть удалиться,

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

Вообщем как то так ....  

 
Roger:

Замени

на

 

 


Спасибо большое, буду пробовать!
 
VOLDEMAR:

Не догадываетесь почему ???
Может быть стоит делать адекватные учебники ???
Может быть делать адекватное обучение ???


Эти вопросы не ко мне. Я пользователь. как и вы.

Может быть вообще где то  эти вещи писать ???

Ну так я ж показал, где написано.

Может быть тогда вопросы исчезнут ???

Нет. они не исчезнут. Уверяю вас.

И Вам не надо будет отвечать на очередную 100500 ую тупость !!!
Если есть такие вопросы это не вина человека который учится , это ваша вина !!! Вы это нигде не описали !!!

Эти вопросы не ко мне. Я пользователь. как и вы.

В справке это не написано , не написано как перевести из int в double
зато там написано что если к int присвоить значение типа double то дробная часть удалиться,

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


ну да. присвоение работает в обе стороны.

вот только вы не включили свою логику дальше.

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

Причина обращения: