И еще одно "одно пожелание"

 
Когда появится возможность использовать генетические алгоритмы в тестировании, и какими они будут - мы не знаем. Как альтернативу, и может быть даже более удобную, предлагаю ввести функцию "Test(ExpertName, Symbol, TimeFrame...), запускающую советник, и "обрамляющие" функции для режима оптимизации "BeginTest" и "EndTest".

Пусть, например, мне нужно протестировать систему с двумя МА. В нынешнем тестере, если МА заключено между 3 и 365, то всего будет (365-3)*(365-3) циклов. Это много, и, главное, ненужно. Если в начале диапазона значений МА мне нужно каждое значение (3, 4, 5...), то в конце мне вполне хватит шага в 10 (300, 310, 320...) - просто в силу того, что изменение МА равного 300 на единицу не приведет к заметным изменениям в результатах.

В предлагаемом режиме тестирования, мы пишем скрипт, примерно такого вида:

BeginTest();    // Reset "Optimization results"
for(nMa1 = 3; nMa1 <= 350; nMa1 = nMa1 + nMa1 / 36 + 1)
{
        for(nMa2 = nMa1; nMa2 <= 365; nMa2 = nMa2 + nMa2 / 36 + 1)
        {
                Test(....);
        }
}
EndTest();    // Final cleanup



Этот простой подход сократит тестирование на порядок даже в этом, простом, случае.

Я понимаю, что данынй подход плохо уживается с компилируемым кодом. Но он возможен и, мне кажется, востребован.

С уважением,
Кварк

 
Вы и сейчас можете сократить оптимизацию, например так.

Вместо ма1 и ма2 вводите другую переменную оптимизации, из которой вычисляете нужные вам ма1 и ма2.

У меня примерно так генетика в Омеге устроена.
В самой Омеге есть только один параметр оптимизации - Generation,
который меняется от 1 до заданного числа (1000 к примеру).
Фактически он играет роль переменной цикла и считает прогоны системы.
А сами параметры вычисляются в модуле Генетического Оптимизатора.
 
Вы и сейчас можете сократить оптимизацию, например так.

Вместо ма1 и ма2 вводите другую переменную оптимизации, из которой вычисляете нужные вам ма1 и ма2.

У меня примерно так генетика в Омеге устроена.
В самой Омеге есть только один параметр оптимизации - Generation,
который меняется от 1 до заданного числа (1000 к примеру).
Фактически он играет роль переменной цикла и считает прогоны системы.
А сами параметры вычисляются в модуле Генетического Оптимизатора.


Да, никто не мешает сделать одну переменную цикла, и из нее считать, но...
Но чем больше таких переменных, тем сложнее становится эксперт. Кроме того, усложняется и его интерпретация - по одной переменной надо (когда вы просматриваете результат оптимизации) на лету рассчитывать МА1 и МА2 (а также buy level, sell level, stop loss, take profit, trailing stop...).
 
А что скажут разработчики? Возможно ли такое? Будет ли?
 
Пока разработчики молчат :) добавлю еще один аргумент в пользу подобного подхода. Вот я сейчас собираюсь в отпуск. При помощи нижеприведенного кода я мог бы (точнее, мой комп мог бы, в мое отсутствие) все мои эксперты на всех валютах поперетестировать:

for(int i = 0; i < nNumberOfCurrencies; i++)
{
    for(int j = 0; j < nNumberOfTimeFrames; j++)
    {
        Test(arrCurrency[i], arrTimeFtame[j]...



Ну, а если серьезно, то ведь и правда, почему бы не протестировать несколько конфигураций, чтобы потом не задавать себе вопрос "а может он на EURCHF лучше себя покажет".

Также, неплохо бы функции Test возвращать значения (те же, что мы бы увидели в соответствующей строке таблицы оптимизации, если трудно вернуть массив, то хоть в виде текстовой строки).

А еще :) можно сделать возможность для каждого нового теста или оптимайза поставить галочку "открыть в новом окне" - чтобы потом было можно сравнивать визуально.

А еще :)) хорошо бы сделать интерактивный режим рисования графика прибыли. То есть, я двигаю ползунок выбора по таблице результатов оптимизации, и в приталенном сверху (сбоку) окошке рисуется график. Чтобы тысячу раз не нажимать Set input parameters - Start - Graph.

Ну вот, план на год работы готов :)


----

Если вы считаете, что готовы торговать на Форексе, то пройти этот тест вам и вовсе не составит труда (http://www.gatchina.ru/homepage/tapakah/iqtest.htm)