学童のためのEOPです。 - ページ 18

 
Alexey Viktorov:

はい?独立した新しいオブジェクトが作成されるのでは?

では、確認してみましょう。このような行を挿入します。

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)

  {
   SetMarginMode();
//--- initialize protected data
   ClearStructures();
//--- check programm mode
   if(MQL5InfoInteger(MQL5_TESTING))
      m_log_level=LOG_LEVEL_ALL;
   if(MQL5InfoInteger(MQL5_OPTIMIZATION))
      m_log_level=LOG_LEVEL_NO;
//---
   Print(__FUNCTION__,", magic ",IntegerToString(m_magic));
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CTrade::~CTrade(void)
  {
//---
   Print(__FUNCTION__,", magic ",IntegerToString(m_magic));
  }

のみならず

//+------------------------------------------------------------------+
//| Buy operation                                                    |
//+------------------------------------------------------------------+
bool CTrade::Buy(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="")
  {
//---
   Print(__FUNCTION__,", magic ",IntegerToString(m_magic));


とテストスクリプトがあります。

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   trade.SetExpertMagicNumber(123);
//---
   CTrade trade;
   trade.Buy(0.1);
  }
//+------------------------------------------------------------------+


結果

2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::CTrade, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::CTrade, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::Buy, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::OrderSend: instant buy 0.10 EURUSD at 1.09862 [auto trading disabled by client]
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::~CTrade, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::~CTrade, magic 123


1つのオブジェクトが作成され、次に2番目のもの(それはないレクリエーションがあることが判明 - 新しいものが作成されます)、BUY位置はマジック "0 "で開かれます - つまり、2番目のオブジェクト "貿易 "はそれをオープンしました。

すると、2つのオブジェクトは逆順に破壊されることがわかる。まず2番目のオブジェクト(魔法「0」)、次に1番目のオブジェクト(魔法「123」)である。

 
Alexey Viktorov:

はい?独立した新しいオブジェクトが作成されるのでは?

はい、CTrade クラスの新しいインスタンスが作成されます。

さらにCTradeのデストラクタはvoid OnTick()終了 時に呼び出され、次のOnTick()ではCTradeのコンストラクタが再び呼び出さ れることになります。

 
Igor Makanu:

はい、CTrade クラスの新しいインスタンスが作成されます。

void OnTick()抜けるとCTradeデストラクタが呼ばれ、次のOnTick()では再びCTradeコンストラクタが呼ば れます。

はい、アルテムさんの回答の後、すぐに気づきました。

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

小学生向けOOP。

アルチョム・トリシキン さん 2019.10.08 20:23

変数のときとまったく同じです。

そして、フォーカス。

#include <Trade\Trade.mqh>
CTrade trade;   // Объект trade в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 CTrade *trade_ptr=GetPointer(trade);  // Указатель на объект trade
 trade_ptr.Buy(0.1);
}

 
Alexey Viktorov:

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

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

実は、Alexey さん、iCanvas については、KB.https://www.mql5.com/ru/code/22164 の説明ページで十分な情報を得ることができるのです。 コードのコメントをよく研究する必要があります。すべての関数の意味は、その名前から直感的に理解できる。

   double            X(double bar);        // The X coordinate by the bar number. The bar number must be of type double, otherwise, the bar will be interpreted as time.
   double            X(datetime Time);     // The X coordinate by the time.
   double            Y(double Price);      // The Y coordinate by the price.
   double            Price(int y);         // Price by the Y coordinate
   double            Bar(int x);           // bar number by coordinate X                                                                      
   datetime          TimePos(int x);       // time by coordinate X 
   double            Close(int x);     
   double            Open(int x);    
   double            High(int x);     
   double            Low(int x);     
 
   void              Comm(string text);                 // Print comment
   void              TextPosition(int x,int y);         // Setting the XY position for comment output in pixels
   void              TextPosition(double x,double y);   // Setting the XY position for outputting comments as a percentage of the width and height of the window
   void              CurentFont(string FontName="Courier New",int size=18,int LineStep=20,color clr=clrDarkOrchid,double transp=1.0);  // Set font options for comment. LineStep - step between lines. transp - transparency from 0 to 1
   void              LineD(double x1,double y1,double x2,double y2,const uint clr); // тоже самое что и Line в CCanvas, только без глюков и с double координатами
   int               TextPosX;      // Position X for comment text
   int               TextPosY;      // Position Y for comment text
   int               StepTextLine;  // line spacing for comment
   uint              TextColor;     // Font color for comment

