MetaTrader 5 sur un compte réel - page 2

 
IgorM:

Je voulais dire le prix, pas le SL ou le TP... Et à quel prix le serveur doit-il ouvrir un ordre au marché pour moi, au prix qu'il m'a donné ou au prix que je voulais ?

pourquoi ne devrais-je pas envoyer au serveur le prix avec un spread positif ?)

WZZ : USDJPY : 82.49 ; 82.510000000001 ; 82.49 - peut-être 82.55 d'un coup ?

voici un exemple d'envoi d'une requête avec des prix normalisés

//+------------------------------------------------------------------+
//| Функция открытия ордеров                                         |
//+------------------------------------------------------------------+
void OpenOpders(string sym,ENUM_ORDER_TYPE type)
  {
   int n=0;
   bool res=true;
   while(res)
     {
      n++;
      Alert(n," - Попытка открыть ордер: ",TypeToStr(type)," на  ",sym,", Лот - ",Lots);
      double Bid=SymbolInfoDouble(sym,SYMBOL_BID);
      double Ask=SymbolInfoDouble(sym,SYMBOL_ASK);
      int digit=(int)SymbolInfoInteger(sym,SYMBOL_DIGITS);
      double price=0.0;

      if(type==ORDER_TYPE_BUY)price=NormalizeDouble(Ask,digit);
      else if(type==ORDER_TYPE_SELL)price=NormalizeDouble(Bid,digit);

      request.action       = TRADE_ACTION_DEAL;
      request.symbol       = sym;
      request.volume       = Lots;
      request.price        = price;
      request.deviation    = Slip;
      request.type         = type;
      request.type_filling = ORDER_FILLING_AON;

      OrderSend(request,result);

      switch(Fun_Error(result.retcode))
        {
         case 0:res=false;break;
         case 1:res=true;break;
         case 2:res=false;break;
        }
     }
  }
//+------------------------------------------------------------------+
//| Функция обработки ошибок                                         |
//+------------------------------------------------------------------+
int Fun_Error(int Error)
  {
   switch(Error)
     {
      case 10004: Alert("Реквота");return(1);
      case 10006: Alert("Запрос отвергнут");Sleep(3000);return(1);
      case 10007: Alert("Запрос отменен трейдером");Work=false;return(0);
      case 10008: Alert("Ордер размещен");return(2);
      case 10009: Alert("Заявка выполнена");return(2);
      case 10010: Alert("Заявка выполнена частично");return(2);
      case 10011: Alert("Ошибка обработки запроса");return(1);
      case 10012: Alert("Запрос отменен по истечению времени");return(1);
      case 10013: Alert("Неправильный запрос");Work=false;return(0);
      case 10014: Alert("Неправильный объем в запросе");Work=false;return(0);
      case 10015: Alert("Неправильная цена в запросе");Work=false;return(0);
      case 10016: Alert("Неправильные стопы в запросе");Work=false;return(0);
      case 10017: Alert("Торговля запрещена");Work=false;return(0);
      case 10018: Alert("Рынок закрыт");Work=false;return(0);
      case 10019: Alert("Нет достаточных денежных средств для выполнения запроса");Work=false;return(0);
      case 10020: Alert("Цены изменились");return(1);
      case 10021: Alert("Отсутствуют котировки для обработки запроса");Sleep(3000);return(1);
      case 10022: Alert("Неверная дата истечения ордера в запросе");Work=false;return(0);
      case 10023: Alert("Состояние ордера изменилось");return(2);
      case 10024: Alert("Слишком частые запросы");Work=false;return(0);
      case 10025: Alert("В запросе нет изменений");Sleep(3000);return(1);
      case 10026: Alert("Автотрейдинг запрещен сервером");Work=false;return(0);
      case 10027: Alert("Автотрейдинг запрещен клиентским терминалом");Work=false;return(0);
      case 10028: Alert("Запрос заблокирован для обработки");return(2);
      case 10029: Alert("Ордер или позиция заморожены");return(2);
      case 10030: Alert("Указан неподдерживаемый тип исполнения ордера по остатку");Work=false;return(0);
      case 10031: Alert("Нет соединения с торговым сервером");Sleep(3000);return(1);
      case 10032: Alert("Операция разрешена только для реальных счетов");Work=false;return(0);
      case 10033: Alert("Достигнут лимит на количество отложенных ордеров");return(2);
      case 10034: Alert("Достигнут лимит на объем ордеров и позиций для данного символа");return(2);
      default:    Alert("Ошибка № - ",Error);Work=false;return(0);
     }
  }
