戦略探索の自動化 - ページ 3

 
Aliaksandr Hryshyn:

確かに小さなことがたくさんあります。

私は普遍的なシステムを作ろうとしているので、最小限の労力でインジケーターやローソク足などを分析するさまざまな可能性を追加することが可能です。各関数には、どのようなデータを扱うことができ、どのようなデータが出力されるかについての情報があります。インジケータについても、どのようなデータを提供するのかを説明します。例えば{double}や{int,double}のように、単純なデータと複雑なデータに分けられます。 同じ例で「価格」と「チャート上の位置」、別の例で「直線」(チャネルを定義するのに使用できます)などに分けられます。例えば、「定数」(ストラテジーのパラメーター)、「指数」(最小値と最大値がある)、「比率」(価格や出来高など、基準となるポイントが1つしかない)などです。ストラテジーを一貫した方法で修正する必要があるのですが、このような微妙なニュアンスがあり、ある場所の修正が別の場所の修正条件に影響を与えることがあります。

その通りだ。検索の組み合わせの数を減らすために、上記の制約(タイプ、規模、カテゴリー)を利用し、とりあえずはポイント変更(1つ/少数の機能の追加/削除)で十分でしょう。

「組み替えは自然発生的なものでもあるが、既成のソリューション全体のものである。組み合わされた機能群は、単一機能よりも "外の世界 "との接点が多くなる可能性が高いので、すべてを楔で打ち込む機会は少なくなる。アルゴリズムは非常に複雑になる。)

考えを明確にしよう。バリアントの数を減らし、1つの変更が他のブロックに影響を与えないようにするには、さらに普遍的でなければならない。トリックは、同じタスクが異なる方法で達成される可能性があり、多くの場合、どれがより良いかは事前に明らかではないということです。例えば、私たちはTRANSFORMATIONというある普遍的なタスクを定義しました。このオーバーソールドをそれぞれ独自の方法で定義するオシレーターが12個ほどある。オシレーターのスクリプトの中で、すべてのインジケーターまたはすべてのメソッドを試すようにタスクを設定したとしましょう。そして、これらのブロックと他のコードとの相互作用を標準化しなければなりません。例えば、インタラクションの標準を上位のパーセンテージとします。ジェネレーターは順次、Oversold1というブロック・ピースをコードに挿入し、この特定のブロックでテストされる変数を見つけ、ボルキンフォワードを実行し、テスト 結果を記憶します。このブロックは、元のインジケーターが整数を表示しているにもかかわらず、パーセンテージを表示します。テストが終わると、最も成功したブロックを残し、別のタスクに移る。

同時に、最初からそれほど多くのブロックを用意する必要はなく、2つか3つのブロックで十分である。重要なのは相互作用を確立することである。

依存関係も同じだ。A、B、Cがある。まず、AがBより大きければCが成り立ち、次にBがAより大きければCが成り立ちます。

そして、より複雑な相互作用へと進むことができる。

 

"選択肢の数を減らし、1つを変更しても他のブロックに影響を与えないようにするためには、ブロックの汎用性を高める必要がある。"⇒"相互作用の標準、つまりトップのパーセンテージを選んだとしよう。"- 言いたいことはわかる))。これは、指標を単一のビューにすること、つまり前処理を含む。私のシステムでは、すべてが形式化されすぎている。私はそれをすべて維持したい。私はすでにスケールやカテゴリーなどの実装に取り組んでいる、私はすでにそれを行う方法を考え出した、いくつかのブロックの接続は本当に他の場所でブロックの接続に影響を与えます。指標の標準化は、指標自体の説明を通して行われ、それに応じて、特定のブロックが自動的に接続されます。ブロックの1つは、簡単に別の値から1つの値の割合の計算であることができ、唯一のこれらの値は、例えば、制御され、それらの間の接続を持っている必要があります:

  1. パーセント( Open[0] , Open[3] )
  2. パーセント(Open[0],Alligator[3])
  3. パーセント(出来高[0], ワニ[3])

1番目と3番目のオプションは論理的で良いですが、3番目は意味がありません。

指標も計算されます。例えば、Open[Max_on_position(iAC,0,30) ]。

 
Youri Tarshecki:

同時に、最初からそれほど多くのブロックを用意する必要はなく、2、3ブロックで十分だ。重要なのは相互作用を確立することだ。

依存関係も同じだ。A、B、Cがある。まずAがBより大きいかどうか、次にCが真かどうか、次にBがAより大きいかどうか、といった具合にチェックする。

それから、より複雑な相互作用に進むことができる。

それはすでにある。

以下のように実装されている:

  1. int,double,boolの基本型がある。
  2. 例えば、(int,double) - チャート上の座標、(x,b) - 線分方程式の係数、(a,b,c,d) - 最大4つの値をサポート。
  3. 指標は、1つの要素を持つ複合型の集合として表現される。
  4. 定数は複素数型として表現され、これらは最適化される戦略パラメータです。
  5. 関数は、特定の複素数型の変数を入力として受け取ります。
  6. 関数は、このデータがどこから来たかを気にしません。
  7. mql4で利用可能なすべての注文がサポートされている(6種類)
  8. ストラテジーが定義する注文は1種類のみ(買い、売り、買い_ストップ、...)。
  9. 未決済の注文には、グラフの上部に4つのノードがある:マーケット・エントリー条件、エグジット条件、tp、sl。
  10. ブロック(関数/グラフのノード)は、インジケータ、定数、他のノードから入力パラメータを取ることができ、他の多くのノードが1つのノードの結果から入力パラメータとしてデータを取ることができます。
  11. その後、グラフは逐次コードに変換され、このコードはエキスパート・アドバイザーに送信されて実行されます。
これがサンプルコードです:

#define
 symbol          GBPUSD;
period          60;
repeat_signal_skip      True;
stop_level              60;
trade           op_buy;
max_shift               13;
stack           4;
const           9;
cache           1;
#data
{True},{-1.26761795},{4.67108999},
{2.08088665},{-0.33782435},{22},
{1.63150050},{-11},{-0.22006371};
#program
 push    [0];
push    [1];
push    [2];
call    F_plus_d;
push    [3];
push    [4];
call    F_plus_d;
push    [5];
get     .Ichimoku_2;
call    F_plus_d;
push    [6];
call    F_minus_d;
save    [0];
push    [7];
get     .Open;
call    F_plus_d;
call    F_less;
load    [0];
push    [8];
#end

このコードは型制御の観点から正しく実行され、無意味な式はまだ考慮されていません。

コードでは単純な型のみが使用されています。

 

MQLはHTTPプロトコルでストラテジーを受信することができます。

ストラテジーの検索、ストラテジーのポートフォリオの作成、Expert Advisorへの転送など、すべてを完全に自動化したい。

MQLのシステムの一部は90%準備できており、多くのストラテジー(ポジション・コントロール、リスク、エラー処理など)に対応している。

やるべきことはまだたくさんある。

 
Yuriy Asaulenko:
戦略なら簡単じゃない。他は考えたことがないからわからない。とはいえ、どんなモデリングも、MTではなく特殊な環境の方が簡単だ。MTは最終製品であり、研究のために作られたものではないし、あまり適していない
同感です。私も最初はmatlabでモデリングしました。それでも、MTテスターはブラックボックスだ。
 
Aliaksandr Hryshyn:
意味のない表現の例をもう一つ挙げよう:=High>(Open-Close)、これも通らない。

なぜ無意味なのか説明してください。私ならこう書きます。

=High>MathAbs(Open-Close)

ю

 

Aliaksandr Hryshyn:

その後、グラフはシリアルコードに変換され、このコードはExpert Advisorに送られて実行されます。


どのようにするのですか?
 

常に真を返す)。

(オープン-クローズ)は常に(ハイ)よりも小さい。

 
Alexey Volchanskiy:

どのようにですか?
放送か演奏か、どちらですか?
 
Aliaksandr Hryshyn:

常に真を返す)。

(オープン-クローズ)は常に(ハイ)よりも小さくなる

ブレーキ ))))))))