English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ランダムウォーク理論とトレンドインディケータ

ランダムウォーク理論とトレンドインディケータ

MetaTrader 5トレーディング | 29 10月 2015, 09:39
2 491 0
Гребенев Вячеслав
Гребенев Вячеслав

はじめに

コイン投げゲームは数年に渡って親しまれてきました。このゲームをしてみましょう。ここでは外為マーケットにおけるテクニカルトレードのメカニズムを試し理解することを意図して行います。コインを 手にするのはわれわれが初めてではもちろんありません。確率論を学びたい方は、William Feller氏の著書"An Introduction to Probability Theory and Its Applications" を参照ください。ここでの目標はトレードのメカニズムを理解することです。


ランダムウォークとそのプロパティ

はじめに、乱数ジェネレータを用いてコイン投げゲームの結果シミュレーションを行います。表なら +1 で裏なら -1とします。コインを投げた i 回目の結果は x (i) = p (1/2)です。ここで p (1/2) は関数で、1/2の確率で値 +1を取り、同じく 1/2の確率で値-1を取ります。

それからランダムウォーク は単純に x(i)の合計です。話が簡単なようにゼロからはじめます。

コインのコース縦軸をコースの値、横軸をコインを投げた回数とします。

図1 ランダムウォーク:(縦軸:ライン上の現在位置、横軸:時間ステップ)

ランダムウォークはよく研究されており、それには驚きのプロパティがあります。われわれに有用なものを略述します。

  1. 逆正弦法則。コインを長くなげるほどランダムウォークポジションがゼロを通過する回数が減ります。
  2. ランダムウォークは時間の 90%でゼロの片側に位置していました。実際、これら2つの理論は現実のトレーディングでは役に立ちません。また、それらは基本的に現実の通貨レートとランダムウォークの間の差異を強調するために必要であるにすぎません。
  3. ランダムウォークグラフは変動的で、スケールの変更にともないそれ自体に似た姿に留まるものです。フラクタルとはその画像同様美しい言葉です。ランダムウォークの統計的パラメータが大きさによって影響を受けないというのは便利です。
  4. 酔歩理論。ランダムウォークは、金を遣った後に食堂を出ていき、酔っ払った船乗りが歩数(コインを投げる回数)の平方根に比例する平均スピードで歩いた軌跡だというものです。イベントの無作為性、または作為性を評価することができるため、有用な定理です。100回コインを投げて奇跡的に65回勝ったら、単にラッキーだったと片づけるか、それともそのような奇跡で得る賞金の一部を分かち合うべきでしょうか?

ランダムウォークはトレーディングに応用することが可能です。実際、学生たちはこのことを以前から知っており、授業の間の休憩時間に『表か裏か』ゲームをしています。さて、ランダムウォークを利用してマーケットゲームを作ることができます。現在マーケットにおけるトレーディングルールは全て適用可能ですが通貨レートを取る代わりに、ランダムウォークレートを取ります。通常どおり仲介人がおり、その人はスプレッド、コミッション、税金を差し引ます。ただし、今のところは何も差し引かないように頼み、ゲームを損なわないようにします。

トレードについて少しお話します。

  1. ランダムウォーク(RW)を用いると、次の瞬間RWポジションがどこに移動するか推測することが不可能となります。
  2. ポジションはゼロから出発し、プラスかマイナスの任意方向に時間ステップのある程度大きな数字まで移動します。
  3. ランダムウォークレートにおいて、トレーディングシステムは平均的に勝ち負けはありません。 これはマーケットゲームである以上、トレーディングシステムの残高はマイナスになることもありうる、と思っておくべきです。われわれは有限個の時間ステップを売買します。最後のコイン投げをもって取り引きはすべて終了です。キーワードの「平均的に」は「すべての可能性ある値の設定上で平均化されるとき」というフレーズに置き換えることができます。
    トレーディングシステムのデポジットに限度があり、マイナスになることができなければ、次の発言は事実となります。「ランダムウォークデータを基に売買されているトレーディングシステムはすべてなくなるまで資金を失い続ける。」
  4. 仲介人 が各取り引きから少額のスプレッドを差し引いてもよいということにしたら、取り引き数に比例して資金が減っていくことになります。 仲介人 を伴うトレーディングの最適戦略は役に立ちません。実際にトレードがしたければ、最良の方策はすべてを一つの取り引きに投じることです。この場合、勝利する確率は最大ですが、まだ0.5以下です。
  5. インディケータとExpert Advisors の大半はランダムウォークデータを基に動作します。その多くは売りまたは買いのシグナルを出します。ただそのシグナルはまったく無意味なものです。仲介者の存在があってランダムウォークデータを使用したトレードで 正しいExpert Advisor から推奨されることがひとつだけあります。「マーケットに参加するな」です。
  6. ランダムウォークデータを基にしたトレーディング戦略のためのZ アカウント値は通常ゼロ付近に分布します。いくつかのRWデータ用の特定 Z アカウント値はトレーディング戦略を特徴づけるものではありません。ランダムウォークデータを使用するときは、すべてのトレーディング戦略は同じであるという意味で、ネコはすべてグレーです。トレーディング戦略は将来の変化を推測する方法において異なります。そしてランダムウォークのポジションは予測不可能なものです。
  7. ランダムウォークデータではトレンド、サイクル、リバースパターン、チャネル、その他テクニカル分析の属性を観測することが可能です。これらはすべて想像上のパターンであり、トレードでは役に立ちません。現実に一滴の情報も見つけるのは不可能な場所、砂漠にオアシスを見つける、というのがトレーダーの心理です。
  8. 2人の人が限られた数のコインで「表か裏」ゲームをしたら、平均的勝者はよりコインをたくさん持っている人です。なぜならゲームは一方のコインが尽きたところで自動的に終わるからです。トレーダーとマーケットが「表か裏」ゲームをしたら、平均的にトレーダーが勝つ可能性はマーケットボリュームに対してのトレーダーの資本率に比例します。簡単に言うと、トレーダーが勝つ可能性はありません。モデレータがなかったとしても、です。
  9. ランダムウォークデータについてチャンピオンシップを行うことも可能です。仮想のデポジットを各出場者に与えるのです。スポンサーは仮想資金の最高額を得た人に現金を渡すと約束します。収益の数学的期待は大幅にプラスとなります。問題はチャンピオンシップのために最適化された martingale 戦略の実装に起こります。一番闘争心のあるプレーヤーは終了よりかなり以前にデポジットを使い果たし、一方で慎重なプレーヤーは十分な資金をもてあますでしょう。中間のタイプは、ランダムウォークは「宝くじ」となります。興味深いのは、投げるコインの数、最初のデポジットに対してだけでなく戦闘的なまたそれ以外のタイプの出場者数に対しても、戦略が最適化される必要があることです。ですが、その話題は別の記事に譲ることとしましょう。ランダムウォークの美点は分析的同様、シミュレーションの間でも数字として最適化問題を解決させてくれることです。また、ひとたび問題が解決され、理解されると、それは実生活でも利用できます。

現実の通貨クオートとランダムウォークデータの違い

1~8の項目はかなり悲観的なものです。それらはランダムウォークマーケットにおけるトレーダーのデポジットの無条件損失を予測しています。が、通貨ペアのクオートはランダムウォークデータとは異なります。こういった違いは収益性のある(平均的に)戦略を構築するキーとなるものです。現実通貨レートとランダムウォークデータの間の主な違いを挙げてみます。

  1. 現実通貨レートは根本的経済的要因によって制限され、特定の基本水平チャネル内に位置します。この事実に基づき、たとえばわれわれは大きな時間枠での「動向」を基にしたトレーディング戦略構築が可能です。
  2. 現実の通貨レートの動きは、時事ニュースなどをもとに予測可能なこともあります。
  3. 現実の通貨レートのパラメータ分布とランダムウォークのそれには違いがあります。このかなり一般的な発言はトレーディング戦略の大半へのキーです。現実の通貨レートまたはランダムウォークは数字の羅列として閲覧可能です。タスクは系列内に統計的 規則性を見い出し、それを基に将来の値を予測します。   

ランダムウォークの変動数は無作為に採られた +1 ~ -1の連続数です。では、この系列の中で統計的トレンドをどのように見分けるのでしょうか?この問題は無作為性に対するシーケンスの検証タスクと一致しています。無作為性検証は数多く開発されています。連続した「無作為性」を示す検証があれば、トレーディング戦略はそれを基に構築可能です。


トレンドのコンセプト

もっとも簡単な検証は次のようなものです。シーケンスにおける数字 +1 と -1 はおおよそ同じです。酔歩法則では、数字 +1 は数 -1とは異なりますが一般的にシーケンス内のデータ数の二乗以上は異ならないのです。現実レートに対しては、この無作為性検証は基本チャネルによる実レートの限界のおかげで単純に行われます。ここではトレーディング戦略を立てることができません。

