Вопрос по классу для открытия ордера

 

Долгое время в МТ4 пользуюсь кимовской функцией SetOrder(). Захотелось нечто подобно и в МТ5 использовать. С++ мне не знаком, поэтому хотелось бы мнение специалистов услышать. Во вложении написал класс, там два конструктора, один со стопами, другой без. Вызов в программе делаю таким образом:

SetOrder so(_Symbol, ORDER_TYPE_SELL, lot, magN);   // Установим параметры на продажу
so.set();                                           // откроем ордер

Собственно вопрос такой, можно ли все в один оператор запихнуть: создание экземпляра класса с задаными параметрами и вызов функции с установкой ордера?

В конструкторе, я так понимаю, нельзя вызвать функцию? 

Файлы:
SetOrder.mqh  6 kb
 

посмотрите здесь.

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / Sell
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / Sell
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / Sell - Документация по MQL5
 
DC2008:

посмотрите здесь.

 Благодарю, буду разбираться. А как магик передать в такой Sell-ордер?
 
pu6ka:
 Благодарю, буду разбираться. А как магик передать в такой Sell-ордер?

Магик в MQL5 - не актуален (не нужен).

 
DC2008:

Магик в MQL5 - не актуален (не нужен).

А-а, Семен Семеныч :)). Сделки ж схлопываются в одну позицию по инструменту.
 
pu6ka:

Долгое время в МТ4 пользуюсь кимовской функцией SetOrder(). Захотелось нечто подобно и в МТ5 использовать. С++ мне не знаком, поэтому хотелось бы мнение специалистов услышать. Во вложении написал класс, там два конструктора, один со стопами, другой без. Вызов в программе делаю таким образом:

Собственно вопрос такой, можно ли все в один оператор запихнуть: создание экземпляра класса с задаными параметрами и вызов функции с установкой ордера?

В конструкторе, я так понимаю, нельзя вызвать функцию? 

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

 

DC2008:

Магик в MQL5 - не актуален (не нужен).

Это почему же? Если уметь пользоваться, вполне себе нужен. Без него "свои" сделки не найдешь.

 
komposter:

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

 Хотелось с классами побольше разобраться. Также функция приличное место в основном коде занимает, думал таким образом визуально уменьшить.

 А как функцию запихнуть, подскажите, компилятор ругается когда такой код:

class SetOrder
{
   public: 
           SetOrder(){}                            // конструктор по умолчанию
            
           SetOrder(string sy, ENUM_ORDER_TYPE tip, double ll, int mn)
           {     
             Print("Конструктор без стопов.");
             void set();                             // установка ордера             
           }
};
 

void SetOrder::set()
 {  
  Print("set(): Здесь мы что-то делаем с ордером");
 }

 

 Если вынести  void set();  за пределы конструктора, тогда нормально компилируется. 

 
pu6ka:

 Хотелось с классами побольше разобраться.

Кхм... Начните с чего-то попроще, у вас сейчас каша в голове.

Попробуйте посмотреть несколько примеров на С++ или на MQL5 из стандартной библиотеки

 
Да, pu6ka, рекомендую поглядеть на организацию классов Стандартной Библиотеки. Кроме того - для базовых знаний по классам - вполне сгодится любой букварь из серии "С++ для чайников". Код С++ очень близок к MQL5 (я, например, вобще стараюсь писать так, чтобы отличий не было).
 
А ещё лучше возмите всё готовое из статьи Торговые операции на MQL5 - это просто. Например раздел "CTrade - удобный класс для торговых операций".
Причина обращения: