//+------------------------------------------------------------------+ //| 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 history if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; long deal_type =0; string deal_symbol =""; long deal_magic =0; if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); } else return; if(deal_symbol==Symbol() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_IN) { CloseAll(); } } }
一旦挂单被触发,交易被录入历史记录,该交易就会发生。
一旦我们抓到这个交易,我们只需要删除所有剩余的挂单。
//+------------------------------------------------------------------+ //| Close All Orders | //+------------------------------------------------------------------+ void CloseAll() { Print(__FUNCTION__); for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions if(m_order.SelectByIndex(i)) if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic) m_trade.OrderDelete(m_order.Ticket()); }
} //+------------------------------------------------------------------+ //| 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 history if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; long deal_type =0; string deal_symbol =""; long deal_magic =0; if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); } else return; if(deal_symbol==Symbol() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_IN) { CloseAll(); } } } //+------------------------------------------------------------------+ //| Close All Orders | //+------------------------------------------------------------------+ void CloseAll() { Print(__FUNCTION__); for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions if(m_order.SelectByIndex(i)) if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic) m_trade.OrderDelete(m_order.Ticket()); } //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //| 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 history if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; long deal_type =0; string deal_symbol =""; long deal_magic =0; if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); } else return; if(deal_symbol==Symbol() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_IN) { CloseAll(); } } }
一旦挂单被触发,交易被录入历史记录,该交易就会发生。
一旦我们抓到这个交易,我们只需要删除所有未完成的挂单。
//+------------------------------------------------------------------+ //| Close All Orders | //+------------------------------------------------------------------+ void CloseAll() { Print(__FUNCTION__); for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions if(m_order.SelectByIndex(i)) if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic) m_trade.OrderDelete(m_order.Ticket()); }
} //+------------------------------------------------------------------+ //| 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 history if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; long deal_type =0; string deal_symbol =""; long deal_magic =0; if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); } else return; if(deal_symbol==Symbol() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_IN) { CloseAll(); } } } //+------------------------------------------------------------------+ //| Close All Orders | //+------------------------------------------------------------------+ void CloseAll() { Print(__FUNCTION__); for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions if(m_order.SelectByIndex(i)) if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic) m_trade.OrderDelete(m_order.Ticket()); } //+------------------------------------------------------------------+
大家好!请您告知如何在EA中设置订单删除?
情况是这样的。
我们在不同的方向放置2个挂单,只要其中一个触发,另一个就会被删除,不再展示。
如果有任何帮助,我将非常感激。
谢谢你。
有几种方法可以做到这一点。其中之一是使用OnTradeTransaction。
在抓取交易时
贸易_交易_交易_添加
将交易添加到历史记录中。作为订单执行或账户余额交易的结果而执行。
并确保这项交易是进入市场的。
帐户
市场进入
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
一旦挂单被触发,交易被录入历史记录,该交易就会发生。
一旦我们抓到这个交易,我们只需要删除所有剩余的挂单。
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
常见的EA代码(只有在这里我指定了魔法等于 "0"--你应该设置你自己的魔法)。
//| There will be only one.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade m_trade; // trading object
COrderInfo m_order; // pending orders object
//---
ulong m_magic=0; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
//+------------------------------------------------------------------+
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
//+------------------------------------------------------------------+
另一个关于OnDeinit事件的问题。
这个代码会起作用。
空白的OnDeinit(const int reason)。
{
如果(原因==REASON_REMOVE)
{
平仓 代码(如果有)。
}
}
一般来说,我们需要知道是否有可能在OnDeinit 事件处理中关闭位置
专家们下午好,请分享你们的经验。
有一个值数组,它反映了一些对象/场,也就是说,如果有一个任务以某种方式指定这个对象/场,可能的行动是什么。
例如,如果阵列的体积可以达到数千个x和y的单元,将这个阵列放入Kohonen地图 网络是否合适?
也许你可以建议如何将其中一个二维数组(具有大维度)粘到Kohonen网络中。
以及Kohon是否适用于分析--数组的递归(数组中的数组)。
或者,也许有人可以帮助把正确的问题
有几种方法可以做到这一点。一个是使用OnTradeTransaction。
在我们捕捉到的交易中
贸易_交易_交易_添加
将交易添加到历史记录中。作为订单执行或账户余额交易的结果而执行。
并确保这项交易是进入市场的。
帐户
市场进入
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
一旦挂单被触发,交易被录入历史记录,该交易就会发生。
一旦我们抓到这个交易,我们只需要删除所有未完成的挂单。
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
通用的EA代码(只有在这里我指定魔法等于 "0" - 你应该设置你自己的魔法)。
//| There will be only one.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade m_trade; // trading object
COrderInfo m_order; // pending orders object
//---
ulong m_magic=0; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
//+------------------------------------------------------------------+
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
//+------------------------------------------------------------------+
谢谢你,但在MQL4中应该如何实现?我为没有立即说明而道歉。
谢谢你,但我如何为MQL4格式化它呢?我为没有马上说得更具体而感到抱歉。
为什么我在股票和期货市场上抓到一个错误,但在外汇和商品上却一切正常?
卖出限制失败 1.00 USDRUB_TOM at 63.8679 sl: 63.8829 tp: 63.8329 [无效的到期日]
为什么我在股票和期货市场上抓到一个错误,但在外汇和商品上却一切正常?
卖出限制失败 1.00 USDRUB_TOM at 63.8679 sl: 63.8829 tp: 63.8329 [无效的到期日]
你需要添加一个参数
同事们好,我有一个关于mql5的问题。
如何计算今天开仓的利润(如果昨天开仓,今天平仓,那么这个仓位不计算在内)????
同事们好,我有一个关于mql5的问题。
如何计算今天开仓的利润(如果昨天开仓,今天平仓,那么这个仓位就不计算在内)????
显然,通过比较开仓的时间 和当天开始的时间。