別にもっと面白い検証があります。数字 "+1,+1"、"+1,-1"、 "-1,+1" 、"-1,-1" という連鎖を数えます。ランダムシーケンスでは、その数はおおよそイコールです(ここでも酔歩法則に似ています)。数字 "++" の連鎖 (名前を付けなおして"+1+1")が、突如数字 "+-" ("+1,-1") の連鎖を大幅に越えると次のような戦略を立てます。「それぞれのb "+"のあと "+"に対して値を入れる」統計によると、われわれは半分以上のケースで勝利です。

最後の文をトレーダーの言語に訳します。もっとも人気の高いトレーディング戦略はトレンドフォロー戦略です。時間のトレンドを認識するために時間内にそれに飛び込み飛び出すことがこの戦略の主な目標です。しかし、ランダムウォークにあるのような誤ったトレンド幻想があります。前述の連鎖の数の検証は本物のトレンドから誤ったトレンドを区別するのに役立ちます。連鎖"++" と "--" の数字が  "+-" と"-+" より大きければ、RWにはトレンドがあり、トレンドフォロー戦略は役に立ちます。大きくなければ、トレンドフォロー戦略を基にしてシグナルのマーケットに参加するべきではありません。 

二項式連鎖 (++,+-,-+,--)だけでなく、三項式連鎖 (+++, ++-, +-+, ...)やもっと長い連鎖について考察することが可能です。トレンド (+++, ---, ++++) や非トレンド (-+-, +-+, +-+-) 連鎖の数を数え、各連鎖をトレンド係数に割り当て、その係数を用いて合計を計算することができます。最終的に、こういった処理により Z スコアの計算に到達します。しかし、ここで Z スコアは勝ち負け戦略系列で計算されるのではありません。というのもトレーダーは慣れていますが、レート表示は変更するからです。マイナスの Z スコアはトレンド系列が存在することを示し、プラスの Z スコアはトレンド不在の系列を示します。

長い連鎖や Z スコアの計算を考察いしようとすると極めて長い系列(30以上)が必要となります。われわれの目標はトレンドインディケータを構築することで、長い系列の考察はインディケータ構築を遅らせます。二項式連鎖の考察は8エレメントの系列で開始可能です。よってインディケータを構築するため二項式連鎖を考察します。ランダムウォークの本格的な研究のためには(RWシミュレータ構築のため)Z スコアを使用する必要があります。


ランダムウォークでのトレンド描写

ランダムウォークでトレンドコンセプトを描写します。

トレンド定義の一つは以下のようなものです。:トレンド-前回変更の記憶 ランダムウォークは履歴を記憶しません。それに記憶を追加します i 回目にコインを投げた結果を x (i) = p(1/2 + a*x(i-1))とします。ここでトレンドパラメータは -1/2 ~ +1/2です。関数 P (...) は1/2-a* x(i-1)の確率で +1 を生成します。

а<0であれば、ランダムウォークはは非トレンドです。а>0の場合はトレンドです。а=0の場合はランダムウォークはトレンドを持ちません。

乱数の同じシーケンスで生成されるランダムウォークが絵に表示されています。

トレンドのあるコインの方向

図2 一般的なランダムウォーク、トレンド: (赤、a = 0.2)、トレンドレス: (ブルー、 a = 0)、反トレンド(黄、 a =- 0.2)

見てのとおり、トレンドのランダムウォークは比較的高い予想変動率を示し、傾斜したチャネルを形成する傾向にあります。反トレンドランダムウォークは比較的低い予想変動率で、水平チャネルにおいて反り返る傾向にあります。

実マーケットでは、トレンドRWと反トレンドRWを区別するのは簡単ではありません。とくにトレンドが弱い場合はそれが顕著です。トレンドのインディケータは不可欠です。前述のとおり、トレンドレスRW、および反トレンドRWの傾向でトレンドフォロー戦略を使用すれば確実にデポジットを失います。

トレンド RW のとき、トレンドフォロー戦略を用いてトレードすることが可能です。トレンドをつかみトレンドのリバースポイントを検証するには数学の統計的手法を使うことができます。しかし解決されない課題があります。「仲介者に支払いをしてまだ収益が残る十分なノンランダム収益があるのでしょうか?」だいたいの解答を得るにはトレンドインディケータを参照する必要があります。これは本稿末尾で提供します。

反トレンドRWのときは不安定性をトレードすることが可能です。反トレンドRWは傾斜しているトレンドをすべて崩し、水平チャネルにもっていくことが狙いです。水平チャネルなら現在のトレンドに関わらず、どこにでもテイクプロフィットを、水平チャネル境界を越えてストップロスを設定することが可能です。価格がチャネルのどこにあろうが、最終的にはテイクプロフィットに一致するようになります。

トレンドレスRWの場合、トレンドフォロー戦略は使えません。サイクルなど、別の考え方を使用する必要があります。


ランダムウォークシミュレータの提案

トレンドRWはまたトレーディング戦略を検証するのに有用です。関数を基にRW シミュレータを作成することができます。


ここで

  • Amp - 偏角
  • P(...) :収益性関数
  • Trend :トレンド。前回変更の関数
  • Cycle:サイクル。時間関数
  • Limit :ランダムウォーク関数
  • Expect :期待値。将来変更関数

これら関数のパラメータは実レートの統計パラメータに一致しています。

ランダムウォークによる実レートのシミュレーションには単に人間の知覚の弱さを解説する以上に深い意味あいがあります。レートデータのRW シミュレーションにより、可能なレートの『完全な』セット(または少なくとも完全セットの安価サンプル)のExpert Advisor を検証することができます。それは逆に既製のExpert Advisorの手法の確率分布関数構築を可能にします。この分布関数 EAの収益性、闘争性、その他パラメータを独自に特徴づけます。

設定完了の定義

  1. 完全な履歴レートデータ設定とは次を意味します。現実のマーケットクオートに対し、それにひじょうに似たRWパターンが存在すること。設定レート数増加に伴い、相似性は絶対的なものとなります。(現実レートとそれにもっとも近いシミュレーションレートの間にあるレートのスペース(関数)内距離(ノルム)はゼロに近づきます。)
  2. ダミー戦略とは、その取り引きが任意に作成される戦略ですが、現在レートや履歴レートは考慮されていません。前回取り引き結果もまた未知です。われわれに判っているのは、開始からの時間と投げるコインの数だけです。ダミーはそのような特性をよく表しており、スプレッド、コミッション、税金は支払いません。 ダミーではマイナス平均もあり得ます。
    設定においてダミー戦略の確率分布関数のとれかが正常分布に近づくとレート設定は数学的に完了です。
  3. 設定は数学的、履歴的に完了すると完了です。

履歴データの検証はもちろんしないよりマシです。ですが、履歴データには欠損があり、それは古いデータとなります。また、履歴データは EA設計に最適化形式でインクルードされているはずです。ではそれらを検証する方法は?履歴データ上の EAの資本曲線は履歴的に行われるレート導入についての資本の確率分布関数セクションに留まります。そしてそれはExpert Advisorの十分に完全な特性とはなりえません。

もちろん現実レートの微妙な部分をシミュレーションにすべて取り込むことは不可能です。実レートのシミュレーションは個別の記事や研究への尽きないテーマです。まずはじめに、トレンドフォローシステムを検証するために、トレントRWに基づくかなり単純なシミュレータを使用します。

分布関数決定機能のある単純なシミュレータに必要なのはストラテジーテスタにアタッチすることだけです。シミュレータレートが要求される別の場所は EAのストアフロントです。そうでないと買おうとしているものが何か確認することが難しくなります。私は異なるシミュレータや履歴データで複数回基本的な検証をしてやっと EA を購入しました。EA が販売されるには、価格の隣に資本の確率分布関数とそれが取得されたシミュレータがアタッチされるべきです。

Expert Advisorの確率分布関数は EA のテクニカルパスポートであり、製造者からの保証です。ロシア連邦の消費者権利保護法は他の製品同様 EAにも適用されています。ただし、ここではわれわれはまずシミュレータに対する認証システムを構築する必要があります。


トレンドインディケータ

レートのトレンドの考えを使い、もっとも単純なトレンドインディケータを構築することが可能です。ランダムウォークとは異なり、実レートはバーとして表されます。実レートをランダムウォークレートと置き換えます。それぞれのバーは単一の平均値(高値+安値)÷2 と置き換わりました。(本稿末尾の質問を参照ください。)変更のサイズ は外し、記号だけ残します。次のように連続したプラスとマイナスを取得します。 ++-+---+-+-- .... トレンド連鎖の "++" と "--" の数、また 反トレンド連鎖の最後のNバーに対する"+-" と "-+" の数を数えます。インディケータとして値 "++" + "--" - "-+" - "+-"を取ります。

トレントの強さを評価するインディケータ上に線を引き Nの二乗+ または - というようにします。

MQL5 のインディケータコードは本稿末尾にあります。(TrendingHL.mq5).

EURUSDにおけるトレンドインディケータ

図3 月足時間枠でのEURUSDに対するトレンドインディケータ レートはほとんど常にトレンド(ゼロ以上)で、その時間の半分は強いトレンド(上のグリーンラインより上)です。トレンドが評価されるバー数は N=30

EURUSDレートのトレンドインディケータでプレーしたあと、以下をメモします。

  1. ほとんどの時間、インディケータはゼロより大きい。それはレートがトレンドということです。弱いレートトレンドについてはすでに述べました。が、百聞は一見にしかずです。

  2. 実レートはつねにトレンドというわけではありません。

  3. 他のすべてのインディケータ同様、トレンドインディケータには遅延があります。

  4. トレンドのインディケータにより、本チャートのトレーディング戦略のトレンドにより取得されるノンランダム収益のサイズを推測することができます。図のインディケータの平均値は約7です。バーに対する平均変化は0.01 米ドルです。(おおよそ)0.01*7=0.07. よって1ドル投資されると毎月7セントの収益があることになります。これはざっとした判定ですが、1桁分を示してくれます。 o仲介者、トレードマージン、マーケットへの参加ポイント、 終了 ポイントについて忘れてしまっていました。

    ランダムウォークレートとは異なり、実レートはトレンドでお金を儲けさせてくれるというのはよい知らせです。
    資本からの利子は非常に低いもので、投資の他の商品とたいして変わらないというのは粛然たる事実です。

  5. インディケータは数年にわたり平均がプラスであるトレンドにより予測することができます。レートのトレンド特性が持続することを願いたいものです。

  6. トレンドは大きな時間枠に顕著にみられます。

  7. 反トレンドは滅多に見られません。

  8. 実レートはフラクタルであるという事実にもかかわらず、スケール(時間枠)変動下でのトレンド不変性のコンセプトは確実性を持って語られません。
    正確な仮定はおそらく次のようなものです。相対的収益はスケール変動下で不変である。


    ここで

    • Trend :トレンド
    • AverChangePerBar :バーレートにおける平均絶対変動
    • TimeInBar :時間内のバー継続時間(時間枠)


    同時に、多様な実レートに対し、多様な投資商品において異なる時間枠でだけでなく、異なるトレードの異なる考え(循環、変動)においても収益は保持されます。収益性はおおぜいの投機家と投資家によってトップから制限されます。下からは資本のトータルボリュームを増やすことで、一般的に話せば、人類の発展によって全商品に対するトータル収益が制限されます。

    最後の段落に基づき、他の考え、インディケータ、トータルの収益を交え、レートのトレンド収益のインディケータ構築が可能です。他のインスツルメントに対し似通ったインディケータを構築することでマーケットを通じて資本の動きを調査することとなります。またレートをより正確に予測することができるようになるでしょう。

最後の段落についてもっと詳しく述べます。レートの予測には2種類あります。

  1. ランダムウォークレートを用いて収益を創出ことが可能であると判りりました。実レートを見、実レートにはこれまで長期にわたって存在するトレンドがあることを確認します。トレンドはこれまで数年間におよぶため、明日もそこにあると考えることができます。それが予測のすべてです。ノンランダムトレンドの一タイプレートのノンランダムは資本トータル学の成長によって生成されます。年間数パーセント資本額を構築。この資本のパーセントは基本的にこのノンランダムのギャンプルから得るものです。
  2. レート履歴だけでなく近隣マーケットの動向も知ります。全マーケットの資本合計はおおよそ一定値です。マーケット間の資本動向を調査し、トレンドを見つけ、それをレート予測に使います。ここでの収益はマーケット間資本のノンランダムな流れに比例します。しかしMetaTrader 5 てそういった予測を実装することは今は通貨マーケットに限り可能です。 

インディケータで数えたトレンドの収益性としてのこれら7 % (「ノンランダムトレンド」参照)は先に述べたように2つのノンランダムと、また知らない他のノンランダムの合計です。

