22 апреля 2016
22 апреля 2016
Неттинговая система
Эта
система учета подразумевает, что в один момент времени на счете может
быть только одна открытая позиция по одному и тому же символу:
При этом не имеет
значения, в результате какого действия совершается сделка в
противоположном направлении — в результате исполнения рыночного ордера
или срабатывания отложенного.
Ниже приведен пример совершения двух сделок на покупку EURUSD объемом 0.5 лота каждая:
Результатом исполнения этих сделок стала одна общая позиция объемом 1 лот.
Хеджинговая система
Эта
система учета позволяет иметь на счету множество торговых позиций по
одному и тому же инструменту, в том числе — разнонаправленных.
Если
по торговому инструменту есть открытая позиция и трейдер совершает
новую сделку (или срабатывает отложенный ордер), происходит открытие
новой позиции. Существующая позиция не изменяется.
Ниже приведен пример совершения двух сделок на покупку EURUSD объемом 0.5 лота каждая:
Результатом исполнения этих сделок стало открытие двух отдельных позиций.
Новый тип торговой операции Close By
Для
счетов с хеджинговым учетом позиций добавлен новый вид торговых
операций — закрытие позиции встречной. Эта операция позволяет
одновременно закрыть две разнонаправленные позиции по одному и тому же
инструменту. Если встречные позиции имеют разное количество лотов, то
открытым останется только один ордер из двух. Его объем будет равен
разности лотов двух закрытых позиций, а направление позиции и цена
открытия — большей (по объему) из закрываемых позиций.
По сравнению с одиночным закрытием двух позиций, закрытие встречной позволяет сэкономить трейдеру один спред:
При закрытии позиции встречной выставляется ордер типа "close by". В комментарии к нему указываются тикеты закрываемых позиций. Закрытие пары встречных позиций происходит двумя сделками типа "out by". Размер итоговой прибыли/убытка, полученного в результате закрытия обеих позиций, указывается только в одной сделке.
При импорте тикеты ордеров и позиций (в том числе ордеров истории) не
сохраняются, поскольку одной записи в торговой истории MetaTrader 4
может соответствовать до 4 записей в истории MetaTrader 5. Всем торговым
записям проставляются новые тикеты.
Номера счетов могут быть сохранены или заменены новыми в зависимости от того, как брокер произведет импорт.
При тестировании на реальных тиках через MQL5 Cloud Network может передаваться большой объем интернет-трафика. Это может существенно повлиять на итоговую стоимость использования вычислительной сети.
class CAnimal { public: CAnimal(); // конструктор virtual void Sound() = 0; // чисто виртуальная функция private: double m_legs_count; // количество ног животного };Здесь функция Sound() является чисто виртуальной, потому что она объявлена со спецификатором чисто виртуальной функции PURE (=0).
class CAnimal { public: virtual void Sound()=NULL; // PURE method, должен быть переопределен в потомке, сам класс CAnimal стал абстрактным и не может быть создан }; //--- потомок от абстрактного класса class CCat : public CAnimal { public: virtual void Sound() { Print("Myau"); } // PURE переопределен, класс CCat не абстрактный и может быть создан }; //--- примеры неправильного использования new CAnimal; // ошибка 'CAnimal' - компилятор выдаст ошибку "cannot instantiate abstract class" CAnimal some_animal; // ошибка 'CAnimal' - компилятор выдаст ошибку "cannot instantiate abstract class" //--- примеры правильного использования new CCat; // ошибки нет - класс CCat не абстрактный CCat cat; // ошибки нет - класс CCat не абстрактныйОграничения на использование абстрактных классов
//+------------------------------------------------------------------+ //| Абстрактный базовый класс | //+------------------------------------------------------------------+ class CAnimal { public: //--- чисто виртуальная функция virtual void Sound(void)=NULL; //--- функция void CallSound(void) { Sound(); } //--- конструктор CAnimal() { //--- явный вызов виртуального метода Sound(); //--- неявный вызов (через третью функцию) CallSound(); //--- в конструкторе и/или деструкторе всегда вызываются свои функции, //--- несмотря на виртуальность и переопределение вызываемой функции в потомке //--- если вызываемая функция чисто виртуальная, то //--- вызов приведет к критической ошибке выполнения: "pure virtual function call" } };Однако конструкторы и деструкторы абстрактных классов могут вызывать другие функции-члены.
typedef int (*TFunc)(int,int);Теперь TFunc является типом и можно объявить переменную-указатель на функцию:
TFunc func_ptr;В переменную func_ptr можно сохранить адрес функции, чтобы в дальнейшем ее вызывать:
int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; // ошибка: neg не имеет тип int (int,int) Print(func_ptr(10)); // ошибка: должно быть два параметраУказатели на функции можно хранить и передавать в качестве параметра. Нельзя получить указатель на нестатический метод класса.
ulong PositionGetTicket( int index // номер в списке позиций );
bool PositionSelectByTicket(
ulong ticket // тикет позиции
);