Questions des débutants MQL5 MT5 MetaTrader 5 - page 679

 

Je suis en train d'écrire un robot, en connectant Ctrade, d'abord je veux commencer avec une logique où il fera un achat au prix du marché au début de chaque heure, après une demi-heure il vendra tout au nouveau prix du marché. Lorsque je le teste dans le testeur, je reçois l'erreur Invalid order type.

Mon instrument est SBER, mon client est Otkritie. Mon ordre est en mode manuel, mon ordre n'est pas passé en compte réel ou démo.

Quelle pourrait être l'erreur ? Est-il vrai que la bourse n'est pas autorisée à négocier au prix du marché ?

 
post_ek:

Je suis en train d'écrire un robot, en connectant Ctrade, d'abord je veux utiliser la logique, selon laquelle au début de chaque heure il fera un achat au prix du marché, après une demi-heure il vendra tout (Sell) à un nouveau prix du marché. Lorsque je le teste dans le testeur, je reçois l'erreur Invalid order type.

Mon instrument est SBER, mon client est Otkritie. Mon ordre est en mode manuel, mon ordre n'est pas passé en compte réel ou démo.

Quelle pourrait être l'erreur ? Est-il vrai que la bourse n'est pas autorisée à négocier au prix du marché ?

Je n'arrive pas à comprendre ce que vous avez écrit sans votre code et pourquoi cela ne fonctionne pas pour vous.
 
Bonjour, si l'EA fonctionne sur un ordinateur portable et qu'il est en mode hibernation, l'EA branché fonctionnera-t-il dans ce cas ?
 
Movlat Baghiyev:
Bonjour, si l'EA fonctionne sur un ordinateur portable et que celui-ci est passé en mode hibernation, l'EA connecté fonctionnera-t-il dans ce cas ?
Et vous devrez inclure l'imprimante dans le journal de toutes les valeurs et vous le découvrirez. S'il ne s'imprime pas, c'est qu'il ne fonctionne pas.
 
Vitalie Postolache:
Et vous inclurez l'impression dans le journal de toutes les valeurs et de trouver. Si ça n'imprime pas, ça ne marche pas.
C'est clair ... J'ai pensé que quelqu'un pourrait partager son expérience avec un débutant.
 
Movlat Baghiyev:
Bonjour, si l'EA fonctionne sur un ordinateur portable et qu'il est passé en mode veille, l'EA connecté fonctionnera-t-il dans ce cas ?

Le mode hibernation est généralement celui qui éteint le disque,

J'ai récemment installé un serveur, et ce n'est qu'au troisième jour que j'ai vu que l'ordinateur était endormi, c'est-à-dire qu'il ne fonctionnait pas, c'est-à-dire que toutes les EA ne fonctionnaient pas,

J'ai désactivé le mode hibernation et tout va bien.

 
Movlat Baghiyev:
C'est clair... Je me demandais si quelqu'un pouvait partager son expérience avec un débutant.
D'après mon expérience, peu de choses fonctionnent en mode hibernation, seulement quelques services système.
 
Movlat Baghiyev:
Bonjour, si le conseiller fonctionne sur un ordinateur portable et qu'il est en mode hibernation, le conseiller connecté fonctionnera-t-il dans ce cas ?

Non. Ça ne marchera pas. Dans les paramètres d'alimentation, réglez l'alimentation électrique :

NON au mode veille !

 
Sergey Gritsay:
Sans votre code, il est difficile de comprendre ce que vous avez écrit et pourquoi cela ne fonctionne pas.
//+------------------------------------------------------------------+
//|                                                         Gear.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade/Trade.mqh>
CTrade  trade;

bool TimeFlag, FLG;
int TimeScale=50, TimeInMemory, TimeNow;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  //---Блок получения информации с биржи    
  MqlTick oCurrentTick;
  SymbolInfoTick(Symbol(), oCurrentTick);
//---Блок определения начала нового временного интервала
   TimeFlag=false;
   datetime tm=TimeCurrent();
   MqlDateTime stm;
   TimeToStruct(tm,stm);
   if(MathMod(StringToInteger((string)stm.min),TimeScale)==0)
     {
      TimeNow=StringToInteger((string)stm.min);
     }
   if(TimeNow != TimeInMemory)
     {
      TimeInMemory=TimeNow;
      TimeFlag=true;
      //Print(_Symbol);
     }
    
     if(TimeFlag)
       {
       if(FLG)
         {
   if(!trade.Buy(1,_Symbol))
     {
      //--- сообщим о неудаче
      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }
         FLG=false;
         }
       else
         {
         trade.Sell(1);
         FLG=true;
         }
       }
  }
//+------------------------------------------------------------------+
 
post_ek:

Ce n'est pas la façon de faire :

bool TimeFlag,FLG;
int TimeScale=50,TimeInMemory,TimeNow;

ou plutôt, après une telle déclaration, vous devez initialiser(attribuer des valeurs à) explicitement ces variables dans OnInit().

La méthode Sell doit également être entourée de contrôles, tels que

trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");

Et il peut aussi y avoir un hic : le matin, à l'ouverture du marché, la vente aux enchères ne commence pas immédiatement, pas dès la première seconde - c'est là que les erreurs sont possibles.