新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1523

 
Сергей Таболин:

我,一个无法理解所有类的神圣意义的二流子,以及一般来说,为什么在我们的(贸易)业务中需要OOP,如何理解--类都是(由MQ和大师)编写的代码库,旨在 "促进""非大师代码编写者 "的生活。

问题是,我已经说过了,使用所有这些 "救济 "并不能使写代码变得更容易。因为你总是要对你自己发送的所有订单进行反复检查!因为实际上每个人都坚持要我也检查一些 "交易"。更重要的是,这些"......股份 "是随机出现的。

我下达命令--在这个地方以这样的角度敲打钉子。就这样了。接下来我得到了一个答复--钉子被敲进去了。然后我得到一个警告说。

  • 也许钉子的尺寸不对--需要检查。
  • 也许是角度不对--需要检查
  • 也许它敲错了 地方 --需要检查

那么,为什么我需要这样的表演者(课程)?

我可能有点夸张,但重点并没有改变。

为什么呢?因为在类中处理的任何数据都可以被改变,以至于类甚至不会怀疑它已经被改变。


我明白了。

顺便说一下,我同意OOP并不能使编程变得更容易。

OOP使维护大型项目 更加容易,但往往使创建小型项目更加困难。

OOP对初学者来说更难。

使用其他人的课程在某种程度上是在使用黑盒子。

 
你好。能否请您告诉我,我哪里做错了,为什么指标不显示箭头?
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window


double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9;
input int kijun_sen1  = 26;
input int senkou_span_b1 = 52;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   
//---
   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[])
  {
    int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double tenkan_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
      double kijun_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
      double senkou_span_b = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
      double senkou_span_a = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
      double chikou_span = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
      if(tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if(tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:
你好。能否请您告诉我,我哪里做错了,为什么指标不显示箭头?
#property indicator_buffers 2
 
MakarFX:

我输入了缺失的那一行,但还是没有箭头!我的意思是说,如果你是一个人,那么你就会有一个人。

 
jarikn:

我输入了缺失的那一行,但还是没有箭头!我的意思是说,如果你是一个人,那么你就会有一个人。

显示

 
MakarFX:

显示

//+------------------------------------------------------------------+
//|                                                     ishimocu.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2

//--- input parameters
double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9;
input int kijun_sen1  = 26;
input int senkou_span_b1 = 52;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   
//---
   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[])
  {
  
   
 
  
    int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double tenkan_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
      double kijun_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
      double senkou_span_b = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
      double senkou_span_a = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
      double chikou_span = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
      if(tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if(tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:

我有一幅画...


 
MakarFX:

我在画...


该死的。错误的ishimoku运行)))),非常感谢。

 
Alexey Viktorov:

是的......最少的写作和最大的头痛......

它到底是什么?也许我只是做错了什么。

 
Andrey Sokolov:

它到底是什么?我是不是做错了什么?

关于交易、自动交易系统和策略测试的论坛

小学生的OOP。

Alexey Viktorov, 2019.10.04 16:01

我认为mql可以用OOP解决的问题非常有限。在我看来,这门语言本身不过是C++或其他什么的OOP。而这种OOP是以标准库的形式提供的。对这个OOP,建议增加,否则我不会说,另一个OOP。然后再走一步...说得很对,术士虽然生气,但仁者见仁智者见智,对于我的任务来说,OOP就像一个狗的转盘。而且,如果这个问题可以毫无问题地通过程序解决,那么定义一个问题然后用OOP来实现它又有什么用呢。

例如,从 fxsaber`a 取出 .mqh,为 MT5 以及 MT4 写代码。也许有人可能需要它,但看看是谁。对那些不想或绝对不能掌握mql5的人来说。或者从Nikolay......我忘了他的名字,采取iCanvas。它似乎是一个有用的库,但要理解它并不容易,而且没有任何文档,甚至连一个最小的描述都没有。这不是抱怨,对不起,尼古拉,这是一个事实。因此,当我决定尝试写一个图形标签时,不参考标准库或尼古拉的库来写就比较容易。

然后你可以阅读整个主题。