OnTradeTransaction'ın iki Expert Advisor'da işlem süresinin milisaniyelere kadar denk geldiği görülmektedir. Dolayısıyla soru ortaya çıktı, "anlaşma" olayı öncebir Uzman Danışmandaki bir OnTradeTransaction'a, ardından başka bir Uzman Danışmandaki bir sonrakine mi geliyor, yoksa bir şekilde tüm Uzman Danışmanlardaki tüm işleyicilere aynı anda mı geliyor? Paralel çok iş parçacıklı çalışma gibi veya programlamada çağrıldığı gibi. Her şeyin sırayla gerçekleştiğine eminim, sadece bir milisaniyede hızlı bir şekilde çalışıyor, ama her ihtimale karşı sordum.
voidOnTradeTransaction ( constMqlTradeTransaction & trans,
constMqlTradeRequest & request,
constMqlTradeResult & result)
{
// Здесь надо поставить фильтр по типу транзакции// По символу и магику// и только если всё совпало, тогда
Count+ +; Print ( "Ontrade_test = " ,Count);
}
OnTradeTransaction'ın iki Expert Advisor'da işlem süresinin milisaniyelere kadar denk geldiği görülmektedir. Dolayısıyla soru ortaya çıktı, "anlaşma" olayı öncebir Uzman Danışmandaki bir OnTradeTransaction'a, ardından başka bir Uzman Danışmandaki bir sonrakine mi geliyor, yoksa bir şekilde tüm Uzman Danışmanlardaki tüm işleyicilere aynı anda mı geliyor? Paralel çok iş parçacıklı çalışma gibi veya programlamada çağrıldığı gibi. Her şeyin sırayla gerçekleştiğine eminim, sadece bir milisaniyede hızlı bir şekilde çalışıyor, ama her ihtimale karşı sordum.
BİR sembol (m_symbol.Name()) ve bir büyü (m_magic) için OnTradeTransaction işleyicisi.
Önce işlemi yakalamak
TRADE_TRANSACTION_DEAL_ADD
Tarihe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.
o zaman bir anlaşma olup olmadığına bakın
DEAL_ENTRY_OUT
Pazar çıkışı
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction ( constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif (type== TRADE_TRANSACTION_DEAL_ADD )
{
long deal_ticket = 0 ;
long deal_order = 0 ;
long deal_time = 0 ;
long deal_time_msc = 0 ;
long deal_type =- 1 ;
long deal_entry =- 1 ;
long deal_magic = 0 ;
long deal_reason =- 1 ;
long deal_position_id = 0 ;
double deal_volume = 0.0 ;
double deal_price = 0.0 ;
double deal_commission = 0.0 ;
double deal_swap = 0.0 ;
double deal_profit = 0.0 ;
string deal_symbol = "" ;
string deal_comment = "" ;
string deal_external_id = "" ;
if ( HistoryDealSelect (trans.deal))
{
deal_ticket = HistoryDealGetInteger (trans.deal, DEAL_TICKET );
deal_order = HistoryDealGetInteger (trans.deal, DEAL_ORDER );
deal_time = HistoryDealGetInteger (trans.deal, DEAL_TIME );
deal_time_msc = HistoryDealGetInteger (trans.deal, DEAL_TIME_MSC );
deal_type = HistoryDealGetInteger (trans.deal, DEAL_TYPE );
deal_entry = HistoryDealGetInteger (trans.deal, DEAL_ENTRY );
deal_magic = HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
deal_reason = HistoryDealGetInteger (trans.deal, DEAL_REASON );
deal_position_id = HistoryDealGetInteger (trans.deal, DEAL_POSITION_ID );
deal_volume = HistoryDealGetDouble (trans.deal, DEAL_VOLUME );
deal_price = HistoryDealGetDouble (trans.deal, DEAL_PRICE );
deal_commission = HistoryDealGetDouble (trans.deal, DEAL_COMMISSION );
deal_swap = HistoryDealGetDouble (trans.deal, DEAL_SWAP );
deal_profit = HistoryDealGetDouble (trans.deal, DEAL_PROFIT );
deal_symbol = HistoryDealGetString (trans.deal, DEAL_SYMBOL );
deal_comment = HistoryDealGetString (trans.deal, DEAL_COMMENT );
deal_external_id = HistoryDealGetString (trans.deal, DEAL_EXTERNAL_ID );
}
elsereturn ;
if (deal_reason!=- 1 )
DebugBreak ();
if (deal_symbol==m_symbol.Name() && deal_magic==m_magic)
if (deal_entry== DEAL_ENTRY_OUT )
{
}
}
}
Açıklayamadığım bir şey. İşte gerçek bir örnek. İşte kod:
vb.
OnTradeTransaction'ın iki Expert Advisor'da işlem süresinin milisaniyelere kadar denk geldiği görülmektedir. Dolayısıyla soru ortaya çıktı, "anlaşma" olayı önce bir Uzman Danışmandaki bir OnTradeTransaction'a, ardından başka bir Uzman Danışmandaki bir sonrakine mi geliyor, yoksa bir şekilde tüm Uzman Danışmanlardaki tüm işleyicilere aynı anda mı geliyor? Paralel çok iş parçacıklı çalışma gibi veya programlamada çağrıldığı gibi. Her şeyin sırayla gerçekleştiğine eminim, sadece bir milisaniyede hızlı bir şekilde çalışıyor, ama her ihtimale karşı sordum.
Açıklayamadığım bir şey. İşte gerçek bir örnek. İşte kod:
void OnTradeTransaction(const MqlTradeTransaction ve işlem,
const MqlTradeRequest&request,
const MqlTradeResult&sonucu)
{
Say++;
Print("Ontrade_test = ",Sayı);
}
İşleyici iki Expert Advisor'da kullanılır, 1 işlem yapılırken iki Expert Advisor'da defalarca işlenir. Kod çıktıları:
18:31:06,495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1
18:31:06,495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1
18:31:06,497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2
18:31:06,497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2
18:31:06,498 ontrade_trans_functions (MXI-12.17,M5) ontrade_test = 3
18:31:06,498 ontrade_trans_functions2 (MXI-12.17,H1) ontrade_test = 3
18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4
18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) ontrade_test = 4 ...
vb.
OnTradeTransaction'ın iki Expert Advisor'da işlem süresinin milisaniyelere kadar denk geldiği görülmektedir. Dolayısıyla soru ortaya çıktı, "anlaşma" olayı önce bir Uzman Danışmandaki bir OnTradeTransaction'a, ardından başka bir Uzman Danışmandaki bir sonrakine mi geliyor, yoksa bir şekilde tüm Uzman Danışmanlardaki tüm işleyicilere aynı anda mı geliyor? Paralel çok iş parçacıklı çalışma gibi veya programlamada çağrıldığı gibi. Her şeyin sırayla gerçekleştiğine eminim, sadece bir milisaniyede hızlı bir şekilde çalışıyor, ama her ihtimale karşı sordum.
BİR sembol (m_symbol.Name()) ve bir büyü (m_magic) için OnTradeTransaction işleyicisi.
Önce işlemi yakalamak
TRADE_TRANSACTION_DEAL_ADD
Tarihe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.
o zaman bir anlaşma olup olmadığına bakın
DEAL_ENTRY_OUT
Pazar çıkışı
OnTradeTransaction olayı yayınlanır, terminaliniz tarafından gerçekleştirilen tüm işlemler orada "düşer".
Sadece her danışman kendi eylemlerini filtrelemelidir.
ayrıca her türde, sipariş eşzamansız olarak gönderilirse bilete göre filtreleriz, o zaman
önce request kimliğine göre bir bilet alıyoruz ve ardından bilete göre filtreleme yapıyoruz.
TRADE_TRANSACTION_REQUEST olayı her zaman önce gelir, gerisi "istedikleri gibi"
Katma
Bütün bunlar defalarca tartışıldı.
"Borsa ticareti" bölümünde arama yapın
Teşekkürler, gerekli işlemleri "kaydetmiş" görünüyor.