Un point de vue intéressant sur l'OLP - page 3

 
Alexandr Andreev:

) peut aussi être fait en langage assembleur. La question est de savoir où c'est le plus facile.

Et ne me mettez pas d'un côté ou de l'autre..... Je ne suis pas très attaché à une chose ou à une autre.

Personne ne l'est. Je dis simplement qu'aujourd'hui les fonctionnalités OP sont disponibles dans les langages modernes OOP, ainsi que les fonctionnalités OOP dans les langages multi-paradigmes. En outre, de nombreuses caractéristiques de la PF présentées comme quelque chose de spécial et d'étonnant, en fait, sont les mêmes œufs de profil. Elles existent depuis longtemps, comme les fermetures en Pascal ou l'exécution différée d'une fonction en C, où un pointeur lui est transmis à la place du résultat. Ce qui dans l'exemple de l'article est donné dans n'importe quel langage ne fonctionne pratiquement nulle part sauf en js (sauf peut-être encore en Python).

 
fxsaber:

Je ne suis pas doué pour la programmation opérationnelle. Mais j'en utilise des choses primitives. Dans un passé récent, j'ai affiché un code très simple.


J'ai commencé à l'écrire dans FP, quand je ne comprenais pas ce que j'allais regarder.

Terminé par les éléments primitifs de la POO. J'ai probablement perdu mes compétences en matière de PF, mais ici la POO m'a semblé beaucoup plus simple et plus lisible.


Le code est très simple et court(description). Si vous l'écrivez en FP, il serait intéressant de comparer.

Le code est beaucoup plus petit que celui qui est souvent affiché ici, vous feriez mieux de l'afficher ici, il est bon à des fins pédagogiques

Je voudrais que Dmitry Fedoseyev écrive sa version, et ensuite Expert le trollera avec la sienne)
 
fxsaber:

Je ne suis pas doué pour la programmation opérationnelle. Mais j'en utilise des choses primitives. Dans un passé récent, j'ai affiché un code très simple.


J'ai commencé à l'écrire dans FP, quand je ne comprenais pas ce que j'allais regarder.

Terminé par les éléments primitifs de la POO. J'ai probablement perdu mes compétences en matière de PF, mais ici la POO m'a semblé beaucoup plus simple et plus lisible.


Le code est très simple et court(description). Si vous l'écrivez en FP, il serait intéressant de comparer.

Je jetterai un coup d'œil à la calculatrice dès que je serai libre. Et vous êtes un télépathe, j'allais demander dans un autre fil, mais je vais demander ici, par votre expérience de débogage en "mode réel" - y a-t-il des "trous" possibles dans les données T_OHLC_V dans MT4 et dans MT5 ?

Est-il possible qu'après n'importe quel relâchement (échec de la connexion, le terminal raccroche, le système raccroche), les nouvelles données seront initialement avec un certain saut, et ensuite le saut/"trou" sera écrit à l'intérieur du tableau ? Bien sûr, j'écrirai mon propre détecteur pour les indicateurs et les EA, mais peut-être avez-vous déjà l'expérience de tels tests et je n'ai pas à m'en soucier.

Et je n'ai aucune expérience de la PF (ou en ai, mais ne connaissait pas le nom), l'automatique où se référer ? ), je pense que je me contente du paradigme procédural.

zy. demande demande)

 
Aleksey Mavrin:

Article étrange. La POO ne diffère pas du style procédural pour le pire, parce qu'elle permet de faire tout en style procédural par défaut, et vice versa, sans que le code soit terriblement gonflé, c'est-à-dire que la POO est une "superstructure par-dessus", pas un style fondamentalement différent.

Si l'article porte vraiment sur le fonctionnel plutôt que sur le procédural (ce qui n'est pas si évident si on s'y attarde), alors pourquoi comparer des choses qui ont des usages complètement différents.

Topeka starter, êtes-vous vous-même en train d'écrire et de parler de laquelle ? fonctionnelle ou procédurale ?

L'avènement de la POO m'a vraiment effrayé avec les encapsulations et l'héritage et autres morphismes qui sont populaires pour commencer une introduction à la POO. Ils écriraient simplement ces données avec les fonctions dans un seul bloc - une classe. Mais je me suis ensuite habitué à cette mode - inventer une nouvelle terminologie à chaque fois. Quand j'ai besoin de la POO - pas de problème, mais comme elle est, à mon humble avis, deux fois plus vorace et plus lente que la variante procédurale, je me contente tout au plus de la procédurale.

Et la question s'est posée, car je voulais entendre des avis sur la FP et d'autres variantes, autres que OOP et procédurales, peut-être que quelqu'un a une expérience super positive. Et je suppose qu'il est sage d'utiliser un mélange stable dans le fonctionnement et de ne pas être un fanatique.

 
Peter, relier votre nom.
 
Fast235:

Le code est beaucoup plus petit que ceux qui sont souvent postés ici, vous feriez mieux de le déployer ici, à des fins éducatives.

C'est du gâteau.

#property strict
#property script_show_inputs

input double inPerformance = 100; // Сколько процентов дает система за период
input double inGift = 50;         // Награда управляющего в процентах (< 100)
input int inN = 12;               // Сколько расчетных периодов

struct BASE
{
  double Investor;
  double Manager;
  double Summary;

  // Если управляющий снимает деньги в конце каждого расчетного периода.
  void Set1( const double Performance, const double Gift, const int N )
  {
    this.Investor = ::MathPow(1 + (Performance - 1)* (1 - Gift), N);
    this.Manager = (this.Investor - 1) * Gift / (1 - Gift);
    this.Summary = this.Investor + this.Manager;

    return;
  }

  // Если ничего не делалось в расчетные периоды.
  void Set2( const double Performance, const double Gift, const int N )
  {
    this.Summary = ::MathPow(Performance, N);
    this.Manager = (this.Summary - 1) * Gift;
    this.Investor = this.Summary - this.Manager;

    return;
  }

  // Если управляющий снимает деньги в конце каждого расчетного периода и реинвестирует их.
  void Set3( const double Performance, const double Gift, const int N )
  {
    this.Summary = ::MathPow(Performance, N);
    this.Investor = ::MathPow(1 + (Performance - 1)* (1 - Gift), N);
    this.Manager = this.Summary - this.Investor;

    return;
  }

  void operator *=( const double Deposit = 1 )
  {
    this.Investor *= Deposit;
    this.Manager *= Deposit;
    this.Summary *= Deposit;

    return;
  }
#define  TOSTRING(A) #A + " = " + ::DoubleToString(A, 4) + " "
  string ToString( const bool FlagName = true ) const
  {
    return(FlagName ? TOSTRING(Investor) + TOSTRING(Manager) + TOSTRING(Summary)
                    : ::StringFormat("||%-12.4f||%-12.4f||%-12.4f||", this.Investor, this.Manager, this.Summary));
  }
#undef  TOSTRING

};

struct PAMM
{
  double Performance; // Доходность за расчетный период
  double Gift;        // Вознагражение управляющего.
  int N;              // Сколько расчетных периодов.

  BASE Base1; // Если управляющий снимает деньги в конце каждого расчетного периода.
  BASE Base2; // Если ничего не делалось в расчетные периоды.
  BASE Base3; // Если управляющий снимает деньги в конце каждого расчетного периода и реинвестирует их.

  void Set( const double dPerformance, const double dGift, const int iN )
  {
    this.Performance = dPerformance;
    this.Gift = dGift;
    this.N = iN;

    this.Base1.Set1(1 + this.Performance / 100, this.Gift / 100, this.N);
    this.Base2.Set2(1 + this.Performance / 100, this.Gift / 100, this.N);
    this.Base3.Set3(1 + this.Performance / 100, this.Gift / 100, this.N);
  }

  void operator *=( const double Deposit = 1 )
  {
    this.Base1 *= Deposit;
    this.Base2 *= Deposit;
    this.Base3 *= Deposit;

    return;
  }

  string GetDescription( void ) const
  {
    return("Доходность за расчетный период " + ::DoubleToString(this.Performance, 1) + "%\n" +
           "Вознагражение управляющего " + ::DoubleToString(this.Gift, 1) + "%\n" +
           "Количество расчетных периодов. " + (string)this.N);
  }

  string ToString( const bool FlagName = true, const bool FlagDescription = true ) const
  {
    return(FlagDescription ? "Данные для инвестиционного счета со следующими характеристиками:\n\n" + this.GetDescription() +
                             "\n\nКонечный результат для Инвестора, Управляющего и Суммарно:"
                             "\n\nЕсли управляющий снимает деньги в конце каждого расчетного периода (1).\n" + this.Base1.ToString(FlagName) +
                             "\n\nЕсли ничего не делалось в расчетные периоды (2).\n" + this.Base2.ToString(FlagName) +
                             "\n\nЕсли управляющий снимает деньги в конце каждого расчетного периода и реинвестирует их (3).\n" + this.Base3.ToString(FlagName)
                           : this.Base1.ToString(FlagName) + this.Base2.ToString(FlagName) + this.Base3.ToString(FlagName));
  }
};

void OnStart()
{
  PAMM Pamm;

  Pamm.Set(inPerformance, inGift, inN);

  Print(Pamm.ToString());

  string Str = Pamm.GetDescription() + "\n   ";

  for (int i = 1; i <= 3; i++ )
    Str += ::StringFormat("||%-12s||%-12s||%-12s||", "Investor" + (string)i, "Manager" + (string)i, "Summary" + (string)i);

  for (int i = 1; i <= inN; i++ )
  {
    Pamm.Set(inPerformance, inGift, i);

    Str += StringFormat("\n%-2d:", i) + Pamm.ToString(false, false);
  }

  Print(Str);
}

Techniquement, c'est probablement un OOP. Mais c'est sa partie la plus primitive. Cependant, je ne pourrais pas le faire sans lui. Probablement, mon cerveau est réarrangé en quelque chose d'autre et je le rive.

 

Peter ahahahah arrête.

Mon approche, le seau est un pot

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2018.12.05
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Maxim Dmitrievsky:

Peter ahahahah arrête.

Mon approche, le seau est un pot

ça fait un moment que je ne l'ai pas vu...

Il a vraiment changé de pseudonyme ?

 
Maxim Kuznetsov:

Je ne l'ai pas vu depuis un moment...

Il a vraiment changé de pseudonyme ?

La rumeur dit qu'il est parti pour construire une IA forte.

 
Maxim Dmitrievsky:

La rumeur dit qu'il est parti pour créer une IA forte.

Ne laissez rien se produire, ou COVID ne dormira pas...