エラー、バグ、質問 - ページ 3018

 
Artyom Trishkin:

そして、ローソク足の下に引くべきインジケータのライン+ローソク足まで引く必要があります。ローソク足の上に描画されるその他のものについては、ローソク足を背景に描画するように設定してください。私自身は、それ以外の方法はないと思っています。

しかし、MQL5でプログラムを構築する際の利便性や柔軟性の観点から、MQL5の開発者にインジケーターバッファーの プロパティ(インジケーターバッファーのどれに対しても)を作成してもらうことができます。

 

ビルド2940でAlglibが書き直され、複素数の扱いが構造化されました。

と失敗を重ねました。

#include <Math\Alglib\complex.mqh>
void OnStart()
{
      al_complex a(1, 2);
      al_complex b(3, 4);
      a += b;
      printf("tst#1 : a.real = %f , a.imag = %f", a.re, a.im);

      al_complex c(1, 2);
      al_complex d(3, 4);
      c -= d;
      printf("tst#2 : c.real = %f , c.imag = %f", c.re, c.im);
 }

2021.05.23 21:49:35.210 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:49:35.210 tst (EURUSD,H1) tst#2 : c.real = 4.000000 , c.imag = 6.000000


ソースコンプレックス.mqh

//+------------------------------------------------------------------+
//| Overloading (+=)                                                 |
//+------------------------------------------------------------------+
void al_complex::operator+=(const al_complex &rhs)
  {
   re+=rhs.re;
   im+=rhs.im;
  }
//+------------------------------------------------------------------+
//| Overloading (-=)                                                 |
//+------------------------------------------------------------------+
void al_complex::operator-=(const al_complex &rhs)
  {
   re+=rhs.re;
   im+=rhs.im;
  }
 

新しいデータ型コンプレックスが発表されたことは覚えていませんが、プラグインライブラリなしですべてが正しく動作します。

void OnStart()
{
      complex a(1, 2);
      complex b(3, 4);
      a += b;
      printf("tst#1 : a.real = %f , a.imag = %f", a.real, a.imag);

      complex c(1, 2);
      complex d(3, 4);
      c -= d;
      printf("tst#2 : c.real = %f , c.imag = %f", c.real, c.imag);
 }

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#2 : c.real = -2.000000 , c.imag = -2.000000




新しい複合型はどこから来たのか?はヘルプには何も書かれておらず、他に何が追加されたのでしょうか?

 
Igor Makanu:

新しいデータ型コンプレックスが発表されたことは覚えていませんが、プラグインライブラリなしですべてが正しく動作します。

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#2 : c.real = -2.000000 , c.imag = -2.000000




新しい複合型はどこから来たのか?はヘルプには何も書かれておらず、他に何が追加されたのでしょうか?

新しいタイプが追加されたことは、開発者からも確認がありました。最近です。

 
Igor Makanu:

新しいデータ型コンプレックスが発表されたことは覚えていませんが、プラグインライブラリなしですべてが正しく動作します。

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#2 : c.real = -2.000000 , c.imag = -2.000000

新しい複合型はどこから来たのか?ヘルプには何も書かれていませんし、他に何が追加されたのでしょうか?

これです

7.MQL5:複素数による 演算のサポートを追加しました。


新しい組み込み型 "complex "を追加。
struct complex
  {
   double             real;   // вещественная часть
   double             imag;   // мнимая часть
  };
複雑な」型は、MQL5関数のパラメータとして値で渡すことができます(通常の構造体は参照でのみ渡されるのとは対照的です)。DLLからインポートされる関数については、"complex "型は参照渡しのみとする。

複素定数を表すには、接尾辞'i'が用いられる。
complex square(complex c)
  {
   return(c*c);
  }
  
void OnStart()
  {
   Print(square(1+2 i));  // в качестве параметра передается константа
  }

// будет выведено "(-3,4)" - это строковое представление комплексного числа
複素数では、=、+、-、*、/、+=、-=、*=、/=、 ==、 != のような単純な演算しかできない。

今後、絶対値の取得、サイン、コサインなどの数学的機能を追加していく予定です。
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
  • 2021.05.14
  • www.mql5.com
В пятницу 21 мая 2021 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Artyom Trishkin:

これです

7.MQL5:複素数の 操作のサポートを追加しました。


新しい組み込み型 "complex "を追加。
複合型は、MQL5関数のパラメータとして値で渡すことができます(通常の構造体は参照渡しのみですが、それとは対照的です)。DLLからインポートされる関数については、"complex "型は参照渡しのみとする。


複素数については,現在,単純な演算のみ可能である:=,+,-,*,/,+=,-=,*=,/=,==,!

今後、絶対値の取得、サイン、コサインなどの数学的機能を追加していく予定です。

OKありがとう、ヘルプの追加が遅いのが残念です

 
実行エラーです。
void OnStart()
{
    const string text[] = { "ABC", "", "ABC" };
    uchar array[];
    int start = 0;
    int n = 0;
    for ( int i = 0; i < ArraySize( text ); i++ )
    {
        const int count = StringLen( text[ i ] );
        n += StringToCharArray( text[ i ], array, start, count );
        start += count;
    }
    Print( ArraySize( array ), ":", n );
}

結果:6:7

期待度:6:6

 
A100:
実行エラーです。

結果:6:7

期待度:6:6

count = 0 - 文字列の最後だけがコピーされます。Yet "" !=NULL.

 
fxsaber:

count = 0 - 文字列の最後だけがコピーされます。まだ"" !=NULL.

そして、どれだけの

StringToCharArray

count = 0 でコピーするのでしょうか?

ヒント:count = 3で3文字がコピーされる

 
A100:

count = 0 のとき、文字をコピーする必要があるのでしょうか?

count=0はcount=-1と同じように動作し、""の場合はターミナルNULLをコピーするようなので、追加のチェックをしないと空文字列は正常に変換されません