Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1095

 
MakarFX:
Donnez votre indicateur

Indicateur de coche.

#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);
  }
//+------------------------------------------------------------------+
 
Oleg Bondarev:

L'indicateur de tic-tac.

Que montre l'autre ? Pourquoi divergent-ils ?

À quelle fréquence doivent-ils être alignés ?

 
MakarFX:

Que montre le second ? Pourquoi divergent-ils ?

À quelle fréquence doivent-ils être alignés ?

Il n'y en a pas encore de deuxième. Le principe est le même, le tic-tac, mais avec un filtre. L'alignement se fera dès que le motif apparaîtra sur celui que j'ai posté. Quelque chose comme le travail des vagues (le bas est apparu, on s'y aligne, le haut est apparu, on s'y aligne).

 
Oleg Bondarev:

Le second n'est pas encore disponible. Le principe est le même, à l'identique, mais avec un filtre. L'alignement sera tel que le modèle apparaît sur celui que j'ai posté. Quelque chose comme le travail des vagues (le bas apparaît, alignez-le, le haut apparaît, alignez-le).

si vous les combinez en un seul, vous pouvez ajouter une déviation

   x[0]=b+"отклонение";
et selon l'endroit où vous voulez vous aligner, la déviation sera (+) ou (-).
 
MakarFX:

si elles sont combinées en une seule, un écart peut être ajouté

et selon l'endroit où vous voulez vous aligner, la déviation sera (+) ou (-).

L'écart ne sera pas constant. J'ai pensé à déplacer la ligne avec la souris, mais apparemment ce n'est pas possible. Triste(.

 
Oleg Bondarev:

L'écart ne sera pas constant. J'ai pensé à déplacer la ligne avec la souris, mais apparemment on ne peut pas le faire. Triste(

Impossible avec une souris... bien que les indépendants puissent faire un ajustement de la déviation de la souris, mais moyennant des frais(
Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Добрый день. Нужен советник на основе индикаторов МА. Вход/выход по пересечению линий. В настройках задаются периоды, сдвиги и методы расчета, метод управления капиталлом, мартнгейл. Код для МТ4/Мт5 Должен работать в тестере. Срок выполнение 2-3 дня Здравствуйте. У меня есть утилита! Она сама выставляет TP и SL мне нужно доработать её что...
 

est appelé?

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
MakarFX:
Pas de souris...bien que les indépendants puissent faire un réglage de la déviation de la souris, mais moyennant des frais(

Si j'avais été sûr que le système fonctionnerait, je l'aurais commandé tout de suite.

 
Oleg Bondarev:

L'écart ne sera pas constant. J'ai pensé à déplacer la ligne avec la souris, mais apparemment c'est impossible. Triste(

Je ne l'ai pas fait, ou plutôt je ne l'ai pas cherché dans la sous-fenêtre. Dans la base de données, j'ai présenté un exemple de clic sur les barres de la fenêtre principale et la sortie d'informations sur la barre - vous pouvez le consulter.

J'ai fait un indicateur pour expérimenter avec les boutons - j'ai vérifié si les boutons déplacent la ligne de l'indicateur.

#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);
}
pour voir que l'indicateur se déplace, déposez une ligne horizontale dans la sous-fenêtre de l'indicateur ... Une chose plutôt cool à faire ))))
 
Igor Makanu:

vous avez besoin des coordonnées d'un clic de souris

Il existe une méthode plus simple : vous déplacez la ligne de tendance au bon endroit et derrière elle, vous placez la ligne de tendance.

quelque chose comme

        // получаем точки
        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;
                }
        }