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:

描いているのは...


クソワロタwwイシモクの間違いだろww )))) ありがとうございました

 
Alexey Viktorov:

ああ、そうだな・・・最小限の事務処理と最大の頭痛の種・・・。

具体的にはどのようなものですか?私のやり方が悪いだけかもしれませんが。

 
Andrey Sokolov:

具体的にはどのようなものですか?私は何か間違ったことをしているのでしょうか?

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

小学生にはOOP。

アレクセイ・ビクトロフ, 2019.10.04 16:01

mqlは、OOPで解決できる問題が非常に限られていると思います。言語そのものは、C++とかでOOPしているに過ぎないような気がします。そしてこのOOPは、標準ライブラリという形で提供されています。そして、このOOPに、そうでなければ言えないが、別のOOPを加えることが提案されている。そして、もう一歩...。正しくウォーロックは、怒っているが、慈悲深い、私のタスクのために、OOPは犬のターンテーブルのようなものです。また、タスクを定義し、それをOOPで実装したところで、そのタスクが手続き型で問題なく解決できるのであれば、何の意味があるのでしょうか。

例えば、fxsaber`aから.mqhを取り出し、MT4だけでなくMT5用のコードも記述することができます。もしかしたら必要な人がいるかもしれませんが、誰だか見てください。mql5を使いたくない人、絶対に使いこなせない人へ。あるいは、ニコライ・・・彼の名字は忘れましたが、iCanvasをどうぞ。便利なライブラリのようですが、わかりにくいし、ちょっとした説明書すらありません。文句じゃなくて、ごめんね、ニコライさん、事実なんだ。だから、グラフィカルなラベルを書いてみようと思ったとき、標準ライブラリもニコライのライブラリも参照しない方が書きやすかったんです。

そして、スレッド全体を読むと、