コーディングのヘルプ - ページ 408

 
airquest:
まあ、それでも...以下は、いくつかのテストです。

- デフォルト設定(最適化なし、WriteCSVをTrueに設定):Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csvを 使用。

- 最適化をTrueに設定し、PeriodMinを20に、PeriodMaxを20に設定 :マイクロソフトエクセル - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

最初のものは、首尾一貫した値を与えます(CSVファイルと画面の結果が一致します)。どちらも同じ変数からきているので、それは正常です。しかし、2番目のものでは、optiの結果が画面の結果に比べてほぼ10倍になっています。とはいえ、最終的には同じ結果になるはずなのですが...。

とにかく、急がないで、多分時間が経てば何が間違っているのか分かると思います。Mladenの親切な手助けに感謝します。

Airquestさん、こんにちは。

ストラテジーテスターに代わる非常に興味深い方法をありがとうございます。

あなたのインジケータを少し使ってみたのですが...

合計のために2つの異なる変数を持っているように見えますが...

1つは通常の運用のためのもの = TotalTrades...

そして、最適化の実行のための1つ= totalTrades...

しかし、コメントには通常実行のTotalTradesしか表示されていません...

あなたのコメントに最適化された...totalTrades...を追加し、それがパズルを解決するかどうかを確認します...

これで、画面表示とスプレッドシートの合計の間になぜ違いがあるのかという疑問の答えが得られると思います。

お役に立てれば幸いです。

ロバート

 
cosmiclifeform:
Airquestさん、こんにちは。

ストラテジーテスターに代わるとても面白いものをありがとう...とてもクリエイティブで才能あるコーディングだね...!

あなたのインジケータを少し使ってみたのですが...

合計のために2つの異なる変数を持っているように見えますが...

1つは通常の運用のためのもの = TotalTrades...

そして、最適化の実行のための1つ= totalTrades...

しかし、コメントには通常実行のTotalTradesしか表示されていません...

あなたのコメントに最適化された...totalTrades...を追加し、それがパズルを解決するかどうかを確認します...

これで、画面表示とスプレッドシートの合計の間になぜ違いがあるのかという疑問の答えが得られると思います。

お役に立てれば幸いです。

ロバート

最終的な結果が正しいかどうかはわかりません。問題は、opti関数から 来る取引の合計を表示することで、関数がうまく動作しているかどうかを確認することができます。また、double関数から複数のパラメータを返す方法がよくわかりません(残高と勝率も返す必要があります)。しかし、主な理由は、結果に違いがあることを確認することで、関数に何か問題があるはずだということです...

 

こんにちは、私はRSIをベースにしたカスタムインジケーターを作りました。

これをEAで使おうと考えています。 私はそれを書くために助けを必要としています...

これは買いのみの戦略です。

すべての上昇シグナルで買い...下降シグナルで全て決済

理想的には、クローズせずに連続した上昇シグナルごとにEAのロットサイズを大きくすることです。(もちろん上限はあります)

このインジケータは、RSIが設定されたレベルを上回ったり下回ったりするたびに、チャート上に矢印が表示されることで機能します。

矢印_rsi.mq4

ファイル:
arrow_rsi.mq4  3 kb
 
airquest:
最終的な結果が正しいかどうかはわかりません。問題は、opti関数から来る取引の合計を表示することで、関数がうまく動作しているかどうかを確認できることです。また、double関数から複数のパラメータを返す方法がよくわかりません(残高と勝率も返す必要があります)。しかし、主な理由は、結果に違いがあることを確認することで、関数に何か問題があるはずです...

エアクエスト

関数から 必要なだけのパラメータを「返す」ためには、関数に参照でパラメータを渡します。次のようなものです。

double a;

double b;

double c = testFunction(a,b);

double tectFunction(double& _a,double& _b)

{

_a = 1;

_b = 2;

return(_a+_b);

}

この後、a と b には testFunction によって 1 と 2 の値が割り当てられます (この例では暗黙のうちに 3 つの値を「返して」います。関数内で _a と _b の名前を使ったのは、参照渡しでは同じ名前である必要はまったくないことを示すだけで、それ以外はまったく必要ありません)。

 
airquest:
最終的な結果が正しいかどうかはわかりません。問題は、opti関数から来る総取引を表示することで、関数がうまく動作しているかどうかを確認できることです。また、double関数から複数のパラメータを返す方法がよくわかりません(残高と勝率も返す必要があります)。しかし、主な理由は、結果に違いがあることを確認することで、関数に何か問題があるはずです...

こんにちは、Airquestです。

見たところ、あなたのインジケータは問題なく動作しているようですね。

計算の問題ではなく、「値の表示」の問題だと思います。

以下は、私が見たインジケーターでの出来事です。

プログラムには2つのオプションがあります - 1) 通常実行 2) 最適化実行

この2つのオプションは、どちらか一方だけを選択するものではありません...

最適化が選択されていない場合、プログラムは通常の実行を行います。

最適化が選択されている場合、プログラムは通常実行を行い、さらに最適化実行を行うので、両方の値を得ることができます。

しかし、画面のコメントには通常運転の値のみが表示され、最適化の値は全く表示されません。

画面に表示されるOptimizationの値がスプレッドシートの 値と同じであることを示す私のテストを添付しています...

これは、あなたの計算がすべてうまくいっていることを示しています...

また、最終的なOptimizationの値を得るためにスプレッドシートの最後のレコードを使用しているように見えます...

また、他のチャート/指標をロードせずに実行し、一度にいくつかの選択された値のみを使用してテストすることをお勧めします。

20以上のチャートを走らせていると、MT4がこのインジケータの計算を行う際に無反応になってしまうのです...

最適化テストを行うには、クリーンなMT4セットアップを使用した方が良い...

しかし、良いニュースは、それが数字を計算し、レポートを作成している間、他のことをすることができるので、私のシステムをロックしないことです。

とりあえず、下のスクリーンショットを見る限りでは、あなたのインジケータはうまく機能しているようですね。

ところで...これは素晴らしいコーディングの一部です...。共有してくださって、本当にありがとうございます...!

お役に立てれば幸いです。

ロバート

 
cosmiclifeform:
Airquestさん、あなたのインジケータは正常に動作しているようですね。

どういたしまして、お言葉ありがとうございます。このアイデアは、単純な戦略のバックテストを行うためのmt4戦略テスター 最適化(私は最悪で遅すぎると思う)を置き換えるために、確かにある。確かに、ロードして計算するのに少し待つ必要がありますが、私が見たところ、すでに通常の最適化よりも高速で便利です。

ただ、やはりインジケーターに問題があり、正常に動作していないような気がします。画面のテキストを最適化の結果で置き換えても、この出てきた結果が正しいのか間違っているのかが全く分かりません。錆びた車にペンキを塗るようなものです。

最適化機能は間違った結果を出しているのだと思います。スクリーンショットを見ると、CSVの結果が5'307トレードになっているのがわかります。これは、非常に高い値です。画面に表示されているバーの数にもよりますが、ストラテジーが5'307回もの取引を行うことはありえません。念のため、矢印の数を数える必要はなく、このスクリーンショットで行ったように、テストするバーの数を減らすことができます(私は100バーに設定しました)。

100本の場合、10回の取引で4回の勝者(矢印を数える)、一方optiの結果は89回の取引であることがわかります。つまり、視覚的なバックテストに基づくと、画面の結果は正しく(optiが言った最良の期間について)、CSVは間違っているのです。つまり、CSVの結果は、トレードをカウントするにも、どの設定がベストなのかを判断するにも、信用してはいけないということです。

そこで、この問題をもっとシンプルに考えてみました。Optimization double関数とStart int関数(主な計算)の結果を画面に表示する簡単なインジケータを作りました(添付)。そのため、CSVを書かなくても、両者の結果が異なることが分かります。

このインジケータを元に、私の(素朴な)疑問は.なぜ、全く同じ2つの計算(Start関数とOptimization double関数)が異なる結果をもたらすのでしょうか?もし誰かがこれを理解するのを助けてくれるなら、それは素晴らしいことです。私が見る限り、この2つは全く同じで、同じ結果が出るはずです。どうもありがとうございました。

PS : インジケータはまだ少し遅く、おそらく結果が表示されるまで数秒待つ必要があるでしょう。しかし、結果が出ると音が出ます。

ファイル:
sa1.png  78 kb
sa3.png  41 kb
 

こんにちは、Airquestです。

サンプルテスト」を試してみましたが、うまくいきませんでした。コードを見てみると、400行以上削除されていましたので、そのままにしておきました。

元のコードのテストに戻りましたが、「トレードが多すぎる」という問題について、おっしゃることがわかり始めてきたように思います。

テストはシンプルかつ迅速に行うため、Bandsのみを使ってテストし、設定(Bands 10とBands 20)を最小化し、結果を早く見るために2回だけ実行しました。

また、「BarsToCount」がトレード回数に直結しそうなので、「BarsToCount」に着目してみました...。

答えは見つかりませんでしたが、もう少しヒントがあるかもしれません。

"BarsToCount "が機能しないようです...。

私はあなたのコードを1本、2本、そして100本のバーで実行しました...。

そして、すべてが全く同じ結果でした...それは、より多くのバーがより多くの取引を意味し...そしてより少ないバーがより少ない取引を意味するはずなので...ありえないことです。

私は、"BarsToCount "のみを変更して行った3つの実行のスクリーンショットを添付しています...

多分、この手がかりは、他の問題を追跡するのに役立つと思います。答えが見つかると良いですね。

お役に立てれば幸いです。

ロバート

ファイル:
 

ようやく動作するバージョンを作ることができました。これでオプティーの結果が正しく、スクリーンの結果に対応するようになりました。二重関数をやめて、すべてStartのほうに入れました。これで、テスターモード(デフォルトの設定を使う)か、オプティマイザーモード(何も描画せず、CSVファイルを書き出すだけ)のどちらか一方を選ぶだけとなりました。最適化を実行した後、テスターモードに戻り、結果が正しいかどうかをチェックすることができます。

このスレッドを荒らしたくないので、何か問題が見つかったらPMで知らせてください。皆さん、ご協力ありがとうございました。このフォーラムは素晴らしく、人々は(ほとんどの場合)お互いにやる気を起こさせ、助け合い、それが私がここで公開する理由です。では、バックテストを始めましょう

 
cosmiclifeform:
こんにちは、Airquestです。

Robertさん、ありがとうございます。上に投稿したバージョンを参照してください、これで動作するはずです。

PS :バーの数を 制限するために、UseAllBarsをFalseにする必要があります。おそらく、あなたはそれを見ていませんでした。

よろしくお願いします。

 

こんにちは、Airquestです。

よくぞ追跡し、動作させた...!

今週はこれで遊ぶのが楽しみだ...。

ありがとうございます、そしてお元気で。

ロバート