//+------------------------------------------------------------------+
//| Функция преоброзования типа ордера в строку                      |
//+------------------------------------------------------------------+
string TypeToStr(ENUM_ORDER_TYPE type)
  {
   switch(type)
     {
      case  ORDER_TYPE_BUY:  return("BUY");
      case  ORDER_TYPE_SELL: return("SELL");
     }
   return("");
  }
 
Renat:
C'est-à-dire que la thèse de "l'humidité de la plate-forme" n'a été confirmée en aucune façon.

Je n'ai jamais mentionné l'humidité de la plate-forme - relisez mes messages.

J'ai fait mes commentaires sur le sujet - si vous pensez qu'ils ne sont pas fondés, laissez-les, mais je pense que votre société vend des logiciels pour les courtiers sur la plate-forme MT5.

sergey1294:

voici un exemple d'envoi d'une requête avec des prix normalisés

merci mais j'ai une idée légèrement différente de la négociation et du prix, je veux ouvrir un ordre à essayer de normaliser 82.47,82.45999999999999,82.47.

Je ne suis pas sûr que le serveur ait "inventé" un prix de 82,46 car un tel prix n'a pas été enregistré dans ses journaux et si ce n'est pas le prix du marché - je n'en ai pas besoin - laissez-le rester sur le serveur et ne pas aller dans mes journaux avec des erreurs.

 
IgorM:

Je n'ai jamais mentionné l'humidité de la plate-forme - relisez mes messages.

j'ai fait mes commentaires sur le sujet - si vous pensez qu'ils ne sont pas fondés, qu'il en soit ainsi, mais je pense que votre société vend des logiciels pour les courtiers sur la plate-forme mt5.

sps mais j'ai une idée légèrement différente du trading et du prix auquel je veux ouvrir un ordre, essayez de normaliser 82.47,82.45999999999999,82.47

Je ne suis pas sûr que le serveur ait "inventé" un prix de 82.46 car un tel prix n'était pas dans ses logs et si le prix n'est pas du marché - je n'en ai pas besoin - qu'il reste sur le serveur et n'aille pas dans mes logs avec des erreurs.

Malheureusement, vous ne connaissez pas l'arithmétique de base des nombres réels et leur représentation dans les ordinateurs. C'est là l'origine de votre incompréhension des prix "non normalisés".

82.4599999999(9) est la représentation double de 82.46

 
IgorM:

Je n'ai jamais mentionné l'humidité de la plate-forme - relisez mes messages.

j'ai fait mes commentaires sur le sujet - si vous pensez qu'ils ne sont pas fondés, qu'il en soit ainsi, mais je pense que votre société vend des logiciels pour les courtiers sur la plate-forme mt5.

sps mais j'ai une idée légèrement différente du trading et du prix auquel je veux ouvrir un ordre, essayez de normaliser 82.47,82.45999999999999,82.47

Je ne suis pas sûr que le serveur "invente" un prix de 82,46 car il n'y a pas de prix de ce type dans ses journaux et si ce n'est pas le prix du marché, je n'en ai pas besoin - qu'il reste sur le serveur et ne parte pas avec des erreurs dans mes journaux.

Il n'y aura alors aucun problème d'exécution, mais si le prix change lorsque vous envoyez la demande, aucune normalisation ne sera utile, vous obtiendrez une requote et vous devrez envoyer une nouvelle demande pour le nouveau prix.
 
Renat:

Malheureusement, vous ne connaissez pas l'arithmétique de base des nombres réels et leur représentation dans les ordinateurs. C'est là l'origine de votre incompréhension des prix "non normalisés".

82.45999999(9) est la représentation double de 82.46

OK, je vais trouver le temps de relire du matériel probablement déjà oublié, c'est-à-dire qu'un tel prix (82.45999999(9)) sera accepté par le serveur de trading pour ouvrir un ordre de marché ?

sergey1294 Veuillez prêter attention à ce que les développeurs vous ont donné comme exemples et classes prêts à l'emploi, au moins la classe CTrade fournie par les développeurs n'a pas les fonctions NormalizeDouble(), ainsi que les exemples dans la référence MQL5 / Trading Functions / OrderSend

Je ne vais pas inventer et écrire initialement les mauvais programmes si j'ai lu les exemples dans la source originale, dans la référence MT4 l'exemple OrderSend() ne contient pas non plus de normalisation de prix.

 
IgorM:

OK, je vais trouver le temps de relire ce que j'ai probablement déjà oublié, c'est-à-dire qu'un tel prix (82.45999999(9)) sera accepté par le serveur de trading pour ouvrir un ordre de marché ?

Oui, s'il s'agit du prix correct/existant dans le flux de tics.


sergey1294 Veuillez prêter attention à ce que les développeurs vous ont donné comme exemples et classes prêts à l'emploi, au moins la classe CTrade fournie par les développeurs n'a pas les fonctions NormalizeDouble(), ainsi que les exemples dans la référence MQL5 / Trading Functions / OrderSend

Je ne vais pas inventer et écrire initialement les mauvais programmes si j'ai lu des exemples concrets dans la source.

Si vous utilisez l'offre et la demande normales pour effectuer des transactions, elles sont toujours normalisées. Les prix calculés (par exemple les stops) doivent être normalisés avant d'envoyer un ordre de transaction.

Les méthodes CTrade standard ne normalisent pas de force les prix d'entrée des ordres, parce que c'est catégoriquement inacceptable - vous ne pouvez pas substituer les prix déclarés au-dessus du niveau.

 
Renat:
Oui, tant qu'il s'agit du prix correct/existant dans le flux de tics.


Si vous utilisez l'offre et la demande ordinaires pour les transactions, elles sont toujours normalisées. Mais les prix calculés (par exemple les stops) doivent déjà être normalisés par vous-même avant d'envoyer un ordre de transaction.

Les méthodes standard de CTrade ne normalisent pas les prix des offres entrantes forcées, car cela est catégoriquement inacceptable - vous ne pouvez pas substituer des prix indiqués à un niveau supérieur.

cp ! ne vous gênez pas pour le mentionner plusieurs fois dans le manuel MT5, afin qu'il n'y ait pas de malentendu et que vous puissiez immédiatement envoyer lire l'aide :)

ZS : Je suis au courant de SL et TR, mais je ne me souviens pas de l'avoir lu dans l'aide ou de l'avoir compris sur le forum.

 
IgorM:

cp ! si vous aviez l'amabilité de mentionner ceci plusieurs fois dans le manuel MT5 afin qu'il n'y ait pas de malentendu et qu'on vous envoie directement lire le manuel :)

Oui, nous mettons constamment à jour la documentation et ajoutons des clarifications.
 
IgorM:

je lis ce forum tout le temps et très souvent je suis étonné par vos messages profonds et informatifs ;)

Pour ce qui est du sujet, je doute que les cotations sur les comptes démo diffèrent de microreal, mais les comptes démo ont très souvent des prix non normalisés dans les sociétés mentionnées par Admin.

En ce qui concerne le goût et la couleur, c'est une sagesse populaire - le prix non normalisé interfère avec le travail de quelqu'un, bien que personnellement je ne pense pas que ce soit un gros problème (comme j'ai utilisé les ordres en attente il y a longtemps, et de tels prix ne sont pas un gros problème pour moi). Mais le problème pour moi, c'est le refus de faire fonctionner OnTimer() dans le testeur ou d'autres choses similaires.

Mais même avec ces données, lorsque je choisis un terminal pour trader sur un compte en cents (avec un dépôt de 200 $), je fais personnellement mon choix en faveur de MT5.

AVEC TOUS SES INCONVÉNIENTS ACTUELS !

 
Interesting:

Certaines personnes sont gênées par le "prix non normalisé", mais personnellement je ne pense pas que ce soit un gros problème (parce que j'utilise les délais depuis longtemps, et ces prix ne sont pas un gros problème pour moi). Mais le problème pour moi est le refus de faire fonctionner OnTimer() dans le testeur ou d'autres choses similaires.

Cette erreur est une conséquence de l'échec de l'optimisation et a été corrigée dans la nouvelle 358e version.
Raison: