Отправлено: 02.08.15 23:38. Заголовок: Массив структур параметров позиции
Если имеется структура параметров позиций, массив структур данного типа нужно создавать не статический? Я просто не представляю даже, советники если будут различные использовать данную структуру:
struct PosProp { int gi_Type; // Тип торговой операции int gi_CurTicket; // Тикет выбранного ордера double gd_OpenPrice; // Цена открытия double gd_Lots; // Объём позиции на открытие double gd_CurSL; // Текущий Stop Loss выбранной позиции double gd_CurTP; // Текущий Take Profit выбранной позиции string gs_Comment; // Комментарий };
PosProp SPos[];
Они будут использовать свою копию массива структуры или нет будучи она статическая ? Надеюсь я понятно написал. Ведь можно было и так создать PosProp SPos[];
Отправлено: 09.08.15 10:44. Заголовок: На мой взгляд, Вы ищ..
На мой взгляд, Вы ищите сложности там, где их нет. Дело в том, что способов решения одной и той же проблемы существует множество, особенно в программировании. Причем из всех этих способов достаточно трудно выбрать единственно верный. Поэтому на этапе разработки программист выбирает тот путь, который удобнее именно ему в данной конкретной архитектуре программы.
К примеру, если очень нужно работать со списком ордеров в разных классах, то создавать этот список все равно нужно только в одном классе, а всем остальным передавать его по константной ссылке. Или же можно создать в классе метод, который будет копировать список в массив, переданный по ссылке:
цитата:
struct PosProp { int gi_Type; // Тип торговой операции int gi_CurTicket; // Тикет выбранного ордера double gd_OpenPrice; // Цена открытия double gd_Lots; // Объём позиции на открытие double gd_CurSL; // Текущий Stop Loss выбранной позиции double gd_CurTP; // Текущий Take Profit выбранной позиции string gs_Comment; // Комментарий
void OrdersList::GetOrdersList(PosProp &ordersList[]) { int ordersCnt = ArraySize(m_ordersList); ArrayResize(ordersList, ordersCnt); // Здесь не забыть проверку на успешность перераспределения памяти
for (int i = 0; i < ordersCnt; i++) ordersList[ i ] = m_ordersList[ i ]; }
В своих программах свожу логику так, чтобы список ордеров не приходилось передавать другим классам. То есть только один класс является ответственным за работу с ордерами. Все остальные классы являются вспомогательными. На основе данных вспомогательных классов класс, работающий с ордерами, принимает решения о выполнении той или иной торговой операции.
Все даты в формате GMT
2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет