Ein Indikator, der auf der Addition der wahrscheinlichen Preise beruht. - Seite 5

 
Der Code wird in Kürze veröffentlicht werden. Mit einigen Bedingungen. Ich muss es noch glätten, damit ich nicht vor Peinlichkeit verbrenne...
 
Koprezer:
Der Code wird bald veraltet sein. Mit einigen Bedingungen. Ich muss es noch glätten, um nicht vor Scham zu verbrennen...

Code ist fakultativ, aber wünschenswert. Es gibt keine "codepflichtigen" Regeln, es ist nicht sein Stil, über den Sie diskutieren wollen?

Aber um zu diskutieren, braucht man ein Diskussionsthema. Formeln, Schlussfolgerungen, Berechnungen, Begründungen. Nur Bilder interessieren niemanden, glauben Sie mir.

...dann könnten Sie einige "Mitarbeiter" finden, die Ihnen helfen, die Dinge voranzutreiben. Obwohl es sicherlich noch mehr Trolle geben wird :-)

Und der Code, der Code wird sowieso in mehreren Varianten geschrieben werden.

 
//+------------------------------------------------------------------+
//|                                                  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);
  }

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


Hier ist es üblich, den Code über ein Formular einzufügen.

 

Hier ist das Gerüst meines Indikators, den leckersten Teil habe ich für mich behalten (ich mag mich sehr, das ist eine Sünde).

Ich verstehe, dass es sehr schief ist, und es kann korrigiert werden. Ich werde das Hauptmerkmal verbessern, nämlich Serienwerte nicht durch Annäherung zu erhalten, aber es ist eines der Ergebnisse von mehr als einem Jahr meiner Arbeit.

 
Evgeniy Chumakov:
Eugene, ich danke dir.

Ich scheine sehr unaufmerksam gewesen zu sein und bin an den richtigen Tasten vorbeigelaufen".

 

#define ctr 1// maximales Delta zwischen Referenzpreisen

Dieser Parameter kann geändert werden (von 1 bis zum Ende), natürlich, positive ganze Zahlen (obwohl nehmen Sie Ihre Chancen, ich kann nicht für das Ergebnis bürgen).

Ich weiß noch nicht, wie man es änderbar macht oder zumindest als externe Variable.

 
Koprezer:

#define ctr 1// maximales Delta zwischen Referenzpreisen

Eingabe

 
Koprezer:
Eugene, ich danke dir.

Ich scheine sehr unaufmerksam zu sein und "rannte" an den richtigen Tasten vorbei.

Und hier habe ich horizontale Linien eingefügt, damit Sie sich das vielleicht besser vorstellen können.

Zeile_Povodok_001

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

Ich habe vergessen, den Code einzufügen.

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

Ich dachte, ich könnte den Indikator theoretisch begründen und interpretieren. Ich habe meine Meinung geändert und möchte Ihre Meinung dazu hören. Wenn Sie den Code sehen, sehen Sie die Bilder. Ich hoffe, logische Optionen zu hören. Ich werde vielleicht eine Weile pausieren, und wenn ich ein gewisses Interesse feststelle, werde ich meine Version darlegen.

P/S Option mit Eingabe hat bei mir nicht funktioniert, wenn jemand Erfolg hatte bitte helfen.

 

Jetzt habe ich es, zumindest kann ich Änderungen vornehmen.

что то в нём, Интересное есть 
#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

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

mit dem MA-Indikator

EURUSDH2

Dateien:
Grund der Beschwerde: