Caractéristiques du langage mql5, subtilités et techniques - page 220

 
Nikolai Semko #:

signifie qu'en mode combat, vous devez désactiver toutes les absurdités graphiques sans minimisation. Laissez les graphiques être gelés si la fenêtre reste visible mais non active.
Et il est plus facile et mieux, me semble-t-il, de désactiver et de supprimer automatiquement tous les graphiques lorsque la souris est inactive, par exemple pendant 1 minute. Dès que la souris est active - les graphiques reprennent.

Ce n'est pas bon du tout. Ici, vous regardez le graphique pendant 2 minutes, et le graphique est mort il y a une minute. Quel en est le besoin alors ?

 
Vitaly Muzichenko #:

Ce n'est pas bon du tout. Vous regardez le graphique pendant deux minutes et le graphique est mort il y a une minute. C'est pour quoi alors ?

Bien sûr, il faut un interrupteur "Auto-hide" pour ce mode.

 
Nikolai Semko #:

signifie qu'en mode combat, tous les éléments graphiques doivent être désactivés sans minimisation.

Le kanvas du graphique lui-même est dessiné sans minimisation. L'expérience a permis de trouver le mode de fonctionnement du terminal, lorsque le VPS est chargé au minimum.

 

J'espère que j'écris dans le bon sujet.

1. Exécution d'un test sur plusieurs paires en même temps, multidevises

Question : Comment puis-je obtenir le résultat pour chaque paire ?

2Nous effectuons l'optimisation pour plusieurs paires en même temps

Question : comment obtenir un résultat pour chaque paire ?

---

Il y a quelque temps, environ 3 ans, ils ont promis d'inclure cela dans le testeur, mais jusqu'à présent il n'y a rien. Ou est-ce que je ne le trouve pas ?

 

Il existe un moyen légal d'empêcher le fonctionnement du Market Advisor ou du Signal Service, par exemple. Disons qu'il est impossible d'y accéder pour une raison ou une autre - VPS.

Cette méthode fonctionnera s'il existe une restriction sur le serveur de négociation. Il suffit de tout remplir avec des ordres en attente, mais avec prudence, sinon il sera impossible de fermer les positions ouvertes.


Peut-être que quelqu'un écrira un tel produit de marché d'urgence...

 

MQL5. MESSAGE BOX duplique les messages dans le journal "Experts". Veuillez m'indiquer comment le désactiver. ***

Merci !

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Caractéristiques du langage mql5, subtilités et astuces

fxsaber, 2017.09.22 20:43

POSITION_TIME_UPDATE ne concerne que la modification du lot d'une position. Par exemple, une clôture partielle d'une position sur tout type de compte ou un complément de compensation.

Les modifications des niveaux SL/TP n'affectent pas POSITION_TIME_UPDATE.

Pour paraphraser, POSITION_TIME_UPDATE est uniquement affecté par les modifications reflétées dans l'historique des transactions - trades. Les niveaux SL/TP ne s'appliquent pas à ces modifications, elles ne sont donc pas concernées.

Il peut y avoir des situations où POSITION_TIME_UPDATE_MSC == POSITION_TIME_UPDATE malgré les changements de taille de lot.

 
 
fxsaber #:
Pratique pour trier un tableau de structures


Application


Résultat

Bonjour et merci pour le partage !

Ce serait parfait si ça marchait. Cependant, lorsqu'il est collé dans un script .mq5 et exécuté, votre code génère malheureusement les erreurs suivantes :

  • les déclarations de modèles ne sont pas autorisées dans les classes locales ArraySortStruct.mq5 87 4
  • (après avoir légèrement modifié votre code) : les déclarations de modèles sont autorisées dans la portée globale, l'espace de noms ou la classe uniquement ArraySortStruct.mq5 90 4 )

Pourriez-vous réparer cela ? Pour vous, c'est probablement facile alors que je ne saurais pas par où commencer :-)

 
Bodolino #:

Bonjour et merci pour le partage !

Ce serait parfait si ça marchait. Cependant, lorsqu'il est collé dans un script .mq5 et exécuté, votre code génère malheureusement les erreurs suivantes :

  • les déclarations de modèles ne sont pas autorisées dans les classes locales ArraySortStruct.mq5 87 4
  • (après avoir légèrement modifié votre code) : les déclarations de modèles sont autorisées dans la portée globale, l'espace de noms ou la classe uniquement ArraySortStruct.mq5 90 4 )

Pourriez-vous réparer cela ? Pour vous, c'est probablement facile alors que je ne saurais pas par où commencer :-)

Je ne sais pas comment conserver la fonctionnalité (sous-zone et méthode) et la convivialité. Peut-être que celui-ci répondra à vos besoins.

// Сортировка массива структур и указателей на объекты 
по полю.
#define  ArraySortStruct_Define(TYPE, FIELD)                                      \
namespace TYPE##FIELD                                                            \
{                                                                                \
  class SORT                                                                     \
  {                                                                              \
  private:                                                                       \
    template <typename T>                                                        \
    static void Swap( T &Array[], const int i, const int j )                     \
    {                                                                            \
      const T Temp = Array[i];                                                   \
                                                                                 \
      Array[i] = Array[j];                                                       \
      Array[j] = Temp;                                                           \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static int Partition( T &Array[], const int Start, const int End )           \
    {                                                                            \
      int Marker = Start;                                                        \
                                                                                 \
      for (int i = Start; i <= End; i++)                                         \
        if (Array[i].##FIELD <= Array[End].##FIELD)                              \
        {                                                                        \
          SORT::Swap(Array, i, Marker);                                          \
                                                                                 \
          Marker++;                                                              \
        }                                                                        \
                                                                                 \
       return(Marker - 1);                                                       \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static void QuickSort( T &Array[], const int Start, const int End )          \
    {                                                                            \
      if (Start < End)                                                           \
      {                                                                          \
        const int Pivot = Partition(Array, Start, End);                          \
                                                                                 \
        SORT::QuickSort(Array, Start, Pivot - 1);                                \
        SORT::QuickSort(Array, Pivot + 1, End);                                  \
      }                                                                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
  public:                                                                        \
    template <typename T>                                                        \
    static void Sort( T &Array[], int Count = WHOLE_ARRAY, const int Start = 0 ) \
    {                                                                            \
      if (Count == WHOLE_ARRAY)                                                  \
        Count = ::ArraySize(Array);                                              \
                                                                                 \
      SORT::QuickSort(Array, Start, Start + Count - 1);                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
  };                                                                             \
}

#define  ArraySortStruct(TYPE, ARRAY, FIELD) TYPE##FIELD::SORT::Sort(ARRAY)


Application.

ArraySortStruct_Define(MqlRates, open)
ArraySortStruct_Define(MqlRates, high)
ArraySortStruct_Define(MqlRates, time)

void OnStart()
{
  MqlRates Rates[];
  
  CopyRates(_Symbol, PERIOD_CURRENT, 0, 5, Rates); // Взяли бары
  
  Print("\nБары без сортировки - как получили.");
  ArrayPrint(Rates);
  
  Print("\nСортируем по open-цене.");
  ArraySortStruct(MqlRates, Rates, open);
  ArrayPrint(Rates);

  Print("\nСортируем по high-цене.");
  ArraySortStruct(MqlRates, Rates, high);
  ArrayPrint(Rates);

  Print("\nСортируем по времени.");
  ArraySortStruct(MqlRates, Rates, time);
  ArrayPrint(Rates);
}