Как в mql работать с массивами? - страница 2

 
nkl90:


 array = [

    0 => [ //порядковый номер order

       0 => int, //ticket id ордера

       1 => double, //размер лота 

       2 => double, //stoploss 

       3 => double, //take profit

    ]

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

 Задать размерность последнего или единственного измерения можно функцией

int  ArrayResize(
   void&  array[],              // массив, переданный по ссылке
   int    new_size,             // новый размер массива
   int    reserve_size=0        // резервное значение размера (избыточное)
   );

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

 

Глядя на ваш пример, один из возможных вариантов объявления массива должен выглядеть так.

double orders[100][4];

 Запас на 100 ордеров. И нужно учитывать что тип double и могут быть проблемы после неявных преобразований при записи туда других типов

 
nkl90:

Я всю жизнь пишу на php, там с массивами все очень хорошо. Но тут...

Короче, задача такая, написать функцию перебора всех ордеров, которая бы формироала глобальны массив с параметрами рыночных ордеров такого вида 

 array = [

    0 => [ //порядковый номер order

       0 => int, //ticket id ордера

       1 => double, //размер лота 

       2 => double, //stoploss 

       3 => double, //take profit

    ]

Делаю так:

Мне компилятор выдает это:

'[' - wrong dimension ***.mq4 201 22

Первый совет, который приходит в голову - это вот:

https://www.mql5.com/ru/code

Здесь куча примеров.

Тут пишут программы даже школьники, и зарабатывают потом во фрилансе.

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

MQL5 Code Base
MQL5 Code Base
  • www.mql5.com
Библиотека исходных кодов на языке MQL5 для MetaTrader 5
 
Event:

Это Русская речь.
Что Вам не понравилось?

И не Вам  следить за моей речью.

зы Это угроза? 

Это бан. Для начала на недельку.

Автора топика это тоже касается, если продолжит в том же духе. 

 
nkl90:

Читал, поэтому не стал обливать дерьмом это убожество и воздержался от комментариев и спросил более знающих людей, как мне это сделать. Мне нужная функция, которая будет проверять все открытые ордера и делать какую-то глобальную переменную, в которой будет вся инфа об этих ордерах. Не знаю там, может тип данных свой здесь можно определить.

 

Можно поподробнее?

P.S. 

Блин, 3 коммента оставили и хоть бы один по делу, вот она, помощь дружного и сплоченного сообщества. Хоть на stackoverflow вопрос пиши, англоговорящая публика куда более внятная в этом плане. 

Достаточно подробно описано тут.

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

Выглядит примерно так

struct test
{
 double lot;
 int    ticket;
};

// объявить массив структур
test arrOrders[];

// записать в структуру
arrOrders[i].lot = 0.5;
arrOrders[i].ticket = 123654;
 
nkl90:

Я всю жизнь пишу на php, там с массивами все очень хорошо. Но тут...

...

Видать совсем короткая у тебя жизнь была, раз до сих пор даже чуть-чуть думать кодить не научился. Ладно, вот держи и изучай:

//+------------------------------------------------------------------+
//|                                                OrdersCollect.mq5 |
//|                                 Copyright 2016, Vasiliy Sokolov. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Vasiliy Sokolov."
#property link      "http://www.mql5.com"
#property version   "1.00"
#include <Object.mqh>
#include <Arrays\ArrayObj.mqh>
//+------------------------------------------------------------------+
//| Order                                                            |
//+------------------------------------------------------------------+
class COrder : public CObject
{
public:
            COrder(void);
   ulong    Ticket;
   double   Lots;
   double   StopLoss;
   double   TakeProfit;
};
//+------------------------------------------------------------------+
//| Cretae select order                                              |
//+------------------------------------------------------------------+
COrder::COrder(void)
{
   Ticket = OrderTicket();
   Lots = OrderLots();
   StopLoss = OrderStopLoss();
   TakeProfit = OrderTakeProfit();   
}
CArrayObj OrdersList;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)
         OrdersList.Add(new COrder());
   }
}
//+------------------------------------------------------------------+
 
nkl90:

Я всю жизнь пишу на php, там с массивами все очень хорошо. Но тут...

Короче, задача такая, написать функцию перебора всех ордеров, которая бы формироала глобальны массив с параметрами рыночных ордеров такого вида 

 array = [

    0 => [ //порядковый номер order

       0 => int, //ticket id ордера

       1 => double, //размер лота 

       2 => double, //stoploss 

       3 => double, //take profit

    ]

Делаю так:

Мне компилятор выдает это:

'[' - wrong dimension ***.mq4 201 22

У вас в массиве разные типы данных, так нельзя. Тогда уж использовать массив структур. В структуре можно разные типы данных хранить. И обращение к массиву неправильное. Выше Василий Соколов написал внятный пример.
 
Vasiliy Sokolov:

Видать совсем короткая у тебя жизнь была, раз до сих пор даже чуть-чуть думать кодить не научился. Ладно, вот держи и изучай:

Большое спасибо. Не знал что в mql можно работать с объектами. Теперь все пойдет куда более продуктивно!

 

P.S. 

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

 
Спасибо)
 
Приведение типов никто не отменял. Массив типа double может содержать все другие базовые типы кроме строки.
 
Stanislav Korotky:
Приведение типов никто не отменял. Массив типа double может содержать все другие базовые типы кроме строки.
попробуйте в double записать ulong число, ну допустим 18446744073709551500. что получится при распечатке ?
Причина обращения: