Interessante assumir a OLP - página 3

 
Alexandr Andreev:

) também pode ser feito em linguagem de montagem. A questão é onde é mais fácil.

E não me ponha de lado ou de lado.... Eu não sou um pauzinho para uma coisa ou outra.

Ninguém está. Estou apenas dizendo que hoje em dia os recursos OP estão disponíveis nos idiomas OOP modernos, assim como os recursos OOP em idiomas multiparadigm. Além disso, muitas características do PF, apresentadas como algo especial e surpreendente, na verdade, são os mesmos ovos em perfil. Eles existem há muito tempo - como os fechamentos em Pascal ou a execução atrasada de uma função em C, onde um ponteiro é passado a ele em vez do resultado. O que no exemplo do artigo é dado em qualquer idioma não funciona em quase nenhum lugar exceto js (exceto talvez em Python ainda).

 
fxsaber:

Eu não sou bom no OOP. Mas eu utilizo coisas primitivas dela. Do passado recente, eu postei um código muito simples.


Comecei a escrevê-lo na FP, quando não entendia o que acabaria olhando.

Acabado através dos elementos primitivos do OOP. Provavelmente perdeu as habilidades de PF, mas aqui o OOP parecia muito mais simples e mais legível.


O código é muito simples e curto(descrição). Se você escrevê-lo em FP, seria interessante comparar.

O código é muito menor do que aquele postado frequentemente aqui, é melhor exibi-lo aqui, é bom para fins educacionais

Eu gostaria que Dmitry Fedoseyev escrevesse sua versão, e então o Expert o levará com sua)
 
fxsaber:

Eu não sou bom no OOP. Mas eu utilizo coisas primitivas dela. Do passado recente, eu postei um código muito simples.


Comecei a escrevê-lo na FP, quando não entendia o que acabaria olhando.

Acabado através dos elementos primitivos do OOP. Provavelmente perdeu as habilidades de PF, mas aqui o OOP parecia muito mais simples e mais legível.


O código é muito simples e curto(descrição). Se você escrevê-lo em FP, seria interessante comparar.

Darei uma olhada na calculadora assim que eu ficar livre. E você é um telepata, eu ia perguntar em outro tópico, mas vou perguntar aqui, pela sua experiência de depuração em "modo real" - há "buracos" possíveis nos dados T_OHLC_V no MT4 e no MT5?

Isso significa que, após qualquer atraso (interrupção da conexão, o terminal trava, o sistema trava), os novos dados serão recebidos com uma lacuna no início, e então a lacuna/"buraco" será inserida em uma matriz? É claro que escreverei meu próprio detector para indicadores e EAs, mas talvez você já tenha tal experiência em testes e eu não tenha que me preocupar com isso.

E não tenho experiência de FP (ou tenho, mas não sabia o nome), o automático para onde me referir? ), acho que estou me contentando com o paradigma processual.

zy. solicitação solicitação)

 
Aleksey Mavrin:

Artigo estranho. O OOP não difere do estilo de procedimento para pior, porque nele você pode fazer tudo em estilo de procedimento por padrão, e vice-versa sem um terrível inchaço de código, ou seja, o OOP é uma "superestrutura sobre", não um estilo fundamentalmente diferente.

Se o artigo é realmente sobre funcionalidade e não sobre procedimento (o que não é tão óbvio se você se meter nele), então por que comparar coisas que têm usos completamente diferentes.

Topeka starter, você mesmo está escrevendo e agora falando sobre qual deles? funcional ou processual?

Com o advento da OOP realmente me assustou com encapsulamentos e heranças e outros morfismos que são populares para iniciar uma introdução à OOP. Eles simplesmente escreveriam esses dados junto com as funções em um bloco - uma classe. Mas depois me acostumei a esta moda - inventar novas terminologias cada vez. Quando preciso do OOP - não há problema, mas como ele, na minha humilde opinião, é duas vezes mais voraz e lento do que a variante processual, eu faço com a processual, no máximo.

E a questão surgiu, porque eu queria ouvir opiniões sobre PF e outras variantes, além de OOP e procedimentos, talvez alguém tenha uma experiência super positiva. E suponho que é sábio usar alguma mistura estável em funcionamento e não ser um fanático.

 
Peter, re-ligue seu nome.
 
Fast235:

O código é muito menor do que os que são postados frequentemente aqui, é melhor implantá-lo aqui, para fins educacionais.

É canja.

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

Tecnicamente, é provavelmente um OOP. Mas é sua parte mais primitiva. No entanto, não poderia fazê-lo sem ele. Provavelmente, uma reordenação cerebral burra e rebitadora de tais coisas.

 

Peter ahahah pare com isso.

Minha abordagem, o balde é uma panela

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

Peter ahahah pare com isso.

Minha abordagem, o balde é uma panela

já faz um tempo que não o vejo...

Será que ele realmente ficou com um nome de tela diferente?

 
Maxim Kuznetsov:

Já não o vejo há algum tempo...

ele realmente ficou com um nome de tela diferente?

correm rumores de que ele foi construir uma forte IA

 
Maxim Dmitrievsky:

corre o boato de que ele foi criar uma forte IA

Só não deixe que nada aconteça, ou a COVID não vai dormir...
Razão: