double LossLastPos(){
// --- определение границ требуемой торговой историиdatetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад//--- запросим в кэш программы торговую историю за деньHistorySelect(start,end);
//--- получим количество ордеров в историиint history_orders=HistoryOrdersTotal();
//--- получим тикет ордера из истории, имеющего последний индекс в спискеulong order_ticket=HistoryOrderGetTicket(history_orders-1);
if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
{
//Получаем значение прибыли последнего ордераdouble profit = HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
return(profit);
}
}
//+------------------------------------------------------------------+ //|Функция возвращает профит последней позиции |//+------------------------------------------------------------------+double ProfitLastPos()
{
// --- определение границ требуемой торговой историиdatetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад//--- запросим в кэш программы торговую историю за деньif(HistorySelect(start,end))
{
//--- получим количество сделок в историиint history_orders=HistoryDealsTotal();
//--- получим тикет сделки из истории, имеющей последний индекс в спискеulong order_ticket=HistoryDealGetTicket(history_orders-1);
if(order_ticket>0) // получили в кэш историческую сделку, работаем с ней
{
profit=HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
}
}
return(profit);
}
//_____________________________________________________________________________________________________________________________________________//-------- блок работы с длинной позицией ---------------------------------------------------------------------------------------------------if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
if( p_close1 < buy_stop_level )// если бар 1 закрылся ниже уровня стоп
{
if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
{
//--- сообщим о неудачеPrint("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
". Описание кода: ",m_Trade.ResultRetcodeDescription());
}
else
{
Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
" (",m_Trade.ResultRetcodeDescription(),")");
}
}
}
我想把一只股票(期货)放进MT5来测试我的,如何?
不可能。找一家有这种期货的经纪公司吧
%)))这个Fuchs没有直流电))))。它必须被粘在一起...
真可惜,真可惜,一切都开始得那么美好......。
向大家问好!
我试图在我的EA中实现两个功能,第一个是定义最后一笔交易的利润,第二个是定义最后一笔交易的手数。
我从A到Z搜索了这个网站,并按照文章和其他EA的例子做了几个函数,但没有结果--两个函数总是返回0.00。
在我看来,这里是最接近正确的变体,但其结果总是0。
我试图以同样的方式获得地段大小。
而且没有任何效果,数值总是为零。
我自己刚刚开始从mql4迁移到mql5.在mql4中实现这样的功能并不是很困难,但这里有一个僵局。
请告诉我一个真正的、可行的解决方案。
...
请建议一个真正的、可行的解决方案。
使用HistoryDealGetTicket()和HistoryDealsTotal()。
并进行验证。
tol64 非常感谢你!一切都在运作。
这里有一个100%有效的解决方案--该函数返回终端历史中最后一个平仓的利润。
以此类推,我们可以得到最后一笔交易的手数。
tol64 非常感谢你!这一切都在发挥作用。
...
如果你也在编辑器中按下Ctrl+,你会得到格式整齐的代码。这在将例子上传到论坛之前尤其重要(可读性更好)。))
日安!我最近开始学习MQL5。我有一个关于平仓 的问题。在代码中: if(!m_Trade.PositionClose(_Symbol,100))//---按当前符号平仓。其结果是,位置颠倒了!如果能给我一个提示,我将非常感激,如何才能平仓?
在条形图收盘低于止损水平后的EA日志。多头头寸=1手,空头头寸=1手)![](https://c.mql5.com/3/14/ig3mu2_lrw3rut0.jpg)