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

 
Mihail Matkovskij:

当服务器上的任何止损单被触发时,OnTradeTransaction 将被触发。

但功能必须要有规定?
 
Eugen8519:
穿过去怎么样?

deal_reason_sl
价值评估

在文档中,有一个非常好的OnTradeTransaction 的例子。

 
MakarFX:
但功能必须要有规定?

如果你为这个目的专门 增加一个函数,那就很方便了。为什么不......?

但没有必要在其中跟踪止损点,因为服务器会这样做并向OnTradeTransaction 发送信号。

 
Mihail Matkovskij:

如果你为这个目的专门 增加一个函数,那就很方便了。为什么不......?

但没有必要跟踪其中的止损点,因为这将由服务器完成,它将向OnTradeTransaction 发送一个信号。

Misha,我对mql5不是很在行,我只是在起步阶段。

但我认为我们应该先写一些类似的东西。

if(OnTradeTransaction(...)==....)  SendNotification ("текст");

如果我错了,我很乐意纠正它

 
MakarFX:

Misha,我对mql5不是很在行,我刚刚开始接触它。

但我认为你应该先写一些东西,比如...

如果我错了,我很乐意纠正你。

OnTradeTransaction就是这样一个事件处理程序因此,所有的处理代码都应该在其中。或者调用处理函数,如果你想的话。见链接中的文档描述。
 
Mihail Matkovskij:
OnTradeTransaction就是这样一个事件处理程序因此,所有的处理代码都应该在其中。如果你想的话,也可以是处理功能。见链接中的文档描述。

我们说的是同一件事吗?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
这个怎么样? 我想我从mql4找到了一个
void AlertOrder()

{

   string txt;

   double OCP;

   int i=OrdersHistoryTotal()-1;

   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

   {                                

      OCP=OrderClosePrice();

      if (OCP==OrderStopLoss()) txt="SL";

      if (OCP==OrderTakeProfit()) txt="TP";

      }

      SendNotification(Symbol() + " hit "+txt+"");

 }
 
Eugen8519:
这个怎么样,我从mql4找到一个
OrdersHistoryTotal

不在mql5中

 
MakarFX:

我们说的是同一件事吗?

不,你要在条件(if)中调用处理程序。但你不需要在任何地方调用它。只需在OnTradeTransaction 中编写处理代码,就可以了。看一下触发止损时传递给OnTradeTransaction 的参数。

虽然,你必须知道什么是事件和事件处理程序,在MQL中有哪些事件。然后你就会开始理解这一切。

这里有一个链接,介绍什么是事件处理程序https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction。

为了避免混淆,它们通常只被称为事件处理程序。例如,由于你把OnTradeTransaction和一个普通的函数混淆了,这个函数是在if中调用的

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
这个怎么样,我从mql4找到一个

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

datetime lastclouse; 
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE) SendNotification (LastClouseProfit());
   .....   
  }  
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   ticket=HistoryDealGetTicket();
   profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
   if(profit!=EMPTY_VALUE) lastclouse=TimeCurrent();
   return(profit);
  }
原因: