PLOについての興味深い見解 - ページ 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の入門によく使われるモルヒズムが本当に怖くなりました。そのデータを関数と一緒に1つのブロック(クラス)に単純に書き込むのである。しかし、そのうちに、その都度新しい用語を発明する、このやり方にも慣れてきました。しかし、私の考えでは、OOPは手続き型よりも2倍も貪欲で遅いので、私はせいぜい手続き型を使っています。

そして、OOPや手続き型以外のFPや他のバリアントについて、もしかしたら誰かが超ポジティブな経験をしているかもしれないので、意見を聞きたいと思い、この質問が生まれました。そして、マニアックにならず、何らかの機能を持ったミックスを使うのが賢明なのでしょう。

 
ピーターさん、お名前を再リンクしてください。
 
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なんでしょうけど。しかし、それはその最も原始的な部分です。しかし、これがなければやっていけない。おそらく、脳が別のものにリアレンジされて、リベンジしているのだと思います。

 

ピーター あははははははははははははははははははははははははははははははやめてください。

私の考え方、バケツは鍋

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

ピーター あははははははははははははははははははははははははははははははやめてください。

私の考え方、バケツは鍋

久しぶりに見たけど...

本当に別のスクリーンネームで行ったのだろうか?

 
Maxim Kuznetsov:

しばらく見てないんだけど...。

は、本当に別のスクリーンネームで行ったのでしょうか?

強いAIを作りに行ったという噂も

 
Maxim Dmitrievsky:

強力なAIを作りに行ったという噂も

ただ、何も起こらないようにしないと、COVIDが眠れなくなる...。