2030年のメタトレーダーXをどのように捉えていますか? - ページ 6

 
fxsaber:

任意のデータをグローバルに書き込むことは、こちらの 対応するインクルードで見ることができます。

OK、このソリューションは見たことがありません。

簡単に把握することはできませんので、確認が必要です

 
fxsaber:

グローバルに書き込まれたデータは、ここにある 対応するインクルードで見ることができます。

ティック以外にも膨大なデータの世界があることをご存知でしょうか?あなたは、クラスインスタンスの書き込み/読み取りデータという奇妙なものを求めています。

 
Igor Makanu:

OK、このソリューションは見たことがありません。

簡単にはわからない、調べないとわからない。

リソースとの間で生データの書き込みと読み出しが可能です。良い例です、ありがとうございます

しかし、私の尊敬するfxsaberは、同じことをクラスで行うのはどうでしょうか?ディフィニションがあっても、人々は発狂しないことを約束することができる )))

 
Alexey Volchanskiy:

コーラじゃないのか、ああ、おばあちゃんたち。


いいえ。ジンジャーブレッドの先物

 
Alexey Volchanskiy:

ティック以外にも膨大なデータの世界があることをご存知でしょうか?

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

文字列のようなグローバルターミナル変数が必要なのか?

fxsaber さん 2017.04.10 18:25

void OnStart()
{
  string Name = "Name";

// Записываем/считываем строки
  _GlobalVariableSet(Name, "Hello World!");
  Print(_GlobalVariableGet<string>(Name));

// Записываем/считываем простые структуры
  MqlTick Tick;
  SymbolInfoTick(_Symbol, Tick);

  _GlobalVariableSet(Name, Tick);
  Print(_GlobalVariableGet<MqlTick>(Name).time);

// Записываем/считываем массивы
  MqlTick Ticks[2];

  Ticks[0] = Tick;
  Ticks[1] = Tick;

  _GlobalVariableSet(Name, Ticks);

  MqlTick NewTicks[];

//  if (_GlobalVariableGet(Name, NewTicks)) // https://www.mql5.com/ru/forum/1111/page1868#comment_4853867
//    Print(NewTicks[1].time);

  _GlobalVariableDel(Name);
}


あるクラスのインスタンスのデータを書き込んだり、読み込んだりという不思議なことがしたい。

私は、開発 者と同じように、データを構造体に格納します。便利だし、理にかなっている。だから、構造体へのポインタがないにもかかわらず、この問題ではクラスのほうには目を向けていない。

 
fxsaber:


私は、開発 者と同じように構造体にデータを保存しています。便利でロジカルです。 したがって、構造体へのポインタがないにもかかわらず、この問題ではクラスには目を向けなかった。

チェック用のスクリプトを組んだのですが、MqlTickの配列の読み方が わかりません。

#property strict
#include <fxsaber\TypeToBytes.mqh>        //https://www.mql5.com/ru/code/16282
#define  POSTFIX "___"

string GetName( const string Name, const int Num, const string PostFix = POSTFIX )
{
  return(Name + PostFix + (string)Num);
}

bool _GlobalVariableDel( const string Name )
{
  return(GlobalVariableDel(Name) && (GlobalVariablesDeleteAll(Name + POSTFIX) >= 0));
}

#define  GLOBAL_VARIABLE_SET(A)                                                        \
template <typename T>                                                                 \
  datetime _GlobalVariableSet( const string Name, const T A )                         \
  {                                                                                   \
    _GlobalVariableDel(Name);                                                         \
                                                                                      \
    double Array[];                                                                   \
                                                                                      \
    const datetime Res = GlobalVariableSet(Name, _ArrayCopy(Array, _R(Value).Bytes)); \
    const int Size = ArraySize(Array);                                                \
                                                                                      \
    for (int i = 0; i < Size; i++)                                                    \
      GlobalVariableSet(GetName(Name, i), Array[i]);                                  \
                                                                                      \
    return(Res);                                                                      \
  }

GLOBAL_VARIABLE_SET(Value)
GLOBAL_VARIABLE_SET(&Value)
GLOBAL_VARIABLE_SET(&Value[])

#define  GLOBAL_VARIABLE_GET(A)                                              \
  {                                                                         \
    double Array[];                                                         \
                                                                            \
    const int Amount = (int)Tmp;                                            \
    const int Size = ArrayResize(Array, Amount / sizeof(double) +           \
                                 ((Amount % sizeof(double) == 0) ? 0 : 1)); \
                                                                            \
    for (int i = 0; i < Size; i++)                                          \
      Array[i] = GlobalVariableGet(GetName(Name, i));                       \
                                                                            \
    uchar Bytes[];                                                          \
                                                                            \
    _ArrayCopy(Bytes, Array, 0, 0, Amount);                                 \
                                                                            \
    _W(A) = Bytes;                                                          \
  }

template <typename T>
const T _GlobalVariableGet( const string Name )
{
  T Res; // https://www.mql5.com/ru/forum/1111/page1869#comment_4854112

  double Tmp;

  if (GlobalVariableGet(Name, Tmp))
    GLOBAL_VARIABLE_GET(Res)

  return(Res);
}

template <typename T>
bool _GlobalVariableGet( const string Name, T &Value )
{
  double Tmp;
  const bool Res = GlobalVariableGet(Name, Tmp);

  if (Res)
    GLOBAL_VARIABLE_GET(Value)

  return(Res);
}


void OnStart()
  {
   string Name="Name";

// Записываем/считываем строки
   _GlobalVariableSet(Name,"Hello World!");
   Print(_GlobalVariableGet<string>(Name));

// Записываем/считываем простые структуры
   MqlTick Tick;
   SymbolInfoTick(_Symbol,Tick);

   _GlobalVariableSet(Name,Tick);
   Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
   Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);

// Записываем/считываем массивы
   MqlTick Ticks[2];

   Ticks[0] = Tick;
   Ticks[1] = Tick;

   _GlobalVariableSet(Name,Ticks);
   
//    Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
//    Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);
   
   _GlobalVariableDel(Name);
  }
//+------------------------------------------------------------------+


PS: コンパイラの警告で初期化されていない変数 'Res' が使用されている可能性があるため、可能であれば削除してください。


 
Alexey Volchanskiy:

個人的には、マルチタスクが恋しいです。そういえば(懐かしの10行、青春スキップ)、2000年当時、Pentium 4が発売されたとき、RSDNプログラマーズフォーラムをうろうろしていたんです。インテルはP4で15GHzくらい行ってたし。ええ、冗談抜きで、そこらじゅうにありましたよ。まあ、本当にそう思ったのか、それともデマだったのかわかりませんが、私は信じませんでしたよ、何しろ鉄人ですから。

その後、マルチコアがもうすぐ来るから見てろ、準備しろ、と大きなスレッドを立てました。みんな笑っていましたよ。まるでおとぎ話のようで、どうやってパラレルコードをプログラムするんだ、と。ファンタジーなんです。

そして、誰が正しかったのか?インテルは15Ghzで失敗し、その後デスクトップ版にはデュアルコアのPentium Dが、そしてブレークスルーDuoが登場した。

そして、MQL5ではまだ199*sで生活しているのです。マルチスレッドも例外もない...。悲しみのあまり、スイカを食べに行った...。

MT5の説明から、マルチスレッドであることがわかります。現代のCPUは、ユーザーの下に実行可能なコードのダンプスターであるという事実のために、その後、スイカがあり、すべてのスレッドで実用的な意味がありません。ビジネスでは、効率的なコードにも、計算能力の合理的な使用にも関心がありません。

P.S. 1.5GHzかも?間違っているかもしれませんが、当時は物理的な技術の限界を5nmと定義し、そこからGHzを想定していたのです。200nmから5nmまで、数年で到達したいですね。

 

2030年にはメタトレーダーが禁止される。

何でもかんでも禁止する人が政権をとることになる。

そうすれば、世界の決済システムはひとつになる。

そして、世界中に一人の支配者がいる。

彼はすべての人にチップを搭載し、すべての人をGLONASS、5Gの下に置くようになるでしょう。

現金はありません。支払いは、体に埋め込まれたチップを通じて行われます。

社会の特権階級だけが、インターネットでの取引を許されるのです。この支配者を本物の神だと思う人たちが......。


アーメン。

 
Igor Makanu:

それをテストするためにスクリプトを作ったのですが、MqlTickの配列を読み込む 方法がわかりません。

このオーバーロードを追加する

template <typename T>
bool _GlobalVariableGet( const string Name, T &Value[] )
{
  double Tmp;
  const bool Res = GlobalVariableGet(Name, Tmp);

  if (Res)
  {
    double Array[];                                                         
                                                                            
    const int Amount = (int)Tmp;                                            
    const int Size = ArrayResize(Array, Amount / sizeof(double) +           
                                 ((Amount % sizeof(double) == 0) ? 0 : 1)); 
                                                                            
    for (int i = 0; i < Size; i++)                                          
      Array[i] = GlobalVariableGet(GetName(Name, i));                       
                                                                                                                                                        
    _ArrayCopy(Value, Array, 0, 0, Amount);
  }  

  return(Res);
}
イゴール・マカヌ

PS: コンパイラの警告で、初期化されていない変数 'Res' が使用されている可能性があるため、可能であれば削除してください。

この行を追加する

  T Res;
  ZeroMemory(Res);
 
Unicornis:

MT5の説明から、マルチスレッドであることがわかります。ユーザーの下でその仕事の近代的なプロセッサは、実行可能なコードのダンプであるという事実のために、まだスイカがあり、すべてのスレッドで実用的な意味はありません。ビジネスでは、効率的なコードにも、計算能力の合理的な使用にも関心がありません。

追伸:1.5GHzかも?間違っているかもしれませんが、当時は物理的な技術の限界を5nmと定義し、そこからGHzを想定していたのです。 200nmから5nmへ、2、3年後にそうしたい--もちろん、そうします。

私は文盲でマニュアルを読まないんです。ただ、MT5がマルチスレッドなのはオプティマイザーだけというのは知っています)。テスターでは、1つのスレッドのみで動作しています。

並列化するにはOpenCLを使いますが、この技術自体はMT5でサポートされているだけです。

そして、ロードマップの15GHzについては、私はプログラマーの記憶力を持っているので、見たことは一生忘れないと思います。