ここでのマーケットは、インフローとアウトフローを伴う非クローズ(オープン)システムとして表示されます。増加 = インフロー~アウトフローインフローがアウトフローより大きければ、マーケット(マーケットレート)はトレンドです。 インフローがアウトフローと等しければ、マーケットはトレンドレスです。 インフローがアウトフローより小さければ、マーケットは反トレンドです。

本稿にはひとつ深刻な矛盾があります。一方でわれわれはトレンドインディケータを用いて実レートがトレンドであることを作り上げました。また一方で水平基本チャネルの限界内で実レートは変動することを述べました。また、水平チャネルは反トレンドの強い指標です。

最終的に実レートはトレンドなのか反トレンドなのでしょうか?調和の間隔がレートはトレンドで基本水平チャネルは存在しない、と示します。そしてこれは履歴の最大および最小は常に更新されることを意味します。それらに対応して危機は次の危機がシステムを破壊するまで強くなり続けます。一般的にこれは理解可能です。トレンドはシステム内で複数パラメータ(資本)が累積され増加するのです。われわれがシステムのロードをつづけたら、最終的に崩壊します。累積されたパラメータがリセットされ、開発の新規サイクルが始まります。


おわりに

外為マーケットを題材にした別の記事があります。これら記事は1部平均1ドルでインターネットで何百とみつけることができます。また無料記事は数えきれずあります。では本稿は何が特別なのでしょうか?

  1. トレーダーに都合がよいようにランダムウォークのプロパティをご紹介し、インディケータを作成しました。これは現実レートをランダムウォークデータから区別することができるものです。
  2. インディケータを使用し、トレンドフォロー戦略によって取得可能な収益を評価することが可能です。
  3. etaTrader 5 トレーディングプラットフォームにレートシミュレータを追加することを提案しました。このシミュレータの考えも提案しました。  


課題です。

質問:平均はなぜインディケータ(高値+安値)に対して取られるのでしょうか?この価格ではトレードは不可能だと考えます。また平均を取るのは危険です。平均(平滑化された)ランダムウォークレートがトレンドを持つのです。それ以上に平均(平滑化)がもっと行われると、トレンドはもっと大きくなります。

解答:確認しましょう。これをチェックするには平均化しない価格を取ることが可能です。たとえばただ始値と終値です。トレンドはまた残りますが、同じようには見えません。


トレンドインディケータ(EURUSD対象に、月次の時間枠)の平均化による効果を考えます。平均について低いインディケータを計算します。(高値+安値)÷2(trendinghl.mq5)。中央インディケータは始値によって計算されます。(trendingopen.mq5). 上のインディケータは終値によって計算されます。 (Trendingclose.mq5). すべてのインディケータはプラスであることは明確で、レートはトレンドを持ちます。しかし開始と終了のインディケータの平均値は(高値+安値)÷2であるため7ではなく、たいだい2です。本稿にある見積もり精度に対する相違は重要ではありません。平均化は人工的にレートのトレンドを作り出していると認めます。

レートのトレンドのもっと説得力があり、正確で信頼性のある興味を引かれるな証拠(計測)はキーワード:トレンド、 こだわりHurst 指数などを用いて検索で簡単に見つけることができます。

質問の「結局この価格ではトレードできません」部は非現実的なノウハウです。敵は自身の目でシグナルを見、知ったかぶって自身の手でトレードを行うにもかかわらないインディケータを期待します。みなさんを失望させる必要があります。コンピュータは手動トレーディングを台無しにします。

本稿で評価したようにレート上の非ランダムは年間資本の10%に対して継続します。(注文に正確に)レート上のそのようは値は目では見えず手ではつかむことができません。自動化されたExpert Advisor が要求されます。EA は年間資本の数パーセントをめぐって戦い、近い将来1%の10分の1、100分の1を超えるでしょう。これは収益の割合を追跡し最適化するためにシミュレータを必要とするためです。 

実レートを検証するとき、パーセント割合、または年間収益の全体パーセントを検出するのは不可能です。

これがシミュレータに数学的駆動が高く要求される理由です。

//+------------------------------------------------------------------+
//|                                                     Trending.mq5 |
//|                                      Copyright 2010, Grebenev V. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, Grebenev V."
#property description "Trending Indicator"
#property version   "1.00"
#property indicator_separate_window
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_SECTION
#property indicator_type3   DRAW_SECTION
#property indicator_color1  LightSeaGreen
#property indicator_color2  DarkGreen
#property indicator_color3  DarkGreen
#property indicator_label1  "Trending"

