SOM: способы приготовления - страница 3

 

alexeymosc!

> Сделал анализ для пары GBPUSD на дневных барах, с 1989 по 2011 гг

[...]

> OOS-период (с начала 2010 г. по настоящий день).


Это опечатка или таки бОльшая часть OSS случайно натянулась на период анализа?

 
Ха, хороший вопрос.
 
Все просто. Сеть строил по данным с 1989 по конец 2009. А проверял полученную стратегию с начала 2010 года... Чо вы так напряглись, не понимаю? Сами повторите анализ и убедитесь.
 
Лучше бы сказали что то по делу, сами просили данные и молчат.
 
alexeymosc:
Лучше бы сказали что то по делу, сами просили данные и молчат.


Здравстуйте, Алексей!

Думаю, что Ваши результаты многих здесь заинтересовали. Постараюсь объяснить "со своей колокольни", поэтому прошу сильно ногами не топать и рогами не колоть!

Если выполнить преобразование: Cycle = Close[]-ma(Close[], 25), то получим стационарный сигнал (mean = Const, sigma = Const). И будем пытаться строить торговую систему на этом ряду Cycle с помощью SOM и того же самого паттерна длиной 40. Будет получена хорошая, робастая система... А на обычном ценовом ряде присутствуют стохастические тренды, которые обусловлены инфляцией, дефляцией и прочими внешними фундаментальными факторами. И эти тренды стохастические не дают многим получить устойчивые системы. Как с ними бороться используя только ценовой ряд одного инструмента мне не ясно. И Ваш результат на обычном ценовом ряде весьма приятно удивил!

 

Спасибо! Про преобразование пониманию. В моем случае захотелось выжать результат из "просто цены". Был, честно говоря, вдохновлен некоторыми товарищами, которые торгуют чисто на цене и причем успешно (на этом форуме такие сообщения встречались).

Меня тоже результат удивил немного, но я вижу пока слабые стороны такой стратегии, а именно просадки (даже на периоде обучения SOM) и невысокая частота сделок. Получается около 250 пунктов в месяц. Если запустить на нескольких инструментах, получится, скажем, 1000 пунктов в месяц, но 1) нерегулярно и 2) просадки еще вырастут.

Абстракто размышляя, воспринимаю задачу получения прибыли (пусть на бумаге) на Форексе как задачу в практически бесконечно мерном пространстве. И поэтому стараюсь "тыкать" в разные места это пространства, так сказать. Ну - иногда локальные, несовершенные, решения задачи всплывают.

 

alexeymosc, если не сложно, давайте немного обстоятельнее, тема для меня довольно интересна. Для начала дайте скрипт которым данные подготовили, или методику подготовки данных, да и по большому счету хотелось бы конечные результаты иметь в mql, а не в exel, если есть проблемы с переходом на mql пишите, думаю поможем, а я заодно и подучусь программированию НС - никак не разберусь самостоятельно, заранее спс.

 

)) Все уже есть в экселе ( я выкладывал 2 архива). Наверное, я с ним просто очень дружу, и думаю, что все так...

Но, к делу!

Скрипта у меня нет. Но реализовать формирование входов в MQL не сложно. Считаем по ценам открытия максимум и минимум за последние 40 баров, включая последний завершенный. И далее преобразовываем цены открытия по широко известной формуле: (Open-Min) / (Max - Min), таким образом формируя вектор из 40 значений, причем значения будут в диапазоне [0;1].

Далее я лично предпочту обучить СКП в нейропакете и сделать dll-файл, который будет общаться с советником. Это просто удобно для меня, плюс удобно делать весь анализ в том же Экселе. Можно заморочиться и запрограммировать обучение SOM на языке MQL, это тоже вариант, но я НЕ программист, не помогу.... Я могу подготовить заготовку советника для тестера вместе с dll-файлом самоорганизущейся карты, а мы можем совместно довести сам код и какие-то нюансы до ума.

Кстати, можно не только на дневках торговать. Я меня получился плюс на OOS-периоде даже на 15-ти минутках ), но просадки были здоровые...

 
alexeymosc:

Считаем по ценам открытия максимум и минимум за последние 40 баров, включая последний завершенный. И далее преобразовываем цены открытия по широко известной формуле: (Open-Min) / (Max - Min), таким образом формируя вектор из 40 значений, причем значения будут в диапазоне [0;1].

наверное такой скрипт:

//+------------------------------------------------------------------+
//|                                                     SOM_data.mq4 |
//|                               https://www.mql5.com/ru/users/igorm |
//|                               https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "https://www.mql5.com/ru/users/igorm"
#property link      "https://www.mql5.com/ru/users/igorm"

extern int     NumBars = 40;
extern string  FileName = "som_data.csv";

int start(){
   int i,Max,Min,file_handle;
   double _open[];
   double out,max_min;
   ArrayResize(_open,NumBars);
   file_handle = FileOpen(FileName,FILE_CSV|FILE_WRITE);
   if(file_handle<1){
         Print("Файл ",FileName,"не открыт для записи, ошибка №", GetLastError());
         return(0);
    }
    for(i=1;i<=NumBars;i++) _open[i-1] = Open[i];
    Max = ArrayMaximum(_open);
    Min = ArrayMinimum(_open);
    max_min = _open[Max] - _open[Min];
    if (max_min ==0){
         Print("Деление на ноль, невозможно выполнить код");
         return(0);
    }
    for(i=1;i<=NumBars;i++){
        out = (Open[i]-_open[Min]) / max_min;
        FileWrite(file_handle,out);
    }
return(0);
}
//+------------------------------------------------------------------+

код немного длинный получился, но вроде бы должен быть понятен без коментариев

ЗЫ: с экселем, я дружу, но очень редко - на уровне калькулятора )))

 

Спасибище!

Скрипт работает, значения выдает верные.

Я сейчас думаю над файлом SOM, попробую его подключить к советнику.

Причина обращения: