| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- //+------------------------------------------------------------------+
- //| MetaTrader 5 API |
- //| Copyright 2000-2019, MetaQuotes Software Corp. |
- //| http://www.metaquotes.net |
- //+------------------------------------------------------------------+
- #pragma once
- #include "MT5APIAccount.h"
- #include "MT5APIPosition.h"
- //+------------------------------------------------------------------+
- //| Trade deal interface |
- //+------------------------------------------------------------------+
- class IMTDeal
- {
- public:
- //--- deal types
- enum EnDealAction
- {
- DEAL_BUY =0, // buy
- DEAL_SELL =1, // sell
- DEAL_BALANCE =2, // deposit operation
- DEAL_CREDIT =3, // credit operation
- DEAL_CHARGE =4, // additional charges
- DEAL_CORRECTION =5, // correction deals
- DEAL_BONUS =6, // bonus
- DEAL_COMMISSION =7, // commission
- DEAL_COMMISSION_DAILY =8, // daily commission
- DEAL_COMMISSION_MONTHLY =9, // monthly commission
- DEAL_AGENT_DAILY =10, // daily agent commission
- DEAL_AGENT_MONTHLY =11, // monthly agent commission
- DEAL_INTERESTRATE =12, // interest rate charges
- DEAL_BUY_CANCELED =13, // canceled buy deal
- DEAL_SELL_CANCELED =14, // canceled sell deal
- DEAL_DIVIDEND =15, // dividend
- DEAL_DIVIDEND_FRANKED =16, // franked dividend
- DEAL_TAX =17, // taxes
- DEAL_AGENT =18, // instant agent commission
- DEAL_SO_COMPENSATION =19, // negative balance compensation after stop-out
- //--- enumeration borders
- DEAL_FIRST =DEAL_BUY,
- DEAL_LAST =DEAL_SO_COMPENSATION
- };
- //--- deal entry direction
- enum EnDealEntry
- {
- ENTRY_IN =0, // in market
- ENTRY_OUT =1, // out of market
- ENTRY_INOUT =2, // reverse
- ENTRY_OUT_BY =3, // closed by hedged position
- //--- enumeration borders
- ENTRY_FIRST =ENTRY_IN,
- ENTRY_LAST =ENTRY_OUT_BY
- };
- //--- deal creation reasons
- enum EnDealReason
- {
- DEAL_REASON_CLIENT =0, // deal placed manually
- DEAL_REASON_EXPERT =1, // deal placed by expert
- DEAL_REASON_DEALER =2, // deal placed by dealer
- DEAL_REASON_SL =3, // deal placed due SL
- DEAL_REASON_TP =4, // deal placed due TP
- DEAL_REASON_SO =5, // deal placed due Stop-Out
- DEAL_REASON_ROLLOVER =6, // deal placed due rollover
- DEAL_REASON_EXTERNAL_CLIENT=7, // deal placed from the external system by client
- DEAL_REASON_VMARGIN =8, // deal placed due variation margin
- DEAL_REASON_GATEWAY =9, // deal placed by gateway
- DEAL_REASON_SIGNAL =10, // deal placed by signal service
- DEAL_REASON_SETTLEMENT =11, // deal placed due settlement
- DEAL_REASON_TRANSFER =12, // deal placed due position transfer
- DEAL_REASON_SYNC =13, // deal placed due position synchronization
- DEAL_REASON_EXTERNAL_SERVICE=14, // deal placed from the external system due service issues
- DEAL_REASON_MIGRATION =15, // deal placed due migration
- DEAL_REASON_MOBILE =16, // deal placed manually by mobile terminal
- DEAL_REASON_WEB =17, // deal placed manually by web terminal
- DEAL_REASON_SPLIT =18, // deal placed due split
- //--- enumeration borders
- DEAL_REASON_FIRST =DEAL_REASON_CLIENT,
- DEAL_REASON_LAST =DEAL_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 IMTDeal* deal)=0;
- virtual MTAPIRES Clear(void)=0;
- virtual LPCWSTR Print(MTAPISTR& string) const=0;
- //--- deal ticket
- virtual UINT64 Deal(void) const=0;
- //--- deal ticket in external system (exchange, ECN, etc)
- virtual LPCWSTR ExternalID(void) const=0;
- virtual MTAPIRES ExternalID(LPCWSTR id)=0;
- //--- client login
- virtual UINT64 Login(void) const=0;
- virtual MTAPIRES Login(const UINT64 login)=0;
- //--- processed dealer login (0-means auto)
- virtual UINT64 Dealer(void) const=0;
- virtual MTAPIRES Dealer(const UINT64 dealer)=0;
- //--- deal order ticket
- virtual UINT64 Order(void) const=0;
- virtual MTAPIRES Order(const UINT64 order)=0;
- //--- EnDealAction
- virtual UINT Action(void) const=0;
- virtual MTAPIRES Action(const UINT action)=0;
- //--- EnEntryFlags
- virtual UINT Entry(void) const=0;
- virtual MTAPIRES Entry(const UINT entry)=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;
- //--- deal creation datetime in seconds
- virtual INT64 Time(void) const=0;
- virtual MTAPIRES Time(const INT64 time)=0;
- //--- deal symbol
- virtual LPCWSTR Symbol(void) const=0;
- virtual MTAPIRES Symbol(LPCWSTR symbol)=0;
- //--- deal price
- virtual double Price(void) const=0;
- virtual MTAPIRES Price(const double price)=0;
- //--- deal volume
- virtual UINT64 Volume(void) const=0;
- virtual MTAPIRES Volume(const UINT64 volume)=0;
- //--- deal profit
- virtual double Profit(void) const=0;
- virtual MTAPIRES Profit(const double profit)=0;
- //--- deal collected swaps
- virtual double Storage(void) const=0;
- virtual MTAPIRES Storage(const double storage)=0;
- //--- deal commission
- virtual double Commission(void) const=0;
- virtual MTAPIRES Commission(const double comm)=0;
- //--- obsolete value
- virtual double ObsoleteValue(void) const=0;
- virtual MTAPIRES ObsoleteValue(const double agent)=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;
- //--- position id
- virtual UINT64 PositionID(void) const=0;
- virtual MTAPIRES PositionID(const UINT64 id)=0;
- //--- deal comment
- virtual LPCWSTR Comment(void) const=0;
- virtual MTAPIRES Comment(LPCWSTR comment)=0;
- //--- deal 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;
- //--- deal profit in symbol's profit currency
- virtual double ProfitRaw(void) const=0;
- virtual MTAPIRES ProfitRaw(const double profit)=0;
- //--- closed position price
- virtual double PricePosition(void) const=0;
- virtual MTAPIRES PricePosition(const double price)=0;
- //--- closed volume
- virtual UINT64 VolumeClosed(void) const=0;
- virtual MTAPIRES VolumeClosed(const UINT64 volume)=0;
- //--- tick value
- virtual double TickValue(void) const=0;
- virtual MTAPIRES TickValue(const double value)=0;
- //--- tick size
- virtual double TickSize(void) const=0;
- virtual MTAPIRES TickSize(const double size)=0;
- //--- flags
- virtual UINT64 Flags(void) const=0;
- virtual MTAPIRES Flags(const UINT64 flags)=0;
- //--- deal creation datetime in msc since 1970.01.01
- virtual INT64 TimeMsc(void) const=0;
- virtual MTAPIRES TimeMsc(const INT64 time)=0;
- //--- EnDealReason
- virtual UINT Reason(void) const=0;
- //--- source gateway name
- virtual LPCWSTR Gateway(void) const=0;
- //--- deal price on gateway
- virtual double PriceGateway(void) const=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;
- //--- deal ticket
- virtual MTAPIRES DealSet(const UINT64 deal)=0;
- //--- modification flags
- virtual UINT ModificationFlags(void) const=0;
- //--- EnOrderReason
- virtual MTAPIRES ReasonSet(const UINT reason)=0;
- //--- source gateway name
- virtual MTAPIRES GatewaySet(LPCWSTR gateway)=0;
- //--- deal price on gateway
- virtual MTAPIRES PriceGatewaySet(double price_gateway)=0;
- //--- order SL
- virtual double PriceSL(void) const=0;
- virtual MTAPIRES PriceSL(const double price)=0;
- //--- order TP
- virtual double PriceTP(void) const=0;
- virtual MTAPIRES PriceTP(const double price)=0;
- //--- deal volume with extended accuracy
- virtual UINT64 VolumeExt(void) const=0;
- virtual MTAPIRES VolumeExt(const UINT64 volume)=0;
- //--- closed volume with extended accuracy
- virtual UINT64 VolumeClosedExt(void) const=0;
- virtual MTAPIRES VolumeClosedExt(const UINT64 volume)=0;
- };
- //+------------------------------------------------------------------+
- //| Deal array interface |
- //+------------------------------------------------------------------+
- class IMTDealArray
- {
- public:
- //--- common methods
- virtual void Release(void)=0;
- virtual MTAPIRES Assign(const IMTDealArray* array)=0;
- virtual MTAPIRES Clear(void)=0;
- //--- add
- virtual MTAPIRES Add(IMTDeal* deal)=0;
- virtual MTAPIRES AddCopy(const IMTDeal* deal)=0;
- virtual MTAPIRES Add(IMTDealArray* array)=0;
- virtual MTAPIRES AddCopy(const IMTDealArray* array)=0;
- //--- delete & detach
- virtual MTAPIRES Delete(const UINT pos)=0;
- virtual IMTDeal* Detach(const UINT pos)=0;
- //--- update
- virtual MTAPIRES Update(const UINT pos,IMTDeal* deal)=0;
- virtual MTAPIRES UpdateCopy(const UINT pos,const IMTDeal* deal)=0;
- virtual MTAPIRES Shift(const UINT pos,const int shift)=0;
- //--- data access
- virtual UINT Total(void) const=0;
- virtual IMTDeal* 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;
- };
- //+------------------------------------------------------------------+
- //| Deals events notification interface |
- //+------------------------------------------------------------------+
- class IMTDealSink
- {
- public:
- virtual void OnDealAdd(const IMTDeal* /*deal*/) { }
- virtual void OnDealUpdate(const IMTDeal* /*deal*/) { }
- virtual void OnDealDelete(const IMTDeal* /*deal*/) { }
- virtual void OnDealClean(const UINT64 /*login*/) { }
- virtual void OnDealSync(void) { }
- virtual void OnDealPerform(const IMTDeal* /*deal*/,IMTAccount* /*account*/,IMTPosition* /*position*/) { }
- };
- //+------------------------------------------------------------------+
|