初学者的问题 MQL5 MT5 MetaTrader 5 - 页 80

 
ksbr:
我想把一只股票(期货)放进MT5来测试我的,如何?
你不能这样做。寻找一个有期货的经纪公司
 
sergeev:
不可能。找一家有这种期货的经纪公司吧

%)))这个Fuchs没有直流电))))。它必须被粘在一起...

真可惜,真可惜,一切都开始得那么美好......。

 

向大家问好!

我试图在我的EA中实现两个功能,第一个是定义最后一笔交易的利润,第二个是定义最后一笔交易的手数。

我从A到Z搜索了这个网站,并按照文章和其他EA的例子做了几个函数,但没有结果--两个函数总是返回0.00。

在我看来,这里是最接近正确的变体,但其结果总是0。

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  volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
      return(volume);

而且没有任何效果,数值总是为零。

我自己刚刚开始从mql4迁移到mql5.在mql4中实现这样的功能并不是很困难,但这里有一个僵局。

请告诉我一个真正的、可行的解决方案。

 
karakos:

...

请建议一个真正的、可行的解决方案。

使用HistoryDealGetTicket()和HistoryDealsTotal()。

并进行验证。

   if(HistorySelect(start,end))
     {
      // ...
     }
 

tol64 非常感谢你!一切都在运作。

这里有一个100%有效的解决方案--该函数返回终端历史中最后一个平仓的利润。

//+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
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);
  }

以此类推,我们可以得到最后一笔交易的手数。

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 非常感谢你!这一切都在发挥作用。

...

如果你也在编辑器中按下Ctrl+,你会得到整齐的代码格式。在把例子上传到论坛之前尤其重要(可读性更好)。))
 
tol64:
如果你也在编辑器中按下Ctrl+,你会得到格式整齐的代码。这在将例子上传到论坛之前尤其重要(可读性更好)。))
样式的代码,再次感谢!
 

日安!我最近开始学习MQL5。我有一个关于平仓 的问题。在代码中: if(!m_Trade.PositionClose(_Symbol,100))//---按当前符号平仓。其结果是,位置颠倒了!如果能给我一个提示,我将非常感激,如何才能平仓?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      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(),")");       
          }
    
     
           }          
            }
 

在条形图收盘低于止损水平后的EA日志。多头头寸=1手,空头头寸=1手)