FORTS : Pour aider les débutants - page 4

 
Sergey Chalyshev:
Qu'est-ce que ça a à voir avec l'Ava ? Il ne peut pas écrire sur le forum, il est banni pour toujours.
OK, je ne savais pas qu'il y avait une interdiction "partielle". C'est une honte.
 
Sergey Chalyshev:
Qu'est-ce que ça a à voir avec l'Ava ? Il ne peut pas écrire sur le forum, il est banni pour toujours.

Non, il a été débanalisé.

Les utilisateurs interdits sont écrits en barré.

 
Andrey Khatimlianskii:

Non, il a été débanalisé.

Les utilisateurs interdits sont écrits en barré.

C'est ce que je pensais aussi, vous feriez mieux de demander aux modérateurs, ils en sont sûrs.
 
Mikhail Filimonov:

Caractéristiques :

Réception de la confirmation (TRADE_RETCODE_PLACED ) dans le code de retour et le ticket de commande de OrderSend(),

et pour la fonction OrderSendAsync() dans OnTradeTransaction(), cela ne veut pas du tout dire que

l'ordre est réellement EXPOSÉ à un échange.

Une vérification supplémentaire du statut de la commande est donc nécessaire (comme pour les autres actions sur la commande).

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

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

Il est indiqué que le ticket est rempli uniquement lorsque le type detransaction estTRADE_ACTION_PENDING.

Si l'opération est TRADE_ACTION_DEAL, le ticket de commande sera-t-il renvoyé dans result.order ?

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

Quand l'erreur 10013 se produit-elle en réponse à OrderCheck()?

Voici le code de mon script :

   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);

Voici le journal que je reçois :

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:

Quand l'erreur 10013 se produit-elle en réponse à OrderCheck()?

Voici le code de mon script :

Voici le journal que j'obtiens :

Réussi quand on a ajouté m_request.expiration =0, bien que l'aide indique :

Exécution de l'échange.

Ordre de transaction pour ouvrir une position en mode d'exécution d'échange. Il faut spécifier 5 champs :

  • action
  • symbole
  • volume
  • type
  • type_filling

Vous pouvez également spécifier des champs de magie et de commentaires.

 

Mais la bizarrerie ne s'arrête pas là.

1 lot Acheter :

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

Marge pour la transaction 211242.25, la même que la marge actuelle - tout est correct car la position courte actuelle pour RTS-6.16 est de 2 contrats. Marge initiale pour 1 contrat RTS-6.16 17388.75

J'ajoute un lot supplémentaire.

2 lots Achetez :

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

Tout est ok, comme la position actuelle est 2 Vendre, la marge reste inchangée.

Maintenant 3 contrats d'achat :

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

Valeur de la marge à l'instant 246019.75. Comment cela se fait-il ? Pour 1 contrat seulement 17k. Qu'en est-il des autres valeurs (dans les cas précédents également) ? D'où viennent l'équité et l'équilibre ? Je n'ai même pas ce montant sur mon compte. margin_free est également erroné, il ne s'agit pas du profit.

Quelqu'un peut-il vérifier pour moi, peut-être que je fais quelque chose de mal ?


 
igorbel:

Réussi quand j'ai ajouté m_request.expiration =0, même si c'est indiqué dans l'aide :

Toujours initialiser toutes les variables et structures avec des zéros immédiatement après la déclaration. Vous aviez des déchets dans le champ d'expiration, donc vous avez eu une erreur.

MqlTradeRequest   m_request;         
MqlTradeCheckResult m_check_result; 

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

Toujours initialiser toutes les variables et structures avec des zéros immédiatement après la déclaration. Vous aviez des déchets dans le champ d'expiration, c'est pourquoi vous avez eu l'erreur.

Merci. Mais j'ai abandonné OrderCheck(), c'est une fonction presque inutile sur FORTS au moins. Tout d'abord, elle donne des résultats peu clairs. Mais même lorsque les valeurs sont plus ou moins correctes, il existe toujours une probabilité que l'ordre soit rejeté à la bourse. C'est pourquoi nous devons examiner le statut de la commandeORDER_STATE_REJECTED et voir également le commentaire. Nous devons alors diminuer le volume de la commande et l'envoyer à nouveau. Bien sûr, tout cela ne rend pas le commerce plus rapide, mais que pouvons-nous faire ?