MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1032

 

Ccanvasオブジェクトを 複製することは可能ですか?


Ccanvasでオブジェクトを作成すると、その過程で複製を作成しなければなりません。10~20のときもあれば、100~200のときもある。

1回で確実にオブジェクトが描画されます。複製する方法はないのでしょうか?

 
Sergey Likho:

Ccanvasオブジェクトを複製することは可能ですか?


Ccanvasでオブジェクトを作成すると、その過程で複製を作成しなければなりません。10~20のときもあれば、100~200のときもある。

1回で確実にオブジェクトが描画されます。複製する方法はないのでしょうか?

CCanvas *canv = new CCanvas
しかし、これは既存のものと重複しているわけではありません。新規に作成し、そのポインターを作成しているのです。
 
Artyom Trishkin:
CCanvas *canv = new CCanvad

グラフィックオブジェクトという意味です。

   CCanvas obj;
   obj.CreateBitmapLabel(0,1,name,x,y,x_size,y_size,COLOR_FORMAT_ARGB_NORMALIZE);
   obj.FillRectangle(0,0,x_size,y_size,ColorToARGB(Color,Alpha));
   obj.Update(false);


Как сделать 10 копий с измененными координатами?
 
Sergey Likho:

グラフィカルなオブジェクトという意味です。

見せました。オブジェクトをいくつ作成する必要があるか事前に分からない場合は、newによる方法のみとなります。
数値が分かっている場合
obj1, obj2, obj3,...,objN
 
Igor Makanu:

私は間違っているかもしれませんが、あなたのリンクは、著者のスレッドになりますが、あなたは全体のスレッドを介してリーフィングする必要があります、Igorは少し生のコードを掲載しているようだ、そして時々改善が必要なものを書き直し、再び私は間違っているかもしれませんが - 私は約5〜6年前にこのスレッドを介してリーフィング、私はもう覚えていない。

あなたは間違っていない。最近、著者のスレッドを全部読みました。2~3日くらいかかりましたね。執筆のremotenessのビューで著者のトピックでは、彼の機能のいくつかは、もはや関連していない(またはそれは私に見えた).Read絶対にすべてと非常に話題と無関係の少し。そして、お気づきのように、彼は2-3ページ、あるいはそれ以上のページの後に、誰かが彼の機能を使って間違いを見つけ、それを修正し、間違いがあったと言うだけ、あるいは指摘するだけで、ポップアップする間違いがあったのです。そのため、10ページ後でも、同じ機能が修正されたり、改善されたり(時間が経過し、改善したいと思った)して、再び登場することがあります。

だから、もし誰かが最も重要で関連性の高いトピックだけを抜き出してくれたなら、ありがとうと言うしかないし、多くの時間を節約することができる。

 
関数へのポインタを引数として渡す(関数へのポインタを引数として受け取る関数を書くという意味)には、どうすればよいのでしょうか?以前、mql4でやったことがあるのですが、この例があったファイルのコピーを紛失してしまいました。
 
Seric29:
関数へのポインタ(関数は引数として関数へのポインタを取る)をパラメータとして渡すにはどうしたらよいですか?以前、mql4でやったことがあるのですが、例のファイルのコピーを紛失してしまいました。

MQLが関数ポインタをサポートしたことはありますか?そんなことはないだろう。一つの解決策は、関数をクラスでラップして、そのポインタをオブジェクトに渡すことです。

 
Sergey Popov:

みなさん、こんにちは。

EAに取引開始後2時間の取引を禁止する関数を書きたいのですが、どうすればいいですか?

しかし、iTime(Symbol(),1440, 0)が日中ローソクの開始時刻を 正しく返さないという事実に直面しました。

具体的には、2019.12.26は06:00:00に市場が開いたが、iTimeは00:00:00を判定している。

当日の開店時間を正確に計算するには?

SymbolInfoSessionTradeで取引時間を調べることができる。クリスマスなどの祝日の変更が反映されているかは分かりませんが。

 
Aleksey Mavrin:

MQLが関数ポインタをサポートしたことはありますか?そんなことはないだろう。一つの解決策は、関数をクラスでラップして、オブジェクトへのポインタを渡すことです。

そうなんです。これはtypedif指定子read helpを使用して行われますが、c++とはスキームが異なります。このコードを書いている人がいるフォーラムを見つけたのですが、ファイルを保存せずにシステムを再起動したら、当然ながらファイルは削除されてしまいました。しかし、ヘルプには簡単な例が示されており、私は質問している例がありました。

 
Aleksey Mavrin:

MQLが関数ポインタをサポートしたことはありますか?そんなことはないだろう。一つの解決策は、関数をクラスでラップして、そのポインタをオブジェクトに渡すことです。

できる、再現するためのコード。

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TFuncvoidPTR f_ptr[3];
   f_ptr[0] = f_1;
   f_ptr[1] = f_2;
   f_ptr[2] = f_3;
   for(int i=0;i<ArraySize(f_ptr);i++)
   {
      printf("Вызываю фунцию № %i ",i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() {Print("Это вызов функции : ",__FUNCTION__);}
void f_2() {Print("Это вызов функции : ",__FUNCTION__);}
void f_3() {Print("Это вызов функции : ",__FUNCTION__);}

2019.12.30 18:30:55.518 スクリプト tst EURUSD,H1: 削除しました。

2019.12.30 18:30:55.511 tst EURUSD,H1: uninit reason 0.

2019.12.30 18:30:55.511 tst EURUSD,H1: This isfunction call: f_3.

2019.12.30 18:30:55.511 tst EURUSD,H1: 関数番号2を呼び出します。

2019.12.30 18:30:55.511 tst EURUSD,H1: これは関数 : f_2 を呼び出しています。

2019.12.30 18:30:55.511 tst EURUSD,H1: 関数#1 を呼び出します。

2019.12.30 18:30:55.511 tst EURUSD,H1: これは関数 : f_1 を呼び出しています。

2019.12.30 18:30:55.511 tst EURUSD,H1: Calling fuction no. 0.

2019.12.30 18:30:55.511 tst EURUSD,H1:初期化されました。

2019.12.30 18:30:55.496 スクリプト tst EURUSD,H1: 正常にロードされました。