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

勾选指标

另一个显示的是什么?他们为什么会出现分歧?

它们需要多长时间对准一次?

 
MakarFX:

第二张显示了什么?为什么它们会出现分歧?

它们需要多长时间对准一次?

现在还没有第二家。原理是一样的,滴答声,只是有一个过滤器。只要图案出现在我张贴的那张上,就会对准。类似于波浪工作(底部出现,我们向它看齐,峰值出现,我们向它看齐)。

 
Oleg Bondarev:

第二个还没有。原理是一样的,嘀嗒一声,只是有一个过滤器。对齐的方式将与我发布的那个图案一样。类似波浪的工作(底部出现,对准它,峰值出现,对准它)。

如果你把它们合二为一,你可以增加一个偏差

   x[0]=b+"отклонение";
并根据你想对准的地方,偏移量将是(+)或(-)。
 
MakarFX:

如果将它们合二为一,可以增加一个偏差

并根据你想对准的地方,偏移量将是(+)或(-)。

偏差不会是恒定的。我想过用鼠标移动这条线,但显然这是不可能的。悲伤(。

 
Oleg Bondarev:

偏差不会是恒定的。想过用鼠标移动线,但显然你不能这样做。悲伤(

用鼠标是不行的......虽然自由职业者可以做鼠标偏转调整,但要收费 的(
Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Добрый день. Нужен советник на основе индикаторов МА. Вход/выход по пересечению линий. В настройках задаются периоды, сдвиги и методы расчета, метод управления капиталлом, мартнгейл. Код для МТ4/Мт5 Должен работать в тестере. Срок выполнение 2-3 дня Здравствуйте. У меня есть утилита! Она сама выставляет TP и SL мне нужно доработать её что...
 

调用 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:

你需要鼠标点击坐标

有一个更简单的方法,你把趋势线移到正确的位置,然后在它后面的

类似于

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