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

 
谢谢大家。
 
A.Vakutin:

请分享一下,谁知道并知道如何禁止EA在触发止损后卖出?

// Оставанивливает работу всех советников, если сработал SL.

#include <MT4Orders.mqh>      // https://www.mql5.com/ru/code/16006
#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

void OnTrade()
{
  static int PrevTotal = OrdersHistoryTotal();
  const int Total = OrdersHistoryTotal();
  
  for (int i = Total - 1; i >= PrevTotal; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderCloseReason() == DEAL_REASON_SL))
    {
      long Chart = ChartFirst();
  
      while (Chart != -1)
      {
        if ((Chart != ChartID()) && EXPERT::Is(Chart))
          EXPERT::Remove(Chart);
  
        Chart = ChartNext(Chart);
      }

      break;
    }        
    
  PrevTotal = Total;
}
 

晚上好,论坛用户

出现了一个两难的局面。

我有一个交易,并将其存储在一个变量中

datetime now=TimeCurrent();

一段时间后,一个事件发生了,我把时间存储在一个变量中

datetime now2=TimeCurrent();

我怎样才能检查这些事件之间是否已经过了15分钟?

我以为我有两个变量,现在2是以秒为单位设置的,试着取差,应该是700多秒。

 if(now2-now>700)

但它不工作()

我请求社区的帮助!

 
ISL:

晚上好,论坛用户

出现了一个两难的局面。

我有一个交易,我把它存储在一个变量中

一段时间后,一个事件发生了,我把时间存储在一个变量中

我如何检查这些事件之间是否已经过了15分钟?

我以为我有两个变量,现在2是以秒为单位设置的,试着取差,应该是700多秒。

但它不工作((

请社区提供帮助!

datetime变量被表示为日期和时间。你可以用不同的方法来解决这个问题,例如用数据时间类型 来表示700(虽然15分钟是900秒)。

if(now2-now>(datetime)700)

或反之,表示变量为int类型的

if(int(now2-now)>700)

或像这样

if((int)now2-(int)now>700)
无论如何,我们必须检查...
 
Alexey Viktorov:

datetime变量被表示为日期和时间。你可以用不同的方法来解决这个问题,例如,将700(虽然15分钟是900秒)表示为数据时间


傍晚来临了)))。

 
ISL:

傍晚时分的感觉)))。

是啊...我花了一个半小时才把功能从输入器连接起来...

 
Vladimir Karputov:

连接标准交易类CTrade
(它是终端的标准配置)。

并调用两个方法。

设置符号类型填充

根据指定的符号设置订单类型

设置边距模式

根据当前的账户设置,设置保证金计算模式

弗拉基米尔,晚上好,请你给我建议,请你做一个计算利润百分比的函数,我想计算交易量,但我不能正确地计算,我想我需要识别有出场方向的订单,用它们来计算交易量。

double ALL_PROFIT(int rezult)
  {
   HistorySelect(0,TimeCurrent());
   double   rez=0.0;
   double   alprof=0.0;
   uint     total=HistoryDealsTotal();
   for(uint i=0;i<=total;i++) 
     {
      if(m_ticket.SelectByIndex(i))
        {
         if(m_ticket.Magic()==Mg)
           {
            alprof+=(m_ticket.Profit()+m_ticket.Swap()+m_ticket.Commission());
            rez=alprof;
            if(rezult==1 && alprof!=0.00){rez=alprof/(AccountInfoDouble(ACCOUNT_BALANCE)-alprof)*100;}
            if(rezult==2){rez+=m_ticket.Volume();}      
           }
        }
     }
   return(NormalizeDouble(rez,2)); 
  }
顺便说一下,平仓的数量也是一个问题,要知道其中有多少人进行了交易。
 
TYRBO:

弗拉基米尔,晚上好,你能不能推荐一个计算利润百分比的函数,我想计算交易量,但它不能正常工作,我想我需要识别有方向的订单,用它们来计算交易量。

我什么都不懂,所有的信都堆积在一起。将你的代码通过代码样式器

 
TYRBO:

弗拉基米尔,晚上好,你能不能推荐一个计算利润百分比的函数,我想计算交易量,但它不能正常工作,我想我需要识别有方向的订单,用它们来计算交易量。


顺便说一下,这也是一个关闭位置数量的问题。

请正确发送代码。我已经纠正了你一次,并把代码放对了。

 
TYRBO:

弗拉基米尔,晚上好,你能不能推荐一个计算利润百分比的函数,我想计算交易量,但它不能正常工作,我想我需要识别有方向的订单,用它们来计算交易量。

顺便说一下,关闭位置的数量也是一个问题

我已经第三次正确提交了你的代码。我想知道我们还要尝试多少次。:)