//--- input parameters N – number of bars, by which the trend is calculated
input int      N=30;

double ExtTRbuffer[];   // array for the indicator
double ExtTRbufferP[];  // array for the upper estimation of the trend
double ExtTRbufferM[];  // array for the lower estimation of the trend
double average[150000];  // array for the average values of the rates

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator digits
//   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- indicator short name
   IndicatorSetString(INDICATOR_SHORTNAME,"Trending");
//---- index buffer
   SetIndexBuffer(0,ExtTRbuffer);
   SetIndexBuffer(1,ExtTRbufferP);
   SetIndexBuffer(2,ExtTRbufferM);
//--- set index draw begin
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,1);
//---- Array Initialization
   ArrayInitialize(ExtTRbuffer,0);
   ArrayInitialize(ExtTRbufferP,0);
   ArrayInitialize(ExtTRbufferM,0);
   ArrayInitialize(average,0);
   return(0);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   double pp=0,pm=0,mp=0,mm=0; // pp - number of «++» chains, pm  - number of «+-», mp – «-+», mm – «- -»

   / Fill the array of the average values of the rate with average values (high+low) /2
   for(int i=prev_calculated;i<rates_total;i++) average[i]=(high[i]+low[i])/2;

   for(int i=prev_calculated;i<rates_total;i++)
     {
      pp=0; pm=0; mp=0; mm=0;

      for(int j=0;j<N;j++)
        {
         if(i-j-2>=0) // check that the index of the array did not exceed the border 0
           {
            if((average[i-j-1]-average[i-j-2])>0 && (average[i-j]-average[i-j-1])>0) pp++;
            if((average[i-j-1]-average[i-j-2])>0 && (average[i-j]-average[i-j-1])<0) pm++;
            if((average[i-j-1]-average[i-j-2])<0 && (average[i-j]-average[i-j-1])>0) mp++;
            if((average[i-j-1]-average[i-j-2])<0 && (average[i-j]-average[i-j-1])<0) mm++;
            // chain containing "0" omitted
           }
        }
      // fill indicator arrays
      ExtTRbuffer[i]=pp+mm-pm-mp;
      ExtTRbufferP[i]=sqrt(N);
      ExtTRbufferM[i]=-sqrt(N);
     }
   return(rates_total);
  }

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/248

添付されたファイル |
trendingclose.mq5 (3.69 KB)
trendinghl.mq5 (3.67 KB)
trendingopen.mq5 (3.69 KB)
ジグザグおよび ATR例によるクラスとしてのインディケータ実装 ジグザグおよび ATR例によるクラスとしてのインディケータ実装
インディケータを計算する最適な方法についての議論は尽きるところがありません。どこでインディケータ値を計算すべきでしょうか?インディケータ自体でしょうか、またはそのインディケータを使う Expert Advisor に全ロジックを埋め込むのがよいのでしょうか?本稿では、カスタムインディケータ iCustom のソースコードをExpert Advisor のコードに直接、または計算最適化スクリプトに移動し、そして prev_calculated 値をモデル化するバリアントの一つについて述べていきます。
時系列予測に対する ENCOG マシン学習へのMetaTrader 5インディケータ使用 時系列予測に対する ENCOG マシン学習へのMetaTrader 5インディケータ使用
本稿ではMetaTrader 5 の ENCOGへの連携をご紹介します。これは発展したニューラルネットワークとマシン学習のフレームワークです。 標準的テクニカルインディケータを基にしたシンプルなニューラルネットワークインディケータとニューラルインディケータを基にしたExpert Advisor についても語ります。ソースコード、コンパイルされたバイナリ、 DLL、トレーニングされたネットワークはすべて添付があります。
EAステータス SMS 通知機能 EAステータス SMS 通知機能
稼働中のEAの状況を知らせることで何処にいても常に詳細な状況を確認できるSMS通知システムの開発
マーケット価格予測に対する汎用回帰モデル マーケット価格予測に対する汎用回帰モデル
マーケット価格は需要と供給の間の安定したバランスから形作られ、それは逆に経済、政治、心理要因の多様性に依存します。こういった要因の影響原因同様、性質の異なることですべての構成要素を直接考慮するのは困難です。本稿は 念入りに作られた回帰モデルを基にしたマーケット価格予測について述べます。