Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1095

 
MakarFX:
Dai il tuo indicatore

Indicatore di spunta.

#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'indicatore di tick.

Cosa mostra l'altro? Perché divergono?

Quanto spesso devono essere allineati?

 
MakarFX:

Cosa mostra il secondo? Perché divergono?

Quanto spesso devono essere allineati?

Non ce n'è ancora un secondo. Il principio è lo stesso, il ticchettio, solo con un filtro. L'allineamento sarà appena il modello appare su quello che ho postato. Qualcosa come il lavoro delle onde (il fondo è apparso, ci allineiamo ad esso, il picco è apparso, ci allineiamo ad esso).

 
Oleg Bondarev:

Il secondo non è ancora disponibile. Il principio è lo stesso, a livello di tick, solo con un filtro. L'allineamento sarà come il modello appare su quello che ho postato. Qualcosa come il lavoro delle onde (appare il fondo, ci si allinea, appare il picco, ci si allinea).

se li combini in uno, puoi aggiungere una deviazione

   x[0]=b+"отклонение";
e a seconda di dove si vuole allineare, la deviazione sarà (+) o (-).
 
MakarFX:

se sono combinati in uno, si può aggiungere una deviazione

e a seconda di dove si vuole allineare, la deviazione sarà (+) o (-).

La deviazione non sarà costante. Ho pensato di spostare la linea con il mouse, ma apparentemente non è possibile. Triste(.

 
Oleg Bondarev:

La deviazione non sarà costante. Ho pensato di spostare la linea con il mouse, ma a quanto pare non si può fare. Triste(

Niente da fare con un mouse...anche se i freelance possono fare una regolazione della deviazione del mouse, ma a pagamento(
Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Добрый день. Нужен советник на основе индикаторов МА. Вход/выход по пересечению линий. В настройках задаются периоды, сдвиги и методы расчета, метод управления капиталлом, мартнгейл. Код для МТ4/Мт5 Должен работать в тестере. Срок выполнение 2-3 дня Здравствуйте. У меня есть утилита! Она сама выставляет TP и SL мне нужно доработать её что...
 

viene chiamato OnDeinit (-1)?

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
MakarFX:
Niente topi...anche se i freelance possono fare una regolazione della deviazione del mouse, ma a pagamento(

Se fossi stato sicuro che il sistema avrebbe funzionato, l'avrei ordinato subito.

 
Oleg Bondarev:

La deviazione non sarà costante. Ho pensato di spostare la linea con il mouse, ma a quanto pare è impossibile. Triste(

Non l'ho fatto, o meglio non l'ho cercato nella sottofinestra. Nella KB ho esposto un esempio di clic sulle barre della finestra principale e l'output di informazioni sulla barra - puoi cercarlo

Ho fatto un indicatore per sperimentare con i pulsanti - ho controllato se i pulsanti muovono la linea dell'indicatore

#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);
}
per vedere che l'indicatore si sta muovendo lascia cadere una linea orizzontale nella sottofinestra dell'indicatore ... Una cosa piuttosto figa da fare ))))
 
Igor Makanu:

hai bisogno delle coordinate del clic del mouse

C'è un modo più semplice, si sposta la Trendline nel posto giusto e dietro di essa il

qualcosa come

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