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

 
nicholi shen:

感謝します。私はこのフォーラムでプログラミングを学んだ。自分の仕事を公開するのは、それが訓練になるからです。私は何をどのように書いたかすぐに忘れてしまうので、記述を手がかりにしています。

私のコーディング・スタイルについては申し訳なく思っていますが、これは私自身のために書いたものです。そして、副次的な効果として公開した。

残念ながら、出版された作品の人気を評価することは不可能だ。もし誰かが使っているのなら、それは非常に狭い範囲のユーザーだ。

ユーザーの数を増やす--そんな目標はない。

 

ここでスクリプトを実行すると、データはターミナルのどこかに保存された:

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
  {
   const RESOURCEDATA<int>ResourceINT("::int"); // intを交換するためのリソース。const - クラスオブジェクトに何も書き込まれないことの証明。 
   int ArrayINT[]={1,2,3};
   ResourceINT=ArrayINT;  // リソースは配列を格納する。 
   int ArrayINT2[];
   ResourceINT.Get(ArrayINT2); // リソースからデータを読み込む。
   ArrayPrint(ArrayINT2);      // 辞退:1 2 3 5 1 2 3 
  }
//+------------------------------------------------------------------+

最初のスクリプトを実行したときに保存されたデータを取得するために、別のスクリプトを実行しましたが、データが表示されません:

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
// これは、他のプログラムからアクセスされるリソースの完全な名前である。
   //const string NameOut=StringSubstr(MQLInfoString(MQL_PROGRAM_PATH),StringLen(TerminalInfoString(TERMINAL_PATH))+5)+"::Ticks"; 
   const string NameOut=StringSubstr(MQLInfoString(MQL_PROGRAM_PATH),StringLen(TerminalInfoString(TERMINAL_PATH))+5,9)+"Test_Keep_Info.ex5::Ticks";   
   Print(NameOut); // リソースのフルネームを表示する。
   const RESOURCEDATA<int>Resource(NameOut); // 他のプログラムからデータにアクセスするためのリソース (読み取り専用)
   int ArrayINT2[];
   Resource.Get(ArrayINT2); // リソースからデータを読み込む。
   ArrayPrint(ArrayINT2);      // 撤退: 

  }
//+------------------------------------------------------------------+

エラー箇所を教えてください。

ファイル:
 
Nauris Zukas:

私はスクリプトを実行しており、私が理解しているように、データは現在ターミナルのどこかに保存されています。

データは、その所有者(それを書いた人)が作業をやめるとすぐに破棄されます。このままでは、ターミナルのメモリーがすぐに散らかってしまいます。

データマスターをアドバイザー/インジケーターとして開始する。それが生きている限り、そのデータは他の人が利用できます。

 
fxsaber:

データは、その所有者(書き込んだ人)が作業をやめるとすぐに破棄される。そうしないと、ターミナルのメモリーはすぐに散らかってしまいます。

データマスターをアドバイザー/インジケーターとして開始する。それが生きている限り、そのデータは他の人が利用できます。

インジケーターでもうまくいきませんでした。パスがおかしいと思います。

ファイル:
 
Nauris Zukas:

インジケーターでもうまくいかなかった。パスがおかしいのだと思います。

各 OnCalculate でリソースを作成 し、関数が終了したら kill しています。

オブジェクトを静的にする必要があります。これはOOPの基本です。

 
fxsaber:

各OnCalculateでリソースを作成 し、関数が完了したらそれをkillする。

オブジェクトは静的にしておく。これはOOPの基本だ。

staticを追加しましたが、まだ動きません。どこが間違っているのか修正してもらえますか?

ファイル:
 
Nauris Zukas:

スタティックを追加しましたが、まだ動きません。何が間違っているのか修正してもらえますか?

ResourceData.mqhを更新し、以下のインジケーターを試してください。

// データを送信する
#property indicator_chart_window
#property indicator_plots 0

#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> Resource("::" + __FILE__); // データ転送のためのリソース(ティック)

void OnInit()
{
  _GlobalVariableSet("ResourceName", Resource.GetFullName()); // グローバル変数にリソースのフルネーム(読み取り専用)を書き込む
}

void OnDeinit( const int )
{
  _GlobalVariableDel("ResourceName");
}

int OnCalculate( const int, const int, const int, const double &[] )
{
  MqlTick Ticks[];
  
  CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 5); // 生成されたデータ
  
  Resource = Ticks; // データを記録
    
  return(0);
}


// データ検索
#property indicator_chart_window
#property indicator_plots 0

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

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

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

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


ありがとうございます。
GlobalVariables.mqhの警告を修正してもらえますか?私の知識はRes=-1で終わっているのですが、そこでエラーが表示されました。OnStart()の警告を消す方法もわかりません。


ファイル:
 
Nauris Zukas:

GlobalVariables.mqhの警告を修正してもらえますか?

ファイル:
 
fxsaber:

ありがとう!