Calcolo delle differenze, esempi. - pagina 14

 
Aleksey Panfilov:

Ho esperienza nella creazione di un indicatore di equilibrio, questo si avvicinerà alla creazione di un iperparametro?

Non sono sicuro, se non c'è una reale correlazione allora potrebbe non servire... infatti questa è la domanda su cui tutti si stanno interrogando nel Ministero della Difesa :)

 
Maxim Dmitrievsky:

Non so se non c'è una reale correlazione, potrebbe non servire... essenzialmente questa è la domanda su cui tutti si stanno interrogando nel MoD :)

:)

Per sicurezza, immagine, indicatore di bilanciamento (finestra in basso).

Equilibrio a gradini costanti, la linea verde significa.

 
Aleksey Panfilov:

:)

Per sicurezza, immagine, indicatore di bilanciamento (finestra in basso).

Equilibrio a gradini costanti, la linea verde significa.

Oooh!

+

 
Aleksey Panfilov:

:)

Per sicurezza, immagine, indicatore di bilanciamento (finestra in basso).

Equilibrio a gradini costanti, la linea verde significa.

L'equilibrio non è necessario in valori assoluti, ma, per esempio, il fattore di profitto è attuale... cioè in qualche modo normalizzare il grafico

Cioè posso normalizzare il grafico in qualche modo. poi è possibile mettere in relazione questa variabile con il resto in qualche modo, per esempio usando la logica fuzzy o un neurone.

 

R^2 sarebbe di grande aiuto

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

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

Quindi, aggiungete i vostri indicatori e R^2 come termini di ingresso, poi descrivete linguisticamente le regole di interazione tra le variabili e ottenete un segnale in uscita

questo è solo un esempio, si può anche usare il neurone (ci sono anche articoli), ma la logica fuzzy mi sembra più flessibile e intuitiva per questi compiti, e può anche essere ottimizzata come un neurone o i vostri parametri, ma ci saranno meno intuizioni

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

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

Grazie per i messaggi.

Purtroppo, al momento, non ho familiarità con l'apprendimento automatico. E non ho intenzione di padroneggiarlo tanto presto.

Avevo intenzione di usare l'indicatore di equilibrio per una rapida ottimizzazione continua. Purtroppo, dobbiamo sviluppare un analogo dell'indicatore di equilibrio e uno script per enumerare i parametri per ogni Expert Advisor. Penso che sia realistico includere questi algoritmi nel robot per l'ottimizzazione automatica. In linea di principio, si tratta probabilmente dello stesso apprendimento automatico ma a livello di autocostruzione.

Forse lo farò anch'io.

Nel frattempo, forse qualcuno troverà utile quello che ho. Indicatore di equilibrio per 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. Vi sarei grato se poteste aggiungere alcuni esempi di indicatori simili in questo thread. Sarebbe meglio insieme all'Expert Advisor che copia.

 
ah, ti stai paracadutando per un'opzione in tempo reale... stessa cosa
 
Aleksey Panfilov:

E senza lo slang? :))))))

Calcolare dai parametri attuali un grafico di equilibrio ad una certa profondità della storia, e se è male allora correggerli dal vivo, e guardare la curva di nuovo ... fino a quando non diventa ottimale, poi commerciare fino a quando inizia a scendere di nuovo, e andare oltre i parametri di nuovo ... Backtest sarà naturalmente lungo in questo caso

 
Aleksey Panfilov:

Grazie.

Ma ci saranno un milione di maniglie, dovrò riscrivere tutti gli indicatori nel corpo dell'Expert Advisor

Motivazione: