| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- //+------------------------------------------------------------------+
- //| MetaTrader 5 API |
- //| Copyright 2000-2019, MetaQuotes Software Corp. |
- //| http://www.metaquotes.net |
- //+------------------------------------------------------------------+
- #pragma once
- //+------------------------------------------------------------------+
- //| Trade position interface |
- //+------------------------------------------------------------------+
- class IMTPosition
- {
- public:
- //--- position types
- enum EnPositionAction
- {
- POSITION_BUY =0, // buy
- POSITION_SELL =1, // sell
- //--- enumeration borders
- POSITION_FIRST =POSITION_BUY,
- POSITION_LAST =POSITION_SELL
- };
- //--- activation modes
- enum EnActivation
- {
- ACTIVATION_NONE =0, // none
- ACTIVATION_SL =1, // SL activated
- ACTIVATION_TP =2, // TP activated
- ACTIVATION_STOPOUT =3, // Stop-Out activated
- //--- enumeration borders
- ACTIVATION_FIRST =ACTIVATION_NONE,
- ACTIVATION_LAST =ACTIVATION_STOPOUT,
- };
- //--- position activation flags
- enum EnTradeActivationFlags
- {
- ACTIV_FLAGS_NO_LIMIT =0x00000001,
- ACTIV_FLAGS_NO_STOP =0x00000002,
- ACTIV_FLAGS_NO_SLIMIT =0x00000004,
- ACTIV_FLAGS_NO_SL =0x00000008,
- ACTIV_FLAGS_NO_TP =0x00000010,
- ACTIV_FLAGS_NO_SO =0x00000020,
- ACTIV_FLAGS_NO_EXPIRATION=0x00000040,
- //---
- ACTIV_FLAGS_NONE =0x00000000,
- ACTIV_FLAGS_ALL =ACTIV_FLAGS_NO_LIMIT|ACTIV_FLAGS_NO_STOP|ACTIV_FLAGS_NO_SLIMIT|ACTIV_FLAGS_NO_SL|
- ACTIV_FLAGS_NO_TP|ACTIV_FLAGS_NO_SO|ACTIV_FLAGS_NO_EXPIRATION
- };
- //--- position creation reasons
- enum EnPositionReason
- {
- POSITION_REASON_CLIENT =0, // position placed manually
- POSITION_REASON_EXPERT =1, // position placed by expert
- POSITION_REASON_DEALER =2, // position placed by dealer
- POSITION_REASON_SL =3, // position placed due SL
- POSITION_REASON_TP =4, // position placed due TP
- POSITION_REASON_SO =5, // position placed due Stop-Out
- POSITION_REASON_ROLLOVER =6, // position placed due rollover
- POSITION_REASON_EXTERNAL_CLIENT=7, // position placed from the external system by client
- POSITION_REASON_VMARGIN =8, // position placed due variation margin
- POSITION_REASON_GATEWAY =9, // position placed by gateway
- POSITION_REASON_SIGNAL =10, // position placed by signal service
- POSITION_REASON_SETTLEMENT=11, // position placed due settlement
- POSITION_REASON_TRANSFER =12, // position placed due position transfer
- POSITION_REASON_SYNC =13, // position placed due position synchronization
- POSITION_REASON_EXTERNAL_SERVICE=14, // position placed from the external system due service issues
- POSITION_REASON_MIGRATION=15, // position placed due migration
- POSITION_REASON_MOBILE =16, // position placed by mobile terminal
- POSITION_REASON_WEB =17, // position placed by web terminal
- POSITION_REASON_SPLIT =18, // position placed due split
- //--- enumeration borders
- POSITION_REASON_FIRST =POSITION_REASON_CLIENT,
- POSITION_REASON_LAST =POSITION_REASON_SPLIT
- };
- //--- modification flags
- enum EnTradeModifyFlags
- {
- MODIFY_FLAGS_ADMIN =0x00000001,
- MODIFY_FLAGS_MANAGER =0x00000002,
- MODIFY_FLAGS_POSITION =0x00000004,
- MODIFY_FLAGS_RESTORE =0x00000008,
- MODIFY_FLAGS_API_ADMIN =0x00000010,
- MODIFY_FLAGS_API_MANAGER =0x00000020,
- MODIFY_FLAGS_API_SERVER =0x00000040,
- MODIFY_FLAGS_API_GATEWAY =0x00000080,
- //--- enumeration borders
- MODIFY_FLAGS_NONE =0x00000000,
- MODIFY_FLAGS_ALL =MODIFY_FLAGS_ADMIN|MODIFY_FLAGS_MANAGER|MODIFY_FLAGS_POSITION|MODIFY_FLAGS_RESTORE|
- MODIFY_FLAGS_API_ADMIN|MODIFY_FLAGS_API_MANAGER|MODIFY_FLAGS_API_SERVER|MODIFY_FLAGS_API_GATEWAY
- };
- //--- common methods
- virtual void Release(void)=0;
- virtual MTAPIRES Assign(const IMTPosition* position)=0;
- virtual MTAPIRES Clear(void)=0;
- virtual LPCWSTR Print(MTAPISTR& string) const=0;
- //--- owner client login
- virtual UINT64 Login(void) const=0;
- //--- position symbol
- virtual LPCWSTR Symbol(void) const=0;
- virtual MTAPIRES Symbol(LPCWSTR symbol)=0;
- //--- EnPositionAction
- virtual UINT Action(void) const=0;
- virtual MTAPIRES Action(const UINT action)=0;
- //--- price digits
- virtual UINT Digits(void) const=0;
- virtual MTAPIRES Digits(const UINT digits)=0;
- //--- currency digits
- virtual UINT DigitsCurrency(void) const=0;
- virtual MTAPIRES DigitsCurrency(const UINT digits)=0;
- //--- symbol contract size
- virtual double ContractSize(void) const=0;
- virtual MTAPIRES ContractSize(const double contract_size)=0;
- //--- position create time
- virtual INT64 TimeCreate(void) const=0;
- virtual MTAPIRES TimeCreate(const INT64 time)=0;
- //--- position last update time
- virtual INT64 TimeUpdate(void) const=0;
- virtual MTAPIRES TimeUpdate(const INT64 time)=0;
- //--- position weighted average open price
- virtual double PriceOpen(void) const=0;
- virtual MTAPIRES PriceOpen(const double price)=0;
- //--- position current price
- virtual double PriceCurrent(void) const=0;
- virtual MTAPIRES PriceCurrent(const double price)=0;
- //--- position SL price
- virtual double PriceSL(void) const=0;
- virtual MTAPIRES PriceSL(const double price)=0;
- //--- position TP price
- virtual double PriceTP(void) const=0;
- virtual MTAPIRES PriceTP(const double price)=0;
- //--- position volume
- virtual UINT64 Volume(void) const=0;
- virtual MTAPIRES Volume(const UINT64 volume)=0;
- //--- position floating profit
- virtual double Profit(void) const=0;
- virtual MTAPIRES Profit(const double profit)=0;
- //--- position accumulated swaps
- virtual double Storage(void) const=0;
- virtual MTAPIRES Storage(const double storage)=0;
- //--- obsolete value
- virtual double ObsoleteValue(void) const=0;
- virtual MTAPIRES ObsoleteValue(const double value)=0;
- //--- profit conversion rate (from symbol profit currency to deposit currency)
- virtual double RateProfit(void) const=0;
- virtual MTAPIRES RateProfit(const double rate)=0;
- //--- margin conversion rate (from symbol margin currency to deposit currency)
- virtual double RateMargin(void) const=0;
- virtual MTAPIRES RateMargin(const double rate)=0;
- //--- expert id (filled by expert advisor)
- virtual UINT64 ExpertID(void) const=0;
- virtual MTAPIRES ExpertID(const UINT64 id)=0;
- //--- expert position id
- virtual UINT64 ExpertPositionID(void) const=0;
- virtual MTAPIRES ExpertPositionID(const UINT64 id)=0;
- //--- comment
- virtual LPCWSTR Comment(void) const=0;
- virtual MTAPIRES Comment(LPCWSTR comment)=0;
- //--- order activation state, time and price
- virtual UINT ActivationMode(void) const=0;
- virtual INT64 ActivationTime(void) const=0;
- virtual double ActivationPrice(void) const=0;
- virtual UINT ActivationFlags(void) const=0;
- //--- position internal data for API usage
- virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const INT64 value)=0;
- virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const UINT64 value)=0;
- virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const double value)=0;
- virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,INT64& value) const=0;
- virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,UINT64& value) const=0;
- virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,double& value) const=0;
- virtual MTAPIRES ApiDataClear(const USHORT app_id)=0;
- virtual MTAPIRES ApiDataClearAll(void)=0;
- //--- position create time in msc since 1970.01.01
- virtual INT64 TimeCreateMsc(void) const=0;
- virtual MTAPIRES TimeCreateMsc(const INT64 time)=0;
- //--- position last update time in msc since 1970.01.01
- virtual INT64 TimeUpdateMsc(void) const=0;
- virtual MTAPIRES TimeUpdateMsc(const INT64 time)=0;
- //--- order activation state, time and price
- virtual MTAPIRES ActivationMode(const UINT mode)=0;
- virtual MTAPIRES ActivationTime(const INT64 atm)=0;
- virtual MTAPIRES ActivationPrice(const double price)=0;
- virtual MTAPIRES ActivationFlags(const UINT flags)=0;
- //--- processed dealer login (0-means auto) (first position deal dealer)
- virtual UINT64 Dealer(void) const=0;
- virtual MTAPIRES Dealer(const UINT64 dealer)=0;
- //--- user record internal data for API usage
- virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const INT64 value)=0;
- virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const UINT64 value)=0;
- virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const double value)=0;
- virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,INT64& value) const=0;
- virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,UINT64& value) const=0;
- virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,double& value) const=0;
- //--- owner client login
- virtual MTAPIRES LoginSet(const UINT64 login)=0;
- //--- position ticket
- virtual UINT64 Position(void) const=0;
- //--- position ticket in external system (exchange, ECN, etc)
- virtual LPCWSTR ExternalID(void) const=0;
- virtual MTAPIRES ExternalID(LPCWSTR id)=0;
- //--- modification flags
- virtual UINT ModificationFlags(void) const=0;
- //--- position reason - EnPositionReason
- virtual UINT Reason(void) const=0;
- //--- position volume
- virtual UINT64 VolumeExt(void) const=0;
- virtual MTAPIRES VolumeExt(const UINT64 volume)=0;
- //--- EnPositionReason
- virtual MTAPIRES ReasonSet(const UINT reason)=0;
- };
- //+------------------------------------------------------------------+
- //| Position array interface |
- //+------------------------------------------------------------------+
- class IMTPositionArray
- {
- public:
- //--- common methods
- virtual void Release(void)=0;
- virtual MTAPIRES Assign(const IMTPositionArray* array)=0;
- virtual MTAPIRES Clear(void)=0;
- //--- add
- virtual MTAPIRES Add(IMTPosition* position)=0;
- virtual MTAPIRES AddCopy(const IMTPosition* position)=0;
- virtual MTAPIRES Add(IMTPositionArray* array)=0;
- virtual MTAPIRES AddCopy(const IMTPositionArray* array)=0;
- //--- delete & detach
- virtual MTAPIRES Delete(const UINT pos)=0;
- virtual IMTPosition* Detach(const UINT pos)=0;
- //--- update
- virtual MTAPIRES Update(const UINT pos,IMTPosition* position)=0;
- virtual MTAPIRES UpdateCopy(const UINT pos,const IMTPosition* position)=0;
- virtual MTAPIRES Shift(const UINT pos,const int shift)=0;
- //--- data access
- virtual UINT Total(void) const=0;
- virtual IMTPosition* Next(const UINT index) const=0;
- //--- sorting and search
- virtual MTAPIRES Sort(MTSortFunctionPtr sort_function)=0;
- virtual int Search(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchGreatOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchGreater(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchLessOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchLess(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchLeft(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchRight(const void *key,MTSortFunctionPtr sort_function) const=0;
- };
- //+------------------------------------------------------------------+
- //| Position events notification interface |
- //+------------------------------------------------------------------+
- class IMTPositionSink
- {
- public:
- virtual void OnPositionAdd(const IMTPosition* /*position*/) { }
- virtual void OnPositionUpdate(const IMTPosition* /*position*/) { }
- virtual void OnPositionDelete(const IMTPosition* /*position*/) { }
- virtual void OnPositionClean(const UINT64 /*login*/) { }
- virtual void OnPositionSync(void) { }
- };
- //+------------------------------------------------------------------+
|