Cálculo da diferença, exemplos. - página 14

 
Aleksey Panfilov:

Eu tenho experiência em criar um indicador de equilíbrio, isto vai chegar perto de criar um hiperparâmetro?

não tenho certeza, se não há uma correlação real, então pode não ajudar... na verdade esta é a questão que todos estão confundindo no MoD :)

 
Maxim Dmitrievsky:

Não sei se não há uma correlação real, pode não ajudar... essencialmente esta é a questão que todos estão confundindo no MoD :)

:)

Só no caso de uma imagem, indicador de equilíbrio (janela inferior).

Equilíbrio constante de passos, linha verde significa.

 
Aleksey Panfilov:

:)

Só por precaução, imagem, indicador de equilíbrio (janela inferior).

Equilíbrio constante de passos, linha verde significa.

Oooh!

+

 
Aleksey Panfilov:

:)

Só por precaução, imagem, indicador de equilíbrio (janela inferior).

Equilíbrio constante de passos, linha verde significa.

O equilíbrio não é necessário em valores absolutos, mas, por exemplo, o fator de lucro é atual... ou seja, de alguma forma normalizar o gráfico

ou seja, posso normalizar o gráfico de alguma forma. então é possível relacionar esta variável com o resto de alguma forma, por exemplo, usando a lógica fuzzy ou um neurônio.

 

R^2 seria uma grande ajuda

https://www.mql5.com/ru/articles/2358

R-квадрат как оценка качества кривой баланса стратегии
R-квадрат как оценка качества кривой баланса стратегии
  • 2017.10.24
  • Vasiliy Sokolov
  • www.mql5.com
Каждая торговая стратегия нуждается в объективной оценке ее эффективности. Для этого используется обширный ряд статистических параметров. Многие из них просты в расчете и показывают интуитивно понятные метрики. Другие сложнее в построении и в интерпретации значений. Несмотря на все это многообразие, есть очень мало качественных метрик для...
 

Depois, adicione seus indicadores e R^2 como termos de entrada, depois descreva linguisticamente as regras de interação entre as variáveis e obtenha um sinal no output

este é apenas um exemplo, você também pode usar neurônio (também há artigos), mas a lógica difusa me parece mais flexível e intuitiva para estas tarefas, e também pode ser otimizada como um neurônio ou seus parâmetros, mas haverá menos intuições

https://www.mql5.com/ru/articles/3795

Нечеткая логика в торговых стратегиях
Нечеткая логика в торговых стратегиях
  • 2017.09.18
  • Maxim Dmitrievsky
  • www.mql5.com
Трейдеры часто задаются вопросом о том, как улучшить торговую систему или создать новую за счет машинного обучения. Несмотря на обилие публикаций, остается открытым вопрос о простом и интуитивно понятном способе создания моделей, которые невозможно аналитически просчитать без использования компьютерных вычислений. Нечеткая логика — это окно в...
 

Obrigado pelas mensagens.

Infelizmente, neste momento, não estou familiarizado com a aprendizagem de máquinas. E eu não vou dominar isso tão cedo.

Eu estava planejando usar o indicador de equilíbrio para uma otimização rápida e contínua. Infelizmente, temos de desenvolver um análogo do indicador de equilíbrio e um script para procurar parâmetros para cada Expert Advisor. Acho que é realista incluir estes algoritmos no robô para otimização automatizada. Em princípio, é provavelmente a mesma aprendizagem da máquina, mas a um nível auto-fabricado.

Talvez eu também vá chegar a isso.

Entretanto, talvez alguém ache útil o que eu tenho. Indicador de equilíbrio para MT4.

int start()
  {
  
   int    i;
   int    counted_bars=IndicatorCounted();
//----
   if(Bars<=3 ) return(0);
   if (PRED_CHISLO_BAROV == Bars) return(0);
 
   i=Bars-1;// i присваиваем значение числа баров  .
   if(counted_bars>1) i=Bars-counted_bars-1;// 
   while(i>=0)                                
     {

//================================================================================================================================================================================================
   MacdCurrent = iCustom( NULL, 0, "_________________",
                                                           0,i);
   MacdPrevious = iCustom( NULL, 0, "_______________",
                                                         0,i+1);

   SignalCurrent = iCustom( NULL, 0, "_____________",
                                                         1,i); 
   SignalPrevious = iCustom( NULL, 0, "_____________",
                                                         1,i+1);
                                                          
   MacdCurrent_Trend = iCustom( NULL, 0, "______________",
                                                            0,i); 
   MacdPrevious_Trend = iCustom( NULL, 0, "___________________",
                                                          0,i+1);

   SignalCurrent_Trend = iCustom( NULL, 0, "__________________",
                                                          1,i); 
    if(Trend_InpSignalSMA==0) SignalCurrent_Trend = 0; 


   SignalPrevious_Trend = iCustom( NULL, 0, "_______________",
                                                          1,i+1);
     if(Trend_InpSignalSMA==0) SignalPrevious_Trend = 0; 
                                                         
//================================================================================================================================================================================================
//  Оцениваем в какой позиции мы стояли бы по трендовому MACD  И назначаем Trend =1 восходящий =-1 низходящий

    if( 
  MacdPrevious_Trend < 0    &&                                                             //1) основная линия MACD ниже 0
  MacdCurrent_Trend > SignalCurrent_Trend && MacdPrevious_Trend < SignalPrevious_Trend &&  //2)  основная линия только что пересекла сигнальную с низу в верх
  MathAbs(MacdPrevious_Trend) > (Trend_MACDOpenLevel*Point)                                //3) основная линия ниже заданного для открытия значения 
      )                                                             Trend =1;

    if( 
  MacdPrevious_Trend > 0     &&                                                           // 1) основная линия MACD выше 0
  MacdCurrent_Trend < SignalCurrent_Trend && MacdPrevious_Trend > SignalPrevious_Trend && //-  основная линия только что пересекла сигнальную с низу в верх
  MathAbs(MacdPrevious_Trend) > (Trend_MACDOpenLevel*Point)                               // - основная линия выше заданного для открытия значения 
      )                                                             Trend =-1;

//================================================================================================================================================================================================
//РАСЧЕТ ЛИНИИ БАЛАНСА.

// Закрываем позицию SELL
    if(
  (  
   Posic == -1 &&                                                // Если открыта позиция SELL 
  MacdPrevious < 0  &&                                            // 1) основная линия MACD ниже 0
  MacdCurrent > SignalCurrent && MacdPrevious < SignalPrevious && //-  основная линия только что пересекла сигнальную с низу в верх
  MathAbs(MacdPrevious) > (Ind_MACDCloseLevel*Point)              // - основная линия ниже заданного для закрытия значения 
  ) || (
  Posic == -1 && (Cena_0 - Open[i])/Point * Naprav >= TakeProfit
  ) || (
  Posic == -1 && (Open[i] - Cena_0)/Point * Naprav >= StopLoss
  )
      )                                              
  {  
    if( Cena_0 > 0 ) Balans = Balans +(Cena_0 -Open[i])/Point * Naprav  ; 
        Cena_0 = 0;             Posic = 0;   Capital = 0 ;
  }

// Открываем позицию BUY
    if(
  Trend == 1 &&
  Posic == 0 &&                                                   // Если позиция зарыта
  MacdPrevious < 0   &&                                           // 1) основная линия MACD ниже 0
  MacdCurrent > SignalCurrent && MacdPrevious < SignalPrevious && //-  основная линия только что пересекла сигнальную с низу в верх
  MathAbs(MacdPrevious) > (Ind_MACDOpenLevel*Point)               // - основная линия ниже заданного для открытия значения 
      )
      {   Cena_0 = Open[i];     Posic = 1;  Balans = Balans - Spred; }


// Закрываем позицию BUY
    if(
  (
  Posic == 1 &&                                                    // Если открыта позиция BUY
  MacdPrevious > 0  &&                                             // 1) основная линия MACD выше 0
  MacdCurrent < SignalCurrent && MacdPrevious > SignalPrevious &&  //-  основная линия только что пересекла сигнальную с  верх в низу 
  MathAbs(MacdPrevious) > (Ind_MACDCloseLevel*Point)               // - основная линия выше заданного для закрытия значения 
  ) || (
  Posic == 1 && (Cena_0 - Open[i])/Point * Naprav >= StopLoss
  ) || (
  Posic == 1 && (Open[i] - Cena_0)/Point * Naprav >=  TakeProfit
  )
      )                                               
  {  
    if( Cena_0 > 0 ) Balans = Balans +(Open[i] - Cena_0)/Point * Naprav ; 
        Cena_0 = 0;             Posic = 0;   Capital = 0 ;
  }


// Открываем позицию SELL
    if(
  Trend == -1 &&
  Posic == 0 &&                                                    // Если  позиция зарыта
  MacdPrevious > 0 &&                                              // 1) основная линия MACD выше 0
  MacdCurrent < SignalCurrent && MacdPrevious > SignalPrevious  && //-  основная линия только что пересекла сигнальную с  верх в низу 
  MathAbs(MacdPrevious) > (Ind_MACDOpenLevel*Point)                // - основная линия выше заданного для открытия значения 
      ) 
      {   Cena_0 = Open[i];     Posic = -1;  Balans = Balans - Spred;  }
      
    a1_Buffer[i]= Balans;
//================================================================================================================================================================================================
//РАСЧЕТ ЛИНИИ ТЕКУЩЕГО КАПИТАЛЛА.

// При открытой позиции BUY
    if(   Posic >  0  ) 
  {  
    if( Cena_0 > 0 ) Capital = ((Open[i] - Cena_0)/Point * Naprav) ; 
  }
// При открытой позиции SELL
    if(  Posic <  0   ) 
  {  
    if( Cena_0 > 0 ) Capital = ((Cena_0 -Open[i])/Point  * Naprav) ; 
  }                       
    a2_Buffer[i]=   Balans + Capital;
//================================================================================================================================================================================================
//    a3_Buffer[i]= 
//================================================================================================================================================================================================
//    a4_Buffer[i]=
//================================================================================================================================================================================================
//================================================================================================================================================================================================
    if (i >= Bars-(TOCHKA_VHODA*2)) Cena_0 = 0;// 

      i--;       PRED_CHISLO_BAROV = Bars;                                
     } 
//----
   return(0);
  }
//+------------------------------------------------------------------+


P/S. Eu ficaria grato se você pudesse adicionar alguns exemplos de indicadores similares neste tópico. Seria melhor que, em conjunto com o Expert Advisor, copiasse.

 
Ah, você está a fazer pára-quedismo para uma opção em tempo real... a mesma coisa.
 
Aleksey Panfilov:

E sem a gíria? :))))))

Calcular pelos parâmetros actuais um gráfico de equilíbrio a uma certa profundidade da história, e se for mau então corrigi-los ao vivo, e ver a curva novamente... até se tornar óptima, depois trocar até começar a descer novamente, e rever os parâmetros... O backtest será, claro, longo neste caso

 
Aleksey Panfilov:

Obrigado.

Mas haverá um milhão de alças, terei que reescrever todos os indicadores no corpo do Expert Advisor.