Un indicatore basato sull'aggiunta di prezzi probabili. - pagina 5

 
Il codice sarà rilasciato a breve. Con alcune condizioni. Devo ancora lisciarlo per non bruciare dall'imbarazzo...
 
Koprezer:
Il codice si esaurirà presto. Con alcune condizioni. Devo ancora smussarlo per non bruciare dalla vergogna...

è opzionale, anche se auspicabile. Non ci sono regole "richieste dal codice", non è il suo stile che vuoi discutere?

È solo che per discutere, avete bisogno di un argomento di discussione. Formule, inferenze, calcoli, giustificazioni. Solo le foto non interessano a nessuno, credetemi.

...allora potresti avere qualche "socio" che ti aiuti a portare avanti le cose. Anche se ci saranno sicuramente più troll :-)

E il codice, il codice sarà comunque scritto in diverse varianti.

 
//+------------------------------------------------------------------+
//|                                                  Povodok_001.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
#property indicator_buffers 3
#property indicator_plots   3
//--- indicator buffers
#define  ctr    1                    // максимальная дельта между опорными ценами

double Lad [ctr+2,3];              // Массив возможных рассчитанных цен
double PraiseB,PraiseA,PraiseS;     // Средняя верхняя, средняя нижняя и просто средняя цены
uint nB,nA,nS;                      // делители
int NaxNole;                        // опорный бар

double         LABuffer[], LBBuffer[], LSBuffer[]; // Бувера для визуализации индикатора

int OnInit()
  {

   SetIndexBuffer(0,LABuffer,INDICATOR_DATA); //--- задать рисование линии
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); //--- задание стиля для рисования линии
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); //--- задание цвета линии
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed); //--- задание толщины линии
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1); //--- задание метки для линии
   PlotIndexSetString(0,PLOT_LABEL,"Верхняя граница"); //--- привязка массива к индикаторному буферу с индексом 1

   SetIndexBuffer(1,LSBuffer,INDICATOR_DATA); //--- задать рисование линии
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE); //--- задание стиля для рисования линии
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID); //--- задание цвета линии
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrGold); //--- задание толщины линии
   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,1); //--- задание метки для линии
   PlotIndexSetString(1,PLOT_LABEL,"Расчетное возможное");

   SetIndexBuffer(2,LBBuffer,INDICATOR_DATA); //--- задать рисование линии
   PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_LINE); //--- задание стиля для рисования линии
   PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_SOLID); //--- задание цвета линии
   PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrBlueViolet); //--- задание толщины линии
   PlotIndexSetInteger(2,PLOT_LINE_WIDTH,1); //--- задание метки для линии
   PlotIndexSetString(2,PLOT_LABEL,"Нижняя граница");
//---
   ENUM_ACCOUNT_TRADE_MODE tradeMode=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);
   switch(tradeMode)
     {
      case(ACCOUNT_TRADE_MODE_DEMO):
         break;
      case(ACCOUNT_TRADE_MODE_CONTEST):
         Print("Внимание! Вы используете тестовую версию Индикатора! Возможны сбои и зависания.");
         break;
      default:
        {
         Print("Использование данного индикатора для реальных сделок не желательно!");
         Print(" Вы используете тестовую версию Индикатора. Оно! Вам! Нужно! Так рисковать?");
         Print(" https://www.mql5.com/ru/users/koprezer E-mail:mts_signal@mail.ru");
        };
     }
//---
   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
//---
  {
   int start;
   int prb;
   if(prev_calculated==0)
      start=ctr*ctr; // установим начальный индекс для входных массивов
   else
      start=prev_calculated;    // установим start равным последнему индексу в массивах
   for(int d=0; d<start; d++) // Тех работа получить 100 значений индикатора d- шагов в историю
     {
        {
         //---
         for(int v=0; v<ctr; v++)
           {
            for(int i=0; i<3; i++)
              {
               Lad [v,i]=0;// подготовка к расчету
              }
           }
         NaxNole=rates_total-d-1; // текущие положение
         PraiseS=0;
         nS=0;
         for(int i=1; i<ctr+1; i++)  // строка дельта
           {
            prb=NaxNole-i*2+1;
            if(prb>rates_total)
               prb=rates_total;
            if(prb-i<0)
               prb=i;
            Lad [i,0]=open[prb]-open[prb-i]+open[prb];//  расчет
            Lad [i,1]=high[prb]-high[prb-i]+high[prb];//  расчет
            Lad [i,2]=low[prb]-low[prb-i]+low[prb];//  расчет
            PraiseS+=Lad [i,0];
            nS++;
            PraiseS+=Lad [i,1];
            nS++;
            PraiseS+=Lad [i,2];
            nS++;
           }
         PraiseS/=nS;
         nA=0;
         PraiseA=0;
         nB=0;
         PraiseB=0;
         for(int i=1; i<ctr+1; i++)
           {
            for(int k=0; k<3; k++)  // строка
              {
               if(Lad[i,k]>PraiseS)
                 {
                  nA++;
                  PraiseA+=Lad[i,k];
                 }
               if(Lad[i,k]<PraiseS)
                 {
                  nB++;
                  PraiseB+=Lad[i,k];
                 }
              }
           }
         LSBuffer[rates_total-d-1]=PraiseS;
         if(nA==0)
            PraiseA=PraiseS;
         if(nA !=0)
            PraiseA/=nA;
         if(nB==0)
            PraiseB=PraiseS;
         if(nB !=0)
            PraiseB/=nB;
         LABuffer[rates_total-d-1]=PraiseA;
         LBBuffer[rates_total-d-1]=PraiseB;
        }
     }
   return(rates_total);
  }

//+------------------------------------------------------------------+


È consuetudine qui inserire il codice tramite un modulo.

 

Ecco lo scheletro del mio indicatore, ho tenuto la parte più gustosa per me (mi piaccio molto, c'è un tale peccato).

Capisco che è molto storto e può essere corretto. Ho intenzione di migliorare la caratteristica principale, vale a dire, ottenere valori di serie non per approssimazione, ma è uno dei risultati di più di un anno del mio lavoro.

 
Evgeniy Chumakov:
Eugene, grazie.

Mi sembra di essere stato molto disattento e di aver "corso" oltre i tasti giusti.

 

#define ctr 1// massimo delta tra i prezzi di riferimento

Questo parametro può essere cambiato (da 1 alla fine), ovviamente, interi positivi (anche se prendete i vostri rischi, non posso garantire il risultato).

Come renderlo modificabile o almeno come variabile esterna, non lo so ancora.

 
Koprezer:

#define ctr 1// massimo delta tra i prezzi di riferimento

ingresso

 
Koprezer:
Eugene, grazie.

Mi sembra di essere molto disattento e di "correre" oltre i tasti giusti.

E qui, ho aggiunto delle linee orizzontali, forse qualcosa per aiutarvi a visualizzarlo.

Linea_Povodok_001

--------------

Ho dimenticato di aggiungere il codice.

//+------------------------------------------------------------------+
//| Deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectsDeleteAll(0,InpFont1);
   ObjectsDeleteAll(0,InpFont2);
   ObjectsDeleteAll(0,InpFont3);
//---
  }
//+------------------------------------------------------------------+
File:
 

Ho pensato di dare qualche teoria per giustificare e interpretare l'indicatore. Ho cambiato idea, voglio sentire le vostre versioni. Si vede il codice e si ottengono le immagini. Spero di sentire opzioni logiche. Potrei fermarmi per un po' e se vedo un certo interesse darò la mia versione.

L'opzione P/S con ingresso non ha funzionato per me, se qualcuno ci è riuscito per favore aiuti.

 

ora ce l'ho, almeno si possono fare delle modifiche

что то в нём, Интересное есть 
#define  La 1000
//---
input int    Lactr    = 8;          //
input string InpFont1 = "LOW 1";    // Obj: Name Price
//---
double PraiseB,PraiseA,PraiseS;            // Средняя верхняя, средняя нижняя и просто средняя цены
uint   nB,nA,nS;                           // делители
int    NaxNole;                            // опорный бар
double LABuffer[], LBBuffer[], LSBuffer[]; // Бувера для визуализации индикатора
double Lad [La+2,3];                       // Массив возможных рассчитанных цен

EURUSDM30

EURUSDDaily

--------------------------------------------------------------------

con l'indicatore MA

EURUSDH2

File: