// #define TESTER_FILE // Советник будет работать не только на локальных Агентах, но и в Облаке.#ifdef TESTER_FILE
// Нужно компилировать (не запускать) советник, когда этот файл (с любым содержанием, хоть пустой) лежит в Песочнице.// Иначе Тестер не будет видеть эти данные, даже если соответствующий файл с ними положить после компиляции на место. #property tester_file__FILE__constint FileCommon = 0;
#else
constint FileCommon = FILE_COMMON;
#endif // TESTER_FILEsinputbool Rand = false; // Вкл/выкл. перемешиваниеsinputint NumPass = 10001; // Количество проходов// Фитнесс-функцияdouble Func( constdouble X )
{
// return(X); // Проверка, что Агенты считывают нужные данныеreturn(-X * X + 1); // Парабола с максимальным значением в единице - его и будем искать
}
// Меняет местами элементы массиваtemplate <typename T>
void Swap( T &Array[], constuint Pos1, constuint Pos2 )
{
const T Tmp = Array[Pos1];
Array[Pos1] = Array[Pos2];
Array[Pos2] = Tmp;
}
// Возвращает случайный индекс массиваuint GetRandPos( constuint Size )
{
return(MathRand() * (Size - 1) / SHORT_MAX);
}
// Перемешивает элементы массиваtemplate <typename T>
void Mixing( T &Array[], constuint AmountIterations )
{
constint Size = ArraySize(Array);
MathSrand((uint)TimeLocal()); // Повторные запуски Оптимизатор будет игнорировать - build 1881for (uint i = 0; i < AmountIterations; i++)
Swap(Array, GetRandPos(Size), GetRandPos(Size));
}
// Вычисляет интервал оптимизацииvoid SetInterval( double &Array[], constdouble Begin, constdouble End, constuint Amount )
{
if (Amount > 1)
{
constdouble Step = (Begin - End) / (Amount - 1);
double Tmp = End;
for (int i = ArrayResize(Array, Amount) - 1; i >= 0; i--, Tmp += Step)
Array[i] = NormalizeDouble(Tmp, 8);
}
}
#define TOSTRING(A) #A
voidOnTesterInit()
{
ParameterSetRange(TOSTRING(NumPass), true, 0, 0, 1, NumPass - 1); // Задали Оптимизатору количество проходов = NumPassdouble Array[];
SetInterval(Array, -1, 1, NumPass); // Выстроили значения интервала по порядкуif (Rand)
Mixing(Array, NumPass * 10); // Перемешали все в интервале// ArrayPrint(Array); // Проверка, что Агенты считывают нужные данныеFileSave(__FILE__, Array, FileCommon); // Записали файл-интервал.А ведь так можно передать в Облако хоть содержимое всей Песочницы + полный стейтмент.
}
voidOnTesterDeinit()
{
if (FileCommon)
FileDelete(__FILE__, FileCommon); // Удалили файл-интервалChartClose(); // Закрыли чарт Frame-выполнения советника
}
doubleOnTester()
{
double Array[];
// Считали точку из интервала и вернули значение фитнесс-функции в нейreturn((FileLoad(__FILE__, Array, FileCommon) != -1) ? Func(Array[NumPass]): 0); // В режиме не-tester_file FileLoad будет выдавать ошибку, если два Агента одновременно обратятся.
}
それは何ですか?不正解の箇所を最も近い修正箇所に置き換えることで、「?同じ不正でも、それをどう分配するかですべてが決まると思っています。一番近い補正-がトップから離れることは十分あり得ることです。
そして、間違ったパラメーターのセットではなく、正しい結果が得られることが判明するのです。最大値を取得し、その値は誤ったパラメータのセットである?
正直、問題ないと思います。しかし、今議論しているバリアントに関する私の力量はゼロです。
これらの問題については、@Andrey Dikが助けて くれると思います。しかし、通常のGAに対する建設的な批判もうまくいかなかった......。
禁止されています、残念ながら。運営にBAN解除の光線を送る、さて、いつまでできるかな?
有効な鎖だけを番号で出力する関数を書いてみてはどうでしょうか?
まず思いつくのは117649の値の表で、この表から遺伝子が数字を探すようにする。
いや、有効な鎖があるテーブルはもっと小さくなるはずだが、5000本あったとしても、どう書けば混乱しないのか?
いや、正しい鎖がある表はかなり小さくなるのですが、5000本あっても、どう綴れば混乱しないのでしょうか。
ファイルダンプにそして、パス番号を調べて、ファイルにあるものと照合します。
ファイルリセットの中へそして、パス番号を見て、ファイルにあるものと照合します。
つまり、処方箋を書く作業そのものを、いかに混乱させないか、繰り返さないか、見逃さないかということです。
つまり、処方箋そのものを、いかに混乱させないか、繰り返さないか、見逃さないか、ということです。
この例では、forループを配置する順番によって、結果が大きく変わります。すべては、この特殊性のため。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MT開発者向けではありませんINIT_PARAMETERS_INCORRECTを何に置き換えたらいいのでしょうか?
fxsaber さん 2018.07.10 16:27
y = x^2 の完全な列挙をトレースすれば明らかです。次に、オプティマイズの行をランダムにシャッフルし、シャッフルに基づいた新しいセットを作成します。そうすると、GAは放物線の頂点を見つけることができません。
一週間も前に似たようなスレッドで一瞬アク禁になり、スレッド/アンケートが根こそぎ不要なページとしてボロボロになったことがありました。
質問に関しては、禁止されている組み合わせをすべて除外することが最適であると既に書きましたが、これは開発者が最適に行うことができます。そうでなければ、すべての組み合わせを実行して、許可された組み合わせだけをファイルに保存し、そのファイルを既にロードしてジェネティクスを使って最適化するスクリプトを作成する必要があります。
筆者の問題は、プログラムのアーキテクチャにあると結論づけたい。
ご意見ありがとうございます。しかし、ここではプログラムのアーキテクチャについての議論はしていません。念のために言っておくと...
明らかにy=x^2のフルエニュメーションをトレースすれば。次に、オプティマイズの行をランダムにシャッフルし、シャッフルに基づいた新しいセットを作成します。GAでは放物線の頂点を見つけることができません。
オプティマイザーのマットモードのExpert Advisorをテスト作成しました。
例を書いている間に出てきたMT5の脆弱性、弱点、現状のエラーに赤で 印をつけました。