Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1095

 
MakarFX:
Дайте Ваш индикатор

Тиковый индикатор.

#property  indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
double x[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,x);
   SetIndexDrawBegin(0,0);
   IndicatorDigits(5);
   SetIndexLabel(0,"x");
   SetIndexShift(0,0);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double b=MarketInfo(Symbol(),MODE_BID);
   x[0]=b;
   for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];}
   return(0);
  }
//+------------------------------------------------------------------+
 

А второй что показывает? Почему они расходятся?

Как часто надо выравнивать?

 
MakarFX:

А второй что показывает? Почему они расходятся?

Как часто надо выравнивать?

Второго пока нет. Принцип тот же, тиковый, только с фильтром. Выравнивание будет по мере появления паттерна на том, что выложил. Что-то типа работы по волнам (появилось дно, выравниваем по нему, появился пик - по нему).

 
Oleg Bondarev:

Второго пока нет. Принцип тот же, тиковый, только с фильтром. Выравнивание будет по мере появления паттерна на том, что выложил. Что-то типа работы по волнам (появилось дно, выравниваем по нему, появился пик - по нему).

если их совместить в один, то можно добавить отклонение

   x[0]=b+"отклонение";
и в зависимости куда надо выравнять, отклонение будет(+) или (-).
 
MakarFX:

если их совместить в один, то можно добавить отклонение

и в зависимости куда надо выравнять, отклонение будет(+) или (-).

Отклонение будет не постоянным. Думал мышкой перемещать линию, но, видимо, нельзя так. Печально(

 
Oleg Bondarev:

Отклонение будет не постоянным. Думал мышкой перемещать линию, но, видимо, нельзя так. Печально(

Мышей никак...хотя фрилансеры могут сделать регулировку отклонения мышью, но за деньги(
Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Добрый день. Нужен советник на основе индикаторов МА. Вход/выход по пересечению линий. В настройках задаются периоды, сдвиги и методы расчета, метод управления капиталлом, мартнгейл. Код для МТ4/Мт5 Должен работать в тестере. Срок выполнение 2-3 дня Здравствуйте. У меня есть утилита! Она сама выставляет TP и SL мне нужно доработать её что...
 

@Artyom Trishkin  Пожалуйста, дайте мне знать, почему индикатор не удаляется при возврате INIT_FAILED или вызове функции OnDeinit (-1)?

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
MakarFX:
Мышей никак...хотя фрилансеры могут сделать регулировку отклонения мышью, но за деньги(

Да был бы уверен что система рабочая сразу был заказал) А тратиться на эксперименты накладно.

 
Oleg Bondarev:

Отклонение будет не постоянным. Думал мышкой перемещать линию, но, видимо, нельзя так. Печально(

мышей нужно координаты клика мыши и наличие в  месте клика линии индикатора, не делал такого, вернее в подокне не искал, в КБ выкладывал пример клика по барам основного окна  и вывод информации о баре - можете посмотреть

для экспериментов вот с кнопками набросал индикатор- проверил кнопки передвигают линию индикатора

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot line1
#property indicator_label1  "line1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input int shift   = 100;
input int XButton   = 20;
#include <Controls\Button.mqh>
//--- indicator buffers
double         line1Buffer[];
double         Yshift;
CButton button1, button2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   SetIndexBuffer(0, line1Buffer);
   SetIndexEmptyValue(0, 0.0);
   IndicatorDigits(Digits);
   Yshift = 0.0;
   button1.Create(0, "Mybutton1" + (string)rand(), ChartWindowFind(), XButton, 20, 50, 50);
   button1.Text("+");
   button2.Create(0, "Mybutton2" + (string)rand(), ChartWindowFind(), XButton, 70, 50, 100);
   button2.Text("-");
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long& lparam,
                  const double& dparam,
                  const string& sparam
                 )
{
   if(id == CHARTEVENT_OBJECT_CLICK)
   {
      bool isRedraw = false;
      if(sparam == button1.Name())
      {
         Yshift += _Point * (double)shift;
         isRedraw = true;
         button1.Pressed(false);
      }
      if(sparam == button2.Name())
      {
         Yshift -= _Point * (double)shift;
         isRedraw = true;
         button2.Pressed(false);
      }
      if(isRedraw)
      {
         for(int i = ArraySize(line1Buffer) - 1; i >= 0; i--)
            line1Buffer[i] = Close[i] + Yshift;
      }
   }
}
//+------------------------------------------------------------------+
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 i, limit = prev_calculated == 0 ? rates_total - 1 : rates_total - prev_calculated + 1;
   for(i = limit; i >= 0; i--)
   {
      line1Buffer[i] = close[i] + Yshift;
   }
   return(rates_total);
}
чтобы видеть что индикатор перемещается бросьте горизонтальную линию в подокно индикатора ... довольно прикольно получилось )))
 
Igor Makanu:

мышей нужно координаты клика мыши

Есть проще вариант, Trendline двигаешь в нужное место и за ней индюк

что-то типа

        // получаем точки
        string name; double b;
        int i, j=0, n = ObjectsTotal();
        for (i = 0; i<=n; i++)
        {
                name = ObjectName(i);
                if ((ObjectType(name)==OBJ_TREND)&&name==ID)
                {
                        tX[0]=ObjectGet(name, OBJPROP_TIME1); pY[0]=ObjectGet(name, OBJPROP_PRICE1);
                        tX[1]=ObjectGet(name, OBJPROP_TIME2); pY[1]=ObjectGet(name, OBJPROP_PRICE2);
                        break;
                }
        }
Причина обращения: