Bibliotheken: MT4Orders - Seite 5

 
-Aleks-:

Ich hab's - danke - die Fehler sind fast weg, aber einer ist noch da:

'OrderCloseBy' - Funktion nicht definiert cPoza13-1.mqh 1885 8

 //+------------------------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если один ордер закрылся другим
//+------------------------------------------------------------------------------------------------------------------------------------+
bool cPoza::closeBy(int ticketB, int ticketA)
{
  if(ticketB > 0 && ticketA > 0)
  {
    if(OrderCloseBy(ticketB, ticketA)) return true;
    else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError);
  }
  else return false;
 
  return false;
}

// Was nicht realisiert wird:
// CloseBy-Momente - dazu hatte ich noch keine Zeit. Vielleicht in der Zukunft, wenn nötig.
// TP und SL von geschlossenen Positionen bestimmen - derzeit (Build 1368) weiß MQL5 nicht, wie man das macht.

Ich habe die Bibliothek für mich selbst geschrieben, und ich benutze CloseBy nicht. Deshalb habe ich es nicht implementiert. Vielleicht werde ich es mit Geschwindigkeit hinzufügen.

Als vorübergehende Lösung fügen Sie diese Zeilen hinzu, bevor Sie Ihre Bibliothek einbinden

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif
 
fxsaber:

Das ist natürlich möglich. Ich habe keine Notwendigkeit dafür gesehen.

Offensichtlich sollte es getan werden.

Ich muss auch aktiv mit der Historie arbeiten, wenn ich Grids mit Mittelwertbildung aufbaue. Tatsache ist, dass der DC die maximale Anzahl von Aufträgen begrenzt, und wenn das Konto 15-20 Expert Advisors mit Grids hat, besteht die Lösung darin, einige der Grids im Moment der Annäherung an das Auftragslimit zu minimieren, bzw. wir müssen in der Historie graben, um das tatsächliche finanzielle Ergebnis der Position zu verstehen.

 
fxsaber:
// Was nicht realisiert wird:
// CloseBy-Momente - dazu hatte ich noch keine Zeit. Vielleicht in der Zukunft, wenn nötig.
// TP und SL von geschlossenen Positionen bestimmen - derzeit (Build 1368) weiß MQL5 nicht, wie man das macht.
Ich habe die Bibliothek für mich selbst geschrieben, und ich verwende CloseBy nicht. Deshalb habe ich es nicht implementiert. Vielleicht werde ich das mit der Beschleunigung auch hinzufügen.

Das wäre sehr gut, danke. CloseBy ist eine praktische Sache, um einen Teil einer Position in einem berechneten Punkt zu fixieren.

 
-Aleks-:

Wir müssen auch aktiv mit der Geschichte arbeiten, wenn wir Grids mit Mittelwertbildung aufbauen. Tatsache ist, dass der DC die maximale Anzahl von Aufträgen begrenzt, und wenn das Konto 15-20 Expert Advisors mit Grids hat, wird die Lösung als der Zusammenbruch eines Teils der Grids zum Zeitpunkt der Annäherung an das Limit für Aufträge gesehen, bzw. wir müssen in der Geschichte graben, um das tatsächliche finanzielle Ergebnis der Position zu verstehen.

Ich werde CloseBy und History Acceleration in der nächsten Version hinzufügen. Ich verstehe nur nicht, ob dies erforderlich ist (die Bibliothek wird verwendet) oder eine Empfehlung für den Fall der Fälle ist.
 
fxsaber:
// Was nicht realisiert wird:
// CloseBy-Momente - dazu hatte ich noch keine Zeit. Vielleicht in der Zukunft, wenn nötig.
// TP und SL von geschlossenen Positionen bestimmen - derzeit (Build 1368) weiß MQL5 nicht, wie man das macht.

Ich habe die Bibliothek für mich selbst geschrieben, und ich verwende CloseBy nicht. Deshalb habe ich es nicht implementiert. Vielleicht füge ich es hinzu, sobald ich mich auf den neuesten Stand gebracht habe.

Als vorübergehende Lösung fügen Sie diese Zeilen hinzu, bevor Sie Ihre Bibliothek aktivieren

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif

Danke - die Kompilierung war erfolgreich in dem Teil, der mit Bestellungen arbeitet! Jetzt werde ich den Rest der Fehler beheben, die durch Sprachinkompatibilität verursacht werden...

 
fxsaber:
Ich werde CloseBy und History Acceleration im nächsten Build hinzufügen. Ich verstehe nur nicht, ob dies in der Nachfrage (Bibliothek verwendet wird) oder nur eine Empfehlung nur für den Fall ist.

Ich benutze es, es gibt sehr interessante Ergebnisse, aber ich habe es (die Funktion) noch nicht auf einem echten Konto verwendet - bald.


 
fxsaber:
Es wird funktionieren! Ich mache alles am Aktienmarkt über MT4Orders. Ich beschränke mich nicht durch die Anzahl der offenen Positionen.
Aber ich empfehle nicht, mit der Historie an der Börse über MT4Orders zu arbeiten. D.h. MODE_TRADE - kein Problem, MODE_HISTORY - kein Bedarf an der Börse.
 

kann keinen Stop-Loss an der Börse setzen, sondern eröffnet Trades

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

Und meiner Meinung nach haben Sie es nicht in der Lib für Änderungen.

if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

Ich verstehe, dass Sie es hier hinzufügen müssen:

static bool MT4OrderModify( const int Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
  {
    MqlTradeRequest Request = {0};

               // Der Fall, dass ein Auftrag und eine Position mit demselben Ticket vorhanden sind, wird berücksichtigt
    bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ?
               (MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) :
               (MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request));

    if (Res)
    {
      Request.tp = TP;
      Request.sl = SL;
      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

      
      Res = MT4ORDERS::NewOrderSend(Request);
    }

    return(Res);
  }
Funktioniert immer noch nicht.
 
Maxim Dmitrievsky:

An der Börse kann er keinen Stop-Loss setzen, aber er eröffnet Geschäfte.

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

In der Tat ist dies fast ein Fehler der Entwickler. Fügen Sie diese Zeile hinzu

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // Die Angabe eines Tickets ist nicht ausreichend!
    }

    return(Res);
  }

Und meiner Meinung nach, in lib Sie nicht angeben, es für die Änderung.

Es ist alles richtig dort.
 
fxsaber:

Eigentlich ist es fast ein Entwicklerfehler. Fügen Sie diese Zeile hinzu

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // Die Angabe eines Tickets ist nicht ausreichend!
    }

    return(Res);
  }

Dort ist alles korrekt.
Ja, so funktioniert es, danke... und die Kommissionierung wird langsamer, ja... aber ich habe bisher keine anderen Bugs bemerkt.... Es ist eigentlich eine gute Lib, es macht Sinn, die Kommissionierung zu beschleunigen, denke ich.