ライブラリ: TradeTransactions - ページ 4

 

最初のテストによると、doubleとdatetimeについては、別々のリソースとグローバル変数の名前を 作るべきだと思います。これは正しいのでしょうか?

const RESOURCEDATA<double>ResourceDouble("::Double_"+__FILE__); 
const RESOURCEDATA<datetime>ResourceTime("::Time_"+__FILE__); 

int OnInit()
  {
   _GlobalVariableSet("ResourceName",ResourceDouble.GetFullName()); 
   Print(" ResourceDouble.GetFullName(): ",ResourceDouble.GetFullName());

   _GlobalVariableSet("ResourceName1",ResourceTime.GetFullName());  
   Print(" ResourceTime.GetFullName(): ",ResourceTime.GetFullName());   
   
//---
   return(INIT_SUCCEEDED);
  }
 
Nauris Zukas:

最初のテストによると、doubleとdatetimeについては、別々のリソースとグローバル変数の名前を 作るべきだと思います。これは正しいのでしょうか?

残念ながら、あなたのプログラミング言語の熟練度に到達するのは非常に困難です。おそらく他の誰かが説明してくれるでしょう。

 
fxsaber:

残念ながら、あなたのプログラミング言語の習熟度に達するのは非常に難しい。おそらく他の誰かが説明してくれるだろう。

まあ、重要なのは、今のところすべてうまくいっているということだ。

ファイル:
 
fxsaber:

ResourceData.mqhを更新し、以下のインジケーターを試す。



こんにちは!.mqhからインジケーターへの転送はできないのでしょうか?それとも、インジケーターをコンパイルするときに毎回リセットされないようなコツがあるのでしょうか?私はそのような変種を作りましたが、インディケータをコンパイルするときにリセットされます:

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

const RESOURCEDATA<MqlTick>m_Resource("::"+__FILE__); // データ転送のためのリソース(ティック)

class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| コンストラクタ。|
   //+------------------------------------------------------------------+ 
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // グローバル変数にリソースのフルネーム(読み取り専用)を書き込む 
     }
   //+------------------------------------------------------------------+
   //| デストラクタ。|
   //+------------------------------------------------------------------+ 
   void ~CMyTicks()
     {
      //_GlobalVariableDel("ResourceName");
     }

   //+------------------------------------------------------------------+ 
   void CollectTicks()
     {
      MqlTick m_Ticks[];
      CopyTicks(_Symbol,m_Ticks,COPY_TICKS_ALL,0,5); // 生成されたデータ
      m_Resource=m_Ticks; // データを記録
     }

  };
//+------------------------------------------------------------------+
// データ検索
#property indicator_chart_window
#property indicator_plots 0

#include <Test_Keep_Info_13.mqh>
CMyTicks  Test;

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

static const RESOURCEDATA<MqlTick>Resource(_GlobalVariableGet<string>("ResourceName")); // グローバル変数に渡されたフルネームに基づいてリソースを作成する。 
MqlTick Ticks[];

int OnCalculate(const int rates_total,const int prev_calculated,const int,const double &[])
  {
   if(prev_calculated==0)
     {
      Resource.Get(Ticks); // リソースからデータを読み込む。
      ArrayPrint(Ticks);   // 得られたデータを印刷する

      if(ArraySize(Ticks)<1)
        {
         Test.CollectTicks();
         Print(" SAVE TICKS ");
        }

      Resource.Get(Ticks); // リソースからデータを読み込む。
      ArrayPrint(Ticks);   // 得られたデータを印刷する
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

また、"誰かが説明してくれるだろう "という理由で、私はすでに答えを知っているので、"作者に尋ねる "になります。ありがとうございました!

 
Nauris Zukas:


こんにちは!.mqhからインジケーターへの転送はできないのでしょうか?それとも、インジケーターがコンパイルされるたびにリセットされないようなトリックがあるのでしょうか?私はそのような変種を作りましたが、インジケータをコンパイルするときにリセットされます:

また、"誰かが説明してくれるだろう "という理由で、私はすでに答えを知っているので、"作者に尋ねる "になります。ありがとうございます!

残念ながら、私は質問を理解することはできません。

 
fxsaber:

残念ながら、その質問は理解できません。

オブジェクトは静的ですが、データは破棄されます。私の例では何が間違っているのでしょうか?

 
Nauris Zukas:

オブジェクトは静的ですが、データは破棄されます。私の例のどこが間違っているのでしょうか?

残念ながら、あなたのOOPに対する理解には大きなギャップがあり、意図したものが得られていません。一般的なOOPの質問については、フォーラムでお尋ねください。

 
fxsaber:

残念ながら、あなたのOOPに対する理解には大きなギャップがあるので、意図した通りにはいきません。一般的なOOPの質問については、フォーラムに助けを求めてください。

わかりました、ありがとうございます。

 

ライブラリーのソースには、ある型の配列を別の型の配列に素早く変換 するConvert.mqhが 含まれている。

 

リソースを通じて何でも交換できる。

// 任意のデータ(文字列配列を含む)を交換する例。

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166

#define  PRINT(A) Print(#A + " = " + (string)(A));

void OnStart()
{    
  // サンプル用の任意のデータ
  string Str[] = {"123", "Hello World!"};
  double Num = 5;
  MqlTick Tick = {0};
  Tick.bid = 1.23456;

  const RESOURCEDATA<uint> Resource; // データ共有のためのリソース
  CONTAINER<uint> Container;         // コンテナを作成する - すべてを単純な型の配列に格納する(例ではuintを選択)。
  
  // 異なるデータでコンテナを満たす
  Container[0] = Str;
  Container[1] = Num;
  Container[2] = Tick;
    
  // コンテナに格納されているデータの種類を表示する。
  for (int i = 0; i < Container.GetAmount(); i++)
    PRINT(Container[i].GetType())

  Resource = Container.Data;  // 交換用のデータを送信
  
  CONTAINER<uint> Container2; // ここでデータを取得する
  
  Resource.Get(Container2.Data); // データを取得
      
  // 元の形式でデータを取得する
  string Str2[];
  Container[0].Get(Str2);                // 配列を取得
  ArrayPrint(Str2);

  PRINT(Container[1].Get<double>())      // 数字が出た
  PRINT(Container[2].Get<MqlTick>().bid) // 構造体ができた  
}