でも、そうかもしれませんね。iCanvasを使った簡単で便利なインジケータを書いたビデオを録画して、このクラスの機能を視覚的に説明する必要があります。まだ微妙なところがありますね。

正直なところ、今のiCanvasの書き方は好きではありません。くしゃくしゃにしてゴミ箱に捨てて、もっと正しい文体に書き直したい。

このライブラリのコードの70%は、座標やデータアクセスの処理に必要な通常の関数の一部を高速化したものです。

ですから、このクラスを適用すれば、CCanvasで「真正面から」やるよりも、グラフィックスは高速になります。それが最大の特徴であり、利点です。もちろん、グラフや図、コメントの形成も実に簡単です。

また、fxsaberや私の出版物を含むCodeBaseの多くの出版物の目的は、「ただ共有すること-必要な人はそれを理解するだろう」という無私のものであることを、Alexey、付け加えておきたいと思います。そのため、細かい指示に時間を費やすことは、単に億劫になることが多いのです。

特にフォーラムでは、iCanvasを使った短くてわかりやすい例をたくさん載せています。
たとえば、ここ。
https://www.mql5.com/ru/code/25929

https://www.mql5.com/ru/code/25113

https://www.mql5.com/ru/code/25414

https://www.mql5.com/en/code/24798

https://www.mql5.com/ru/forum/227736/page41#comment_13259627

https://www.mql5.com/ru/forum/227736/page24#comment_12836622

https://www.mql5.com/en/forum/323629#comment_13442470

https://www.mql5.com/ru/forum/321704#comment_13131995

https://www.mql5.com/ru/forum/317257/page3#comment_12341593

https://www.mql5.com/en/forum/229521/page2#comment_10258148


Easy Canvas
Easy Canvas
  • www.mql5.com
Данная библиотека и класс iCanvas упростит написание программ с применением Canvas. Вот пример простого индикатора с применением данной библиотеки и его демонстрация. Обратите внимание, что в данном примере в теле индикатора отсутствует функция обработки событий OnChartEvent. Но она также может и присутствовать. Особенности данной библиотеки...
 
Nikolai Semko:

実は、アレクセイ、iCanvas についての情報は KB の説明ページで十分に得ることができます。https://www.mql5.com/ru/code/22164コードのコメントをよく研究する必要があります。す べての機能の意味は、その名前から直感的に理解できる。

ニコライ、私の言葉など気にすることはない。プログラミングを勉強している人の中には、私みたいな人は、私一人でなければ、まったく注目する価値もないくらい少ないですからね。

私がコードでコメントを学ぶには、まずAglitskyを学ばなければなりません))。

もし緊急の必要があれば、時間をかけてすべてのコメントを翻訳し、機械翻訳を理解しようと努め、修正を加えることができます。 しかし、そのような必要はないのです。

 
Alexey Viktorov:

例えば、fxsaber`aから.mqhを取り出し、MT4だけでなくMT5用のコードも記述することができます。たぶん、誰かが必要としているのでしょう。でも、誰だか見てください...mql5を使いたくない人、どうしても使いこなせない人。

MQL5は結構知っているつもりなのですが、トレーディングライブラリのニーズがあるんです。MT4スタイルの話ではなく、MT5用のトレーディングライブラリで、快適かつ高速に作業できるようなものを考えています。また、このライブラリは実際の取引でバグが発生することはありません。

そのようなライブラリは公開されていない(存在するかどうかもわからない)ので、自分で開発する必要がありました。そのために、トレーディング 機能のセットという形で、どのような ツールを作るかを決めなければなりませんでした。MT4-setを借りた、かなり良いものとして。それが、おまけに、ライブラリーにドキュメントを書かず、勉強することが可能になったのです。その他のグッズも。

そのため、ユーザーの間ではMQL5に対する知識は高いレベルにあることもあります。