Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1147

 
Vladimir Karputov:

Das war's:


Ein weiterer wichtiger Punkt ist, wie Sie die Preise aktualisieren (und aktualisieren Sie sie überhaupt?). Der Spread - wie bekommt man ihn?

    double point, price, ask, bid;
    ulong digits;

    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, ask)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, bid)) return(true);
    if(!SymbolInfoInteger(symbol, SYMBOL_DIGITS, digits)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_POINT, point)) return(true);
SymbolInfoInteger(symbol, SYMBOL_SPREAD);
 
Mikhail Sergeev:

Also, für die Zukunft:

1.SymbolInfoDouble

Wenn diese Funktion verwendet wird, um Informationen über den letzten Tick zu erhalten, ist es besser,SymbolInfoTick()zu verwenden. Es ist durchaus möglich, dass es für dieses Symbol seit dem Zeitpunkt, an dem das Terminal eine Verbindung zum Handelskonto hergestellt hat, keine Notierung mehr gab. In diesem Fall ist der angeforderte Wert undefiniert.

2. Es ist besser, den Spread als Differenz zwischen Ask und Bid zu verstehen.

3. Freeze-Level: Suchen Sie den Maximalwertaus drei Werten (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL und berechneter Spread) und multiplizieren Sie ihn mit drei, und Sie werden zufrieden sein.

Punkt 3 hat sich in der Praxis bei der Arbeit mit KodoBase ergeben (und der Validator in KodoBase und Market ist der gleiche).
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 
Vladimir Karputov:

Also, für die Zukunft:

1.SymbolInfoDouble

Wenn diese Funktion verwendet wird, um Informationen über den letzten Tick zu erhalten, ist es besser,SymbolInfoTick()zu verwenden. Es ist durchaus möglich, dass es für dieses Symbol seit dem Zeitpunkt, an dem das Terminal eine Verbindung zum Handelskonto hergestellt hat, keine Notierung mehr gab. In diesem Fall ist der angeforderte Wert undefiniert.

2. Es ist besser, den Spread als Differenz zwischen Ask und Bid zu verstehen.

3. Freeze-Level: Suchen Sie den Maximalwertaus drei Werten (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL und berechneter Spread) und multiplizieren Sie ihn mit drei, und Sie werden zufrieden sein.

Punkt 3 hat sich in der Praxis bei der Arbeit mit KodoBase ergeben (und der Validator in KodoBase und Market ist der gleiche).

Herzlichen Dank! Ich werde jetzt einige Änderungen vornehmen und es versuchen.

 
Mikhail Sergeev:

Herzlichen Dank! Ich werde die Änderungen jetzt vornehmen und es ausprobieren.

Ja, das Ergebnis wird interessant sein.

 
Vladimir Karputov:

Ja, das Ergebnis wird interessant sein.

Problem gelöst! Es stellte sich heraus, dass es sehr einfach ist, einen Auftrag zu löschen, indem manrequest.symbol ausfüllt

Ich habe keine strukturierten Informationen darüber gefunden, welche Daten je nach Geschäftsart an die Anfrage übergeben werden sollten. Und ich habe das Beispielhttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions verwendet.

Sie ist nicht da.


Ich habe viele Varianten mit Einfrieren geprüft. In meinem Fall war eine einzige Größe ausreichend.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Торговля осуществляется посредством отправки с помощью функции OrderSend() приказов на открытие позиций, а также приказов на установку, модификацию и удаление отложенных ордеров. Каждый торговый приказ содержит указание на тип запрашиваемой торговой операции. Торговые операции описаны в перечислении ENUM_TRADE_REQUEST_ACTIONS...
 
Mikhail Sergeev:

Problem gelöst! Es stellte sich heraus, dass es sehr einfach ist, einen Auftrag zu löschen, indem manrequest.symbol ausfüllt.

Ich habe keine strukturierten Informationen darüber gefunden, welche Daten je nach Art der Handelsoperation an die Anfrage übergeben werden sollten. Und ich habe das Beispiel https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions verwendet .

Sie ist nicht da.


Ich habe viele Varianten mit Einfrieren geprüft. In meinem Fall war eine einzige Größe ausreichend.

Warum brauchen Sie solche Komplikationen? Verwenden Sie die Handelsklasse CTrade.

 
Vladimir Karputov:

Warum sollte man sich diese Mühe machen? Verwenden Sie die Handelsklasse CTrade.

Leider gibt es das schon seit MT4. Es war einfacher, sie anzupassen.


Ich weiß nicht, wie es bei CTrade ist, aber es scheint, dass überall dort, wo Sie ein Symbol angeben müssen, dieses in den an die Methode übergebenen Parametern enthalten ist. Und sie ist in der Methode OrderDelete(const ulong ticket) nicht vorhanden, so dass sie nicht funktioniert. Wir sollten das request.symbol vorher irgendwo ausfüllen.

 
Mikhail Sergeev:

Leider gibt es das schon seit MT4. Es war einfacher, sich anzupassen.


Zu CTrade - ich habe es nicht verstanden, aber es scheint, dass überall dort, wo ein Symbol angegeben werden muss, dies in den an die Methode übergebenen Parametern steht. Und sie ist in der Methode OrderDelete(const ulong ticket) nicht vorhanden, so dass sie nicht funktioniert. Wir müssen das request.symbol irgendwo einfügen.

Was wird nicht funktionieren? Dies ist eine Handelsklasse: Sie setzt, ändert und löscht FERNBESTELLUNGEN und öffnet, ändert und schließt FERNBESTELLUNGEN.

Es funktioniert absolut alles. Und alles wird mit einem beliebigen Handelsbefehl in eine Zeile geschrieben.


CTrade

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Was wird dann nicht funktionieren? Es ist eine Handelsklasse: setzt, ändert und löscht REMOTE ORDERS, öffnet, ändert und schließt POISONS.

Es funktioniert absolut alles. Und alles wird mit einem beliebigen Handelsbefehl in eine Zeile geschrieben.


CTrade

//+------------------------------------------------------------------+
//| Delete specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderDelete(const ulong ticket)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action    =TRADE_ACTION_REMOVE;
   m_request.magic     =m_magic;
   m_request.order     =ticket;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Ich verstehe nur nicht, an welchem Punkt m_request.symbol gefüllt wird

Wie auch immer, Problem gelöst. Nochmals vielen Dank für Ihre Hilfe!

 
Mikhail Sergeev:

Ich verstehe nur nicht, an welchem Punkt m_request.symbol ausgefüllt wird

Wie auch immer, Problem gelöst. Nochmals vielen Dank für Ihre Hilfe!

Nehmen Sie einen Debugger durchCTrade und Sie werden sehen, wohin das Symbol ging :)

Grund der Beschwerde: