对巴解组织的看法很有意思 - 页 3

 
Alexandr Andreev:

)也可以用汇编语言来完成。问题是哪里更容易。

也不要把我放在一边或另一边....我并不拘泥于某件事情。

没有人是。我只是说,现在的OP功能在现代OOP语言中都有,多范式语言中的OOP功能也有。此外,许多功能的FP提出的东西特别和惊人的,其实,是相同的鸡蛋在配置文件。它们已经存在了很长时间--就像Pascal中的闭包或C语言中的函数延迟执行,其中一个指针被传递给它而不是结果。文章中的例子在任何语言中给出的东西,除了js之外,几乎在任何地方都不适用(也许在Python中除外)。

 
fxsaber:

我不擅长OOP。但我确实使用了其中的原始东西。从最近的情况来看,我已经发布了一些非常简单的代码


在FP中开始写,当时我不明白我最终会看什么。

通过OOP的原始元素完成。可能是失去了FP技能,但这里的OOP似乎更简单,更易读。


该代码非常简单和简短(描述)。如果你把它写在FP中,比较一下会很有意思。

这段代码比经常在这里发布的要小得多,你最好在这里展示一下,这对教育目的有好处

我希望德米特里-费多谢耶夫能写出他的版本,然后专家将用他的版本来嘲弄他)
 
fxsaber:

我不擅长OOP。但我确实使用了其中的原始东西。从最近的情况来看,我发布了一些非常简单的代码


在FP中开始写,当时我不明白我最终会看什么。

通过OOP的原始元素完成。可能是失去了FP技能,但这里的OOP似乎更简单,更易读。


该代码非常简单和简短(描述)。如果你把它写在FP中,比较一下会很有意思。

我一有空就会看一下计算器。而你是心灵感应者,我本来想在另一个主题中问,但我在这里问,根据你在 "真实模式 "中的调试经验--在MT4和MT5中的T_OHLC_V数据是否可能存在 "漏洞"?

也就是说,是否有可能在任何松懈(连接失败、终端挂断、系统挂断)之后,新的数据最初会有一些跳过,然后跳过/"洞 "会被写入阵列内部?当然,我会自己编写指标和EA的检测器,但也许你已经有这种测试的经验,我不必担心。

我没有经验的FP(或有,但不知道的名称),自动在哪里参考?),我想我正在用程序化的范式来做。

zy. 请求请求)

 
Aleksey Mavrin:

奇怪的文章。OOP与程序化风格没有什么区别,因为在OOP中,你可以默认用程序化风格做所有的事情,反之亦然,没有可怕的代码膨胀,也就是说,OOP是一种 "上层建筑",而不是一种根本性的不同风格。

如果这篇文章真的是关于功能性的而不是程序性的(如果你挑剔的话,这并不那么明显),那么为什么要比较那些用途完全不同的东西。

托皮卡启动器,你自己在写,现在说的是哪一个? 功能性的还是程序性的?

随着OOP的出现,它真的把我吓坏了,封装、继承和其他形态,这些都是流行的OOP介绍的开始。他们会把这些数据和函数简单地写在一个块中--一个类。但后来我习惯了这种时尚--每次都要发明新的术语。当我需要OOP时--没问题,但由于在我看来,它比程序性的变体更贪婪,速度更慢,所以我最多只能用程序性的。

而这个问题的出现,是因为我想听听大家对FP和其他变体的意见,除了OOP和procedural之外,也许有人有超级积极的经验。而且我想,使用某种功能的组合,不成为一个狂热的人是明智的。

 
彼得,重新链接你的名字。
 
Fast235:

这段代码比经常在这里发布的要小得多,你最好把它部署在这里,用于教育目的。

小菜一碟。

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

从技术上讲,这可能是一个OOP。但这是它最原始的部分。然而,没有它,我就做不到。可能是,愚蠢的大脑重新排列,铆足了劲儿做这种事。

 

Peter ahahah stop it.

我的方法,桶是一个锅

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

Peter ahahah stop it.

我的方法,桶是一个锅

我已经有一段时间没有看到他了...

他真的用了不同的网名吗?

 
Maxim Kuznetsov:

我已经有一段时间没有看到他了...

他真的用了不同的网名吗?

有传言说,他去建立一个强大的人工智能。

 
Maxim Dmitrievsky:

有传言说,他已经去创建一个强大的人工智能

只是不要让任何事情发生,否则COVID就不会睡觉......