新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1578

 
MakarFX:

请您尝试一下(我没有得到这个机会)。

谢谢你,我稍后会检查。

 
Eugen8519:



请帮助我正确定位该功能

...

但如何以及在何处插入

当达到止损或止盈时,要发送一个信息?


MakarFX:

我们说的是同一件事吗?

我找到一个例子,用OnTradeTransaction 追踪SL出场:https://www.mql5.com/ru/code/21147。

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

在两个不同的工具上使用同一个EA

你好!请你帮帮我好吗?

我有一个EA,它在被拖动的图表上工作(Symbol() 值被当作符号的名称)。

但是这个EA也有一个ticket_exist变量,它包含了一个被设定的订单的票据,EA理解如果ticket_exist不等于0,那么订单就被设定在这里

问题:如果我在两个不同的工具上打开这样的EA,并且在一个工具上ticket_exist变量不等于零,那么在另一个工具上同名的变量是否仍等于零?

SU。

 
Mihail Nefedov:

在两个不同的工具上使用同一个EA

你好!请你帮帮我好吗?

我有一个EA,它在被拖动的图表上工作(Symbol() 值被当作符号的名称)。

但是这个EA也有一个ticket_exist变量,它包含了一个被设定的订单的票据,EA理解如果ticket_exist不等于0,那么订单就被设定在这里

问题:如果我在两个不同的工具上打开这样的EA,并且在一个工具上ticket_exist变量不等于零,那么在另一个工具上同名的变量是否仍等于零?

SU。

一个EA中的变量值对另一个EA来说是不可用的。最主要的是,要么是符号,要么是魔力,要么是两者都不同。

 

你能告诉我现在是什么时间吗?服务器时间 还是UTC?

我记得在某个地方读到过,但不记得在哪里了......。

 
Alexey Viktorov:

一个EA中的变量值对另一个EA来说是不可用的。最主要的是,要么符号,要么魔法,要么两者都应该不同。

谢谢! 如果我理解正确的话,那么为了使EA(两个绝对相同的)与不同的符号发生冲突,它们的变量应该被设置为全局(对整个终端),或者,例如,一个订单应该通过其序列号或仅仅通过其存在的事实来访问?

 
MakarFX:

试试这个(我没有测试过)。

它不工作,它给出了编译错误。


我试着这样做了,它的编译没有任何问题,但我不能在溜冰场关闭的情况下测试它。

我明天就回去工作了。

  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;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_reason==DEAL_REASON_SL)
               SendNotification ("Закрыл  позицию > StopLoss");

            if(deal_reason==DEAL_REASON_TP)
               SendNotification ("Закрыл  позицию > TakeProfit");
           }
       }
  }
附加的文件:
x4.PNG  11 kb
 
Eugen8519:

它不工作,它给出了编译错误


我试着这样做,它的编译没有任何问题,但当溜冰场关闭时,我无法测试它

我明天会完成它。

你没有正确输入代码!

我把它固定了一下,就可以用了。

  datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE)
     {
      SendNotification (LastClouseProfit()); lastclouse=TimeCurrent();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }
//+------------------------------------------------------------------+
 
MakarFX:

你没有正确输入代码!

我纠正了一下,它是有效的(我检查过)。

在这里,我们需要追踪交易是由SL还是TP准确完成的事实。而使用OnTradeTransaction,我们在交易结束后立即获得准备好的数据。

double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }

如果在TimeCurrent 有多于一个交易被关闭,应该返回什么结果?而且,出现利润并不意味着该交易被SL或TP平仓。正如我之前所说,这需要被追踪。因此,使用OnTradeTransaction,是最简单的解决方案

 
Mihail Matkovskij:

在这里,我们还需要追踪交易是在SL或TP上准确关闭的。

我把它理解为交易结束的通知,也许我弄错了......。

米哈伊尔-马特科夫斯基

如果在TimeCurrent 有超过一个交易被关闭,我应该得到什么结果?

不知道,需要检查

原因: