FORTS: Um Anfängern zu helfen - Seite 4

 
Sergey Chalyshev:
Was hat das mit der Ava zu tun? Er kann nicht im Forum schreiben, er ist dauerhaft gesperrt.
OK, ich wusste nicht, dass es ein "teilweises" Verbot gibt. Das ist eine Schande.
 
Sergey Chalyshev:
Was hat das mit der Ava zu tun? Er kann nicht im Forum schreiben, er ist für immer gesperrt.

Nein, er wurde aus der Verbannung geholt.

Die gesperrten Benutzer sind durchgestrichen geschrieben.

 
Andrey Khatimlianskii:

Nein, er wurde aus der Verbannung geholt.

Gesperrte Benutzer werden durchgestrichen geschrieben.

Das dachte ich auch, fragen Sie lieber die Moderatoren, die wissen es sicher.
 
Mikhail Filimonov:

Merkmale:

Empfangsbestätigung (TRADE_RETCODE_PLACED ) im OrderSend()-Returncode und Auftragsticket,

und für die Funktion OrderSendAsync() in OnTradeTransaction() bedeutet dies keineswegs, dass

der Auftrag ist wirklich zum Umtausch AUSGEGEBEN.

Daher ist eine zusätzliche Prüfung des Auftragsstatus erforderlich (genau wie bei anderen Aktionen auf dem Auftrag).

if ( OrderSend( request, result ) )
{
  if ( result.retcode == TRADE_RETCODE_PLACED )
  { 
    ticket = result.order;
  }
}

https://www.mql5.com/ru/docs/constants/structures/mqltraderesult

Sie besagt, dass das Ticket nur gefüllt wird, wenn derHandelstypTRADE_ACTION_PENDING ist.

Wenn die Operation TRADE_ACTION_DEAL ist, wird dann das Auftragsticket in result.order zurückgegeben?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ja.
 
Sergei Vladimirov:
Ja.

Wann tritt der Fehler 10013 als Antwort auf OrderCheck() auf?

Hier ist der Code meines Skripts:

   MqlTradeRequest   m_request;         
   MqlTradeCheckResult m_check_result;  
   
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =Symbol();
   m_request.magic       =001;
   m_request.volume      =1.00;
   m_request.type        =ORDER_TYPE_SELL;
   m_request.type_filling=ORDER_FILLING_RETURN;
   if(!OrderCheck(m_request,m_check_result))
      Print(__FUNCTION__+": order check failed.");
   else
      Print(__FUNCTION__+": order check passed.");
   Print(__FUNCTION__+": symbol=",m_request.symbol,", operation=",m_request.type,", volume=",m_request.volume);
   Print(__FUNCTION__+": retcode=",m_check_result.retcode,", balance=",m_check_result.balance,", equity=",m_check_result.equity,", profit=",m_check_result.profit,
            ", margin=",m_check_result.margin,", margin_free=",m_check_result.margin_free,", margin_level=",m_check_result.margin_level,
            ", comment=",m_check_result.comment);

Hier ist das Protokoll, das ich erhalte:

Check (RTS-6.16,M30)    OnStart: retcode=10013, balance=0.0, equity=0.0, profit=2.121995790965272 e-314, margin=0.0, margin_free=0.0, margin_level=0.0, comment=Invalid request
Check (RTS-6.16,M30)    OnStart: symbol=RTS-6.16, operation=1, volume=1.0
Check (RTS-6.16,M30)    OnStart: order check failed.
 
igorbel:

Wann tritt der Fehler 10013 als Antwort auf OrderCheck() auf?

Hier ist der Code meines Skripts:

Hier ist das Protokoll, das ich erhalte:

Bestanden, wenn hinzugefügt m_request.expiration =0, obwohl die Hilfe sagt:

Exchange Execution.

Handelsauftrag zur Eröffnung einer Position im Börsenausführungsmodus. Es müssen 5 Felder angegeben werden:

  • Aktion
  • Symbol
  • Band
  • Typ
  • Typ_Füllung

Sie können auch magische und Kommentarfelder angeben.

 

Doch damit nicht genug der Merkwürdigkeiten.

1 Los Kaufen:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=530863.24, equity=538989.4399999999, profit=2.121995790965272e-314, margin=211242.25, margin_free=319620.99, margin_level=255.1522907941001, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=1.0

Margin für die Transaktion 211242,25, die gleiche wie die aktuelle Margin - alles korrekt, da die aktuelle Short-Position für RTS-6.16 2 Kontrakte beträgt. Ersteinschuss für 1 Kontrakt RTS-6.16 17388.75

Ich füge eine weitere Partie hinzu.

2 Lose Kaufen:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=659212.76, profit=2.121995790965272e-314, margin=211242.25, margin_free=440186.19, margin_level=312.0648260468727, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=2.0

Alles ok, da die aktuelle Position 2 Sell ist, bleibt die Marge unverändert.

Jetzt 3 Kaufverträge:

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=658739.4, profit=2.121995790965272e-314, margin=246019.75, margin_free=405408.69, margin_level=267.7587470111648, comment=Done

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=3.0

Margenwert auf einmal 246019,75. Wie kommt das? Für 1 Vertrag nur 17k. Was ist mit den anderen Werten (auch in den vorherigen Fällen)? Woher kommen das Eigenkapital und das Gleichgewicht? Ich habe nicht einmal so viel auf meinem Konto. margin_free ist auch falsch, nicht über den Gewinn zu sprechen.

Kann jemand das für mich überprüfen, vielleicht mache ich etwas falsch?


 
igorbel:

Bestanden, als ich m_request.expiration =0 hinzufügte, obwohl es so in der Hilfe steht:

Initialisieren Sie immer alle Variablen und Strukturen mit Nullen unmittelbar nach der Deklaration. Sie haben im Feld für die Gültigkeitsdauer irgendeinen Unsinn eingegeben und deshalb einen Fehler erhalten.

MqlTradeRequest   m_request;         
MqlTradeCheckResult m_check_result; 

ZeroMemory(m_request);
ZeroMemory(m_check_result);
// теперь заполняйте нужные поля
 
Sergei Vladimirov:

Initialisieren Sie immer alle Variablen und Strukturen mit Nullen unmittelbar nach der Deklaration. Sie haben im Feld für die Gültigkeitsdauer irgendeinen Unsinn eingegeben, deshalb ist die Fehlermeldung aufgetreten.

Ich danke Ihnen. Aber ich habe OrderCheck() aufgegeben, es ist fast nutzlos Funktion auf FORTS zumindest. Zunächst einmal sind die Ergebnisse unklar. Aber selbst wenn die Werte mehr oder weniger korrekt sind, besteht immer eine Wahrscheinlichkeit, dass der Auftrag an der Börse abgelehnt wird. Deshalb müssen wir uns den AuftragsstatusORDER_STATE_REJECTED ansehen und auch den Kommentar beachten. Dann müssen wir das Volumen der Bestellung verringern und sie erneut versenden. All dies macht den Handel natürlich nicht schneller, aber was können wir tun?