Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1577

 
Mihail Matkovskij:

OnTradeTransaction wird ausgelöst, wenn eine Stop-Order auf dem Server ausgelöst wird.

Aber die Funktion muss vorgeschrieben werden?
 
Eugen8519:
Wie wäre es mit durch?

DEAL_REASON_SL
DEAL_REASON_TP

keine

Es gibt ein sehr gutes Beispiel für OnTradeTransaction in den Docs

 
MakarFX:
Aber die Funktion muss vorgeschrieben werden?

Es wäre praktisch, wenn Sie eine Funktion speziell für diesen Zweck hinzufügen würden. Warum nicht...?

Es besteht jedoch keine Notwendigkeit, die Überschreitung von Haltestellen zu verfolgen, da der Server dies übernimmt und ein Signal anOnTradeTransaction sendet.

 
Mihail Matkovskij:

Es wäre praktisch, wenn Sie eine Funktion speziell für diesen Zweck hinzufügen würden. Warum nicht...?

Es ist jedoch nicht notwendig, das Überschreiten der Stopps zu verfolgen, da dies vom Server erledigt wird und dieser ein Signal anOnTradeTransaction sendet.

Misha, ich bin nicht wirklich gut in mql5, ich stehe erst am Anfang,

aber ich denke, wir sollten zuerst etwas schreiben wie.

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

Wenn ich falsch liege, werde ich das gerne korrigieren.

 
MakarFX:

Misha, ich bin nicht sehr gut in mql5, ich fange gerade erst an, mich damit zu beschäftigen,

aber ich denke, Sie sollten zuerst etwas schreiben wie...

Wenn ich falsch liege, werde ich Sie gerne korrigieren.

OnTradeTransaction ist ein solcher Event-Handler. Daher sollte der gesamte Verarbeitungscode darin enthalten sein. Oder rufen Sie die Verarbeitungsfunktion auf, wenn Sie wollen. Siehe Beschreibung in der Dokumentation unter dem Link.
 
Mihail Matkovskij:
OnTradeTransaction ist ein solcher Event-Handler. Daher sollte der gesamte Verarbeitungscode darin enthalten sein. Oder eine Bearbeitungsfunktion, wenn Sie wollen. Siehe die Beschreibung in der Dokumentation unter dem Link.

Sprechen wir über dieselbe Sache?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
Wie wäre es damit? Ich glaube, ich habe eine von mql4 gefunden
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:
Wie wäre es damit? Ich habe eine von mql4 gefunden
OrdersHistoryTotal

nicht in mql5

 
MakarFX:

Sprechen wir über dieselbe Sache?

Nein. Sie werden den Handler in der Bedingung (if) aufrufen. Aber Sie müssen es nirgendwo nennen. Schreiben Sie einfach den Verarbeitungscode inOnTradeTransaction und das ist alles. Sehen Sie sich die Parameter an, die anOnTradeTransaction übergeben werden, wenn ein Stop ausgelöst wird.

Sie müssen allerdings wissen, was Ereignisse und Ereignisbehandler sind und welche Ereignisse es in MQL gibt. Dann werden Sie beginnen, alles zu verstehen.

Hier ist ein Link zu den Event Handlern: https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction.

Um Verwechslungen zu vermeiden, werden sie oft einfach als Event-Handler bezeichnet. Da Sie zum BeispielOnTradeTransaction mit einer gewöhnlichen Funktion verwechselt haben, die in if aufgerufen wird.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
Wie wäre es damit? Ich habe eine von mql4 gefunden

Versuchen Sie dies (ich habe es nicht getestet)

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);
  }
Grund der Beschwerde: