Чёрный ящик - страница 4

 
Вот и ящик принесли :) 
 
Прошу подсказать как оптимизировать данные в советнике.
Остальное как бы есть.
Я и красивее могу показать, а толку ? Оптимизация всё равно в ручном режиме.
 

Попроще можно так: 

найти коэффициент - по средним МА 100 200 300 500.  И по коэффициенту робот автоматом будет менять настройки. 

 

К=(Бид/МА100+Бид/МА200....  )/н

И далее по пропорции.

 
Alexander Ivanov:

Попроще можно так: 

найти коэффициент - по средним МА 100 200 300 500.  И по коэффициенту робот автоматом будет менять настройки. 


Это уже персептрон. А как поподробнее прописать ? Что значит "бид" ?

 
Алексей Тарабанов:
Вот и ящик принесли :) 
Внимание, вопрос!
 
Igor Yeremenko:

...

лучше сразу ИИ для создания/генерирования пробыльных стратегий, т.е. задаются глобальные условия: рынки, TF, типы стратегии - а он (черный ящик) пусть сам все подбирает, тестирует, оптимизирует, создает новые правила входа и тд


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

Пример сгенерированного кода стратегии ниже. Стратегия имеет и осмысленное представление, что откуда и куда идёт, приводить пример не буду...

#define
symbol          EURUSD;
period          240;
repeat_signal_skip      True;
stop_level              50;
trade           op_buy;
max_shift               17;
max_tp          1200;
max_sl          300;
max_bars_active 27;
sleep_after_loss        5;
stack           6;
const           20;
cache           0;
#data
{9},{14},{16},
{2},{3},{16},
{13},{11},{12},
{1},{5},{11},
{1},{5},{15},
{7},{15},{14},
{11},{10};
#program
push    [0];
get     .PL_Down;
get     .PL_Down[];
push    [1];
call    F_point;
call    F_val_from_point;
call    F_minus_d;
push    [2];
get     .PL_Up;
push    [3];
get     .PL_ImpulseDown;
call    F_minus_d;
push    [4];
get     .PL_ImpulseUp;
push    [5];
get     .PL_Down;
call    F_minus_d;
push    [6];
get     .PL_Up;
push    [7];
get     .PL_ImpulseDown;
call    F_minus_d;
call    F_mean3;
call    F_less;
push    [8];
get     .Volume;
push    [9];
get     .Volume;
push    [10];
get     .Volume;
call    F_mean2;
call    F_minus_d;
get     .Volume[];
push    [11];
call    F_point;
get     .Volume[];
push    [12];
call    F_point;
call    F_line_from_points;
get     .Volume[];
push    [13];
call    F_point;
get     .Volume[];
push    [14];
call    F_point;
call    F_line_from_points;
push    [15];
call    F_ver_dist_betwen_lines;
call    F_less;
push    [16];
get     .Open;
push    [17];
get     .Low;
call    F_minus_d;
push    [18];
get     .Low;
push    [19];
get     .Close;
call    F_minus_d;
#end

Этот код советник исполняет, пока сделано только для MT4.

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

Основная фишка этой системы в том, что она корректно, с точки зрения смысла, манипулирует ценами(HLOC), индикаторами, графическими объектами(каналы, уровни,...), можно и другие элементы добавлять.

Например:

Open[3]>Close[10]  //Это корректное выражение
Open[3]>Volume[10] //А это уже не корректное, результат этого выражения не имеет смысла
 

  double OnTester()

  {

   double kCustom=0.0;

   

   if(TesterStatistics(STAT_EQUITY_DD)>0)

         {kCustom=NormalizeDouble(TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_EQUITY_DD),2);}

   

   else 

{kCustom=0;}

   return(kCustom);



Пока оптимизация остаётся наиболее приемлемым вариантом

 
 
Aliaksandr Hryshyn:


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

Пример сгенерированного кода стратегии ниже. Стратегия имеет и осмысленное представление, что откуда и куда идёт, приводить пример не буду...

Этот код советник исполняет, пока сделано только для MT4.

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

Основная фишка этой системы в том, что она корректно, с точки зрения смысла, манипулирует ценами(HLOC), индикаторами, графическими объектами(каналы, уровни,...), можно и другие элементы добавлять.

Например:


На 70% рынок находится в покое . 
Например можно попробовать определить формулой рынок покоя  и присвоить некую среднею этому значению . Измерять расстояние между этими значениями и записывать их в буфер.

На основе среднего значения буфера переменным ордера присваивать стоп и прибыль. 

Прошу определить формулу покоя.

На ум пока ничего не идёт кроме этого :

StdDev (i) = SQRT (AMOUNT (j = i - N, i) / N)

AMOUNT (j = i - N, i) = SUM ((ApPRICE (j) - MA (ApPRICE , N, i)) ^ 2)

где:

StdDev (i) — Стандартное Отклонение текущего бара;
SQRT — квадратный корень;
AMOUNT(j = i - N, i) — сумма квадратов от j = i - N до i;
N — период сглаживания;
ApPRICE (j) — примененная цена j-го бара;
MA (ApPRICE , N, i) — значение скользящей средней с периодом N на текущем баре;
ApPRICE (i) — примененная цена текущего бара.


Хотел бы услышать ваши предложения.

 
Aliaksei Karalkou:


На 70% рынок находится в покое . 
Например можно попробовать определить формулой рынок покоя  и присвоить некую среднею этому значению . Измерять расстояние между этими значениями и записывать их в буфер.

Хотел бы услышать ваши предложения.

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

вот такая запись:

//+------------------------------------------------------------------+
//|Фукция успокоение рынка                             |
//+------------------------------------------------------------------+
bool Peace(void)
  {
   bool result=true;
   MqlRates rates[];
//--- Загружаем информацию о последних 3-х барах
   if(CopyRates(_Symbol,_Period,1,3,rates)<3)
      return false;
   ArraySetAsSeries(rates,true);
//--- Загружаем значения МА на последних 3-х барах
   double MA[];
   if(CopyBuffer(g_hMA_Peace,0,1,3,MA)<3)
      return false;
   ArraySetAsSeries(MA,true);
//--- Проверяем попадание МА в тело свечи
   for(int i=0; i<3; i++)
      if(MA[i]<MathMin(rates[i].open,rates[i].close) || MA[i]>MathMax(rates[i].open,rates[i].close))
        {
         //--- Если МА выше или ниже тела возвращаем false и выходим из цикла
         result=false;
         break;
        }
   return result;