예상 가격의 추가를 기반으로 한 지표입니다. - 페이지 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);
  }

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


여기서는 양식을 통해 코드를 삽입 하는 것이 일반적입니다.

 

여기 내 지표의 골격이 있습니다. 나는 가장 맛있는 것을 지켰습니다 (나는 나를 매우 사랑합니다. 그런 죄가 있습니다).

나는 그것이 매우 비뚤어지고 고칠 수 있다는 것을 이해합니다. 가장 큰 특징은, 즉 근삿값이 아닌 계열의 값을 구하는 것, 내가 스스로 마무리 짓는 것인데, 결국 이것은 내 작업의 1년이 아니라 결과 중 하나입니다.

 
Evgeniy Chumakov :
고마워요 유진.

나는 매우 부주의하고 오른쪽 버튼을 지나쳐 "달려"간 것 같습니다.

 

#define ctr 1 // 참조 가격 간의 최대 델타

이 매개변수는 변경될 수 있으며(1에서 중지까지) 자연적으로 양의 정수입니다(기회를 가지지만 결과를 보증할 수는 없습니다).

변경 가능하게 만드는 방법, 또는 적어도 외부 변수의 형태로 만드는 방법은 아직 이해하지 못했습니다.

 
Koprezer :

#define ctr 1 // 참조 가격 간의 최대 델타

입력

 
Koprezer :
고마워요 유진.

나는 매우 부주의하고 오른쪽 버튼을 지나쳐 "달려"간 것 같습니다.

그리고 여기에 수평선을 추가했습니다. 시각적으로 아무리 봐도 도움이 될 것입니다.

라인_포보독_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

EURUSD일일

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

MA 표시기 포함

EURUSDH2

파일: