Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 716

 
Artyom Trishkin:

Здрассьти ... Как это нельзя?

А это что тогда? Пять минут в редакторе...

Прекрасно!

Команда?

int j;
...
start()
{
........
      j=j+10;
      PlotIndexSetInteger(0,PLOT_SHIFT,j);
........
не прокатывает((( //МТ4, билд 1031
 
Renat Akhtyamov:

СПАСИБО!

В общем так.

Смещение линии в окне индикатора вправо, за нулевой бар, действительно работает на платформе МТ5.

МТ4 не имеет такой возможности, не получилось, чтобы я не делал.

Также МТ5 насколько я знаю имеет возможность 3D-моделирования в отличии от МТ4.

Это всё очень круто!

Я сломался.

Перехожу на МТ5!!! // причем, срочно ;)

Что невозможно? Сдвигать буфер индикатора вправо? Ещё как можно, хоть вправо, хоть влево ;) SetIndexShift().

Но раз решили на МТ5 переходить, флаг в руки ;) 

 
Renat Akhtyamov:

Прекрасно!

Команда?

int j;
...
start()
{
........
      j=j+10;
      PlotIndexSetInteger(0,PLOT_SHIFT,j);
........

Тупо перевернул десять последних значений расчётного буфера и вывел со сдвигом в 10 баров. Даже не думал ни о какой оптимизации и прочем. Просто чтобы показать:

//+------------------------------------------------------------------+
//|                                                  iCheckShift.mq4 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot BufferCurrent
#property indicator_label1  "BufferCurrent"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot BufferFuture
#property indicator_label2  "BufferFuture"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrDodgerBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//--- input parameters
input int      Shift=10;   // Смещение в будущее (баров)
//--- indicator buffers
double         BufferCurrent[];
double         BufferFuture[];
double         BufferCalculate[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   IndicatorBuffers(3);
   SetIndexBuffer(0,BufferCurrent,INDICATOR_DATA);
   SetIndexBuffer(1,BufferFuture,INDICATOR_DATA);
   SetIndexBuffer(2,BufferCalculate,INDICATOR_CALCULATIONS);
   SetIndexShift(1,Shift);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   if(rates_total<1) return(0);
   ArraySetAsSeries(BufferCalculate,true);
   ArraySetAsSeries(BufferCurrent,true);
   ArraySetAsSeries(BufferFuture,true);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-1;
      ArrayInitialize(BufferCalculate,EMPTY_VALUE);
      ArrayInitialize(BufferCurrent,EMPTY_VALUE);
      ArrayInitialize(BufferFuture,EMPTY_VALUE);
      }
   for(int i=limit; i>=0; i--) {
      BufferCurrent[i]=(high[i]+low[i])/2.0;
      if(i<Shift) BufferCalculate[i]=(high[i]+low[i]+open[i]+close[i])/4.0;
      }
   for(int i=0; i<Shift; i++) {
      BufferFuture[Shift-i]=BufferCalculate[i];
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Vitalie Postolache:

Что невозможно? Сдвигать буфер индикатора вправо? Ещё как можно, хоть вправо, хоть влево ;)

Но раз решили на МТ5 переходить, флаг в руки ;) 

свой код выше написал. Так?
 
Renat Akhtyamov:
свой код выше написал. Так?
Я там добавил.  SetIndexShift(). Да и Артём более развёрнуто написал.
 
Vitalie Postolache:
Я там добавил.  SetIndexShift(). Да и Артём более развёрнуто написал.

Ну наконец то! Проблема решена.

int j=0;
...
start()
{
........
      j=j+10;
      SetIndexShift(0,j);

Всё работает и на МТ4

ВСЕМ ОГРОМНОЕ СПАСИБО!!!

 
Здравствуйте !
Вопрос у меня такой:
Есть MACD в индикаторном окне, которое имеет некое значение "А", вычисленное на текущей цене. Какая должна быть формула вычисляющая значение цены, если бы текущее значение  MACD стало бы "-А" ?
 
Leo59:
Здравствуйте !
Вопрос у меня такой:
Есть MACD в индикаторном окне, которое имеет некое значение "А", вычисленное на текущей цене. Какая должна быть формула вычисляющая значение цены, если бы текущее значение  MACD стало бы "-А" ?
https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_MACD
Индикатор MACD — Википедия
Индикатор MACD — Википедия
  • ru.wikipedia.org
Индикатор используют для проверки силы и направления тренда, а также определения разворотных точек. Строится на основе скользящих средних. Существует две модификации индикатора MACD: линейный MACD и MACD-гистограмма. Для расчёта линейного MACD из скользящей средней цены (обычно берётся экспоненциальная скользящая средняя с меньшим периодом...
 
Ренат, спасибо конечно же, за участие.... Но, вопрос был о другом:
Есть MACD в индикаторном окне, которое имеет некое значение "А", вычисленное на текущей цене. Какая должна быть формула вычисляющая значение цены, если бы текущее значение  MACD стало бы "-А" ?
 
Leo59:
Ренат, спасибо конечно же, за участие.... Но, вопрос был о другом:
Есть MACD в индикаторном окне, которое имеет некое значение "А", вычисленное на текущей цене. Какая должна быть формула вычисляющая значение цены, если бы текущее значение  MACD стало бы "-А" ?
Может стОит показать формулу вычисления когда некое значение "А" имеет положительное значение, а то не понятно о чём идёт речь