基于增加可能的价格的一个指标。 - 页 5

 
该代码将很快发布。有一些条件。我仍然要把它抹平,这样我就不会因为尴尬而烧伤......
 
Koprezer:
代码很快就会发出去。有一些条件。我仍然需要把它抹平,以便不至于因羞愧而烧伤......。

代码是可选的,尽管是可取的。没有 "代码要求 "的规则,这不是你想讨论的他的风格?

只是,为了讨论,你需要一个讨论的主题。公式、推理、计算、论证。只是照片没有人感兴趣,相信我。

...那么你可能会得到一些 "同伙 "来帮助你推动事情的发展。虽然肯定会有更多的巨魔 :-)

还有代码,反正代码会写成几个变体。

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

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


这里习惯于通过表格插入代码

 

这是我的指标骨架,我把最美味的部分留给了自己(我非常喜欢自己,有这种罪过)。

我知道它很歪,可以改正。 我准备改进主要功能,即不是通过近似值获得系列值,但这是我一年多来的工作成果之一。

 
Evgeniy Chumakov:
尤金,谢谢你。

我似乎一直很不专心,"跑 "过了正确的按钮。

 

#define ctr 1// 参考价格之间的最大 差值

这个参数可以改变(从1到结束),当然是正整数(当然要碰运气,我不能保证结果)。

如何使其成为可改变的或至少作为一个外部变量,我还不知道。

 
Koprezer:

#define ctr 1// 参考价格之间的最大 差值

输入

 
Koprezer:
尤金,谢谢你。

我似乎很不专心,"跑 "过了正确的按钮。

而在这里,我添加了水平线,也许是为了帮助你直观地了解它。

Line_Povodok_001

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

我忘了在代码中添加。

//+------------------------------------------------------------------+
//| Deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectsDeleteAll(0,InpFont1);
   ObjectsDeleteAll(0,InpFont2);
   ObjectsDeleteAll(0,InpFont3);
//---
  }
//+------------------------------------------------------------------+
附加的文件:
 

我想我应该给出一些理论来证明和解释这个指标。 改变了我的想法,我想听听你的版本。你看到的是代码,你得到的是图片。我希望能听到合理的选择。我可能会暂停一段时间,如果我看到一些人感兴趣,我将给出我的版本。

带输入的P/S选项对我来说不起作用,如果有人设法帮助我,请。

 

现在我明白了,至少你可以进行修改了

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

欧美日报

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

与MA指标

EURUSDH2

附加的文件: