オープンプロジェクト - テスタ・オプティマイザを自社開発 - ページ 2

 
ただ、コンパイラの反応が事前にわからないのですが、インジケータ本体の取引定数を通すのか、通さないのか?<br /> 翻訳="no"> おそらくそうでしょう。

もちろん、そうであるべきです。これらはすべて単なる整数であり、別の型ではありません。

ちょっとしたコツ

もちろん、テスター用に戦略を書き換えないことが望ましい。 一度書いた戦略は、テスターでもテスターなしでも(実世界でも)機能するはずである。

これは、図書館の力を借りれば可能です。
1.取引に関連するすべての機能は、その名前を少し変更します(私の... - あまり良くない、多分良い_......)。
2.2つのライブラリを作成します。最初のものはテスト用のコード(実際には注文を送信しない)を含み、2番目は標準的な関数の呼び出しのパラメータを重複させるだけです。ワーク/テストの切り替えは、ライブラリを入れ替えるだけで完了します。

もちろん、1つのライブラリにまとめて、グローバルなパラメータを導入して切り替えることも可能ですが、おそらく不要でしょう。

そして、このようなテスターの作成を根本的に簡素化する、もう一つの機能、現在の最後のバーを設定する機能をMTに導入することができれば、素晴らしいことだと思います。

例えば、テスト対象のヒストリーに1000本のバーがあるとします。
200バーを最後のバーとして定義し、Close[0]の代わりにClose[200]を使用することにしましょう。この機能は、すべての内蔵機能で動作する必要があります。

そして、この値が設定されたバー番号(テストの最後のバー)とストラテジー内のstart関数の呼び出しが ループしているように見えるでしょう。

実は、そんなに単純な話ではないのです :))
もうちょっとポイントが欲しい.
 
よくわからないのですが、説明してください
2.2つのライブラリを作成します。最初のライブラリにはテスト用のコード(実際には注文を送信しない)が含まれており、2番目のライブラリには標準的な関数呼び出しのパラメータが単純に複製されています。動作/テストの切り替えは、ライブラリを入れ替えるだけで
可能です。
テストのためのコード」という言葉は、テスターコードなのかEAコードなのか?もっと具体的に。

それも
例えば、テスト対象のヒストリーに1000本のバーがあるとします。
200本のバーを最後のバーとして定義し、Close[0]の代わりにClose[200]をあらゆる場所で使用します。
そして、このフィックは、すべてのインライン関数で動作(影響)するはずです。


どんなEAコードでも、簡単にインジケーターのコードに変換できます。
EAのstart()ブロックに、for(testerconter=Bars;testerconter>=0;testerconter--)を追加します。
{
かっこでくくる
}
リファレンスを使用している箇所を全て[testerconter+reference]に置き換えてください。

以下は、組み込みのMACD_sample.mq4 Expert Advisorの例です。
ソースコードです。
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,1);


モディファイド

   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+1);


ご覧の通り、全く問題ありません。もし必要なら、いつでも testerconter=0 を再定義することができます。
のコードはExpert Advisor本体で実行され、Expert Advisor本体では実行されません。

 
テストのためのコード」という言葉は、テスターコードなのかEAコードなのか?もっと具体的に。

最初のライブラリでは、関数
_OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid + Stop * Point, Bid - Take * Point);


はテスターでの注文実行を エミュレートします。つまり、テスターの注文リストに追加し、サーバーには注文を送りません。

2番目のライブラリでは、この関数は単に組み込み関数を呼び出すだけです。

int _OrderSend( string symbol, int cmd, double volume, double price, int slippage, 
                double stoploss, double takeprofit, string comment=NULL, int magic=0, 
                datetime expiration=0, color arrow_color=CLR_NONE) 
{
   return (OrderSend(symbol, cmd, volume, price, slippage, stoploss, 
                        takeprofit, comment, magic, expiration, arrow_color) );
}


Expert Advisorのどのコードも、インジケーターのコードで簡単に作り直すことができます。
EAのstart()ブロックに、for(testerconter=Bars;testerconter>=0;testerconter--)を追加します。
{
かっこでくくる
}
リファレンスを使用している箇所を全て[testerconter+reference]に置き換えてください。

そういうことなんです。
置換の代わりにMTで変数testerconterの値を設定する関数(デフォルトでは0)を呼び出し、この置換([testerconter+reference])をMT自体で行う方が簡単でしょう。
そうすれば、戦略そのものにこのような代入をする必要はない。

for(testerconter=Bars;testerconter>=0;testerconter--)
{
   SetTestPoint(testerconter);
      далее текст эксперта без переделки,
      или лучше вызов его функции start (или _start)
}



preに置き換えてください。で引用するプリ、「つまり、...に1000本のバーがあるとします。
をクリックしないと、またページが消えてしまいます。

 
quoteに置き換えたら、文字が消えてしまったようなので、例の文字列 の強制翻訳を 作る
凡そ
int _OrderSend( string symbol,...)


私の結論:同じことを話しているようだ。今のラストバーのリクエストはとりあえず忘れてもいいんだー。
そうするように努めなければなりません。
とりあえず標準的な取引関数、接頭辞_を再定義するだけです。ということで、さらに立派になりました :)
 
to avm
このような形でのテストが可能です。そして、それで十分なのです。でも、残念ながらユニバーサリズムは得られません。<br / translate="no">そんなテストに2週間ほど費やしました。一見、シンプルに見える。


血眼になって」テストした、つまり取引機能の 再定義をしなかったのではないでしょうか。そして、新しいテストのたびに
新しいテストのたびに、新しいテスター・インジケータを書く必要があります。でも、1回だけでいいんです。問題ありません。
間違っていたら-機能を投稿してください-ケチらないでください。
 
もう一点。

Expert Advisorからstart関数を 直接呼び出す ことはできないようです。
したがって、Expert Advisorのコードをライブラリに記述し、そこに_init、_deinit、_startの各関数を用意するのがよいでしょう。

Expert Advisorでは、次のように記述します。
#include ".....";
   ...............

int init()
{
   return(_init());
}

int deinit()
{
   return(_deinit());
}

int start()
{
   return(_start());
}


パラメータがどうなっているのか、ちょっと不明ですが。

 
ちなみに、1つのチャートに複数のEA/シグナルを組み合わせることができます。
オメガでやっているように。
#include "A1.....";
#include "A2.....";
   ...............

int init()
{
   _initA1();
   _initA2();
   return(0);
}

int deinit()
{
   _deinitA1();
   _deinitA2();
   return(0);
}

int start()
{
   _startA1();
   _startA2();
   return(0);
}


あまりいいものではありませんが、これなら大丈夫です。
一般的には、自作のイベント処理 システムが動作します :))

 
もしかして、その方が楽?パーサースクリプトを作成し、それをmq4ファイル(Expert Advisorのコード付き)に適用します。
このコードを処理し、あらゆる種類のインクルードを挿入し、バランス、エクイティなどのためのアレイを動作させます。
変数 Lots を _Lots (その他) にリネームします。一般的には、大まかな仕事をこなす。
出力したものをファイリングして行くだけです。:)
シンプルなコンベア方式。
 
to avm<br /> translate="no">。
このような形でのテストが可能です。そして、それで十分なのです。でも、残念ながらユニバーサリズムは得られません。そんなテストに2週間ほど費やしたことがあります。一見、シンプルに見えますね。

血眼になって」テストした、つまり取引機能の再定義をしなかったのではないでしょうか。そして、新しいテストをするたびに、新しいテスターのインジケータを書く必要がありました。しかし、一度だけ行えば、もう問題はないのです。間違っていたら、機能を投稿してほしい。ケチらずに。

全くその通りです。"大いなる血"交代要員はいなかった。MT3.xの頃、このようなテスターを作ったことがあります。MQL4とMQL2は、空と地ほどの違いがあります。しかし、MQL4は活用できていません。精神的にまいっている。まず考えて、それから仕事をするべきだった。
その女性は、「先に考えて、後で話しなさい」とアドバイスされた。女性はこう答えた。"まだ言っていないことをどう考えればいいのか "ということです。
 
パーサーのことは少し先走りましたね、関数は先に書く必要があります。でも、開発者が多通貨テスター(ポートフォリオテスター)は出ないと言っていたのを覚えています。それとも、私が何か勘違いしているのでしょうか? もし私が混乱していないなら - 自分で書けばいいだけのことです。