記事"Expert AdvisorプログラミングにおけるMQL5標準トレードクラスライブラリの使用"についてのディスカッション

 

新しい記事 Expert AdvisorプログラミングにおけるMQL5標準トレードクラスライブラリの使用 はパブリッシュされました:

本稿は、Expert Advisorプログラミングにおいてポジションのクローズ、変更、指値注文出し、取引セット前のマージン削除と検証を実装する MQL5標準トレードクラスライブラリの使用方法について述べていきます。注文と取引詳細情報の取得に使用できるトレードクラスの使い方もお見せします。

作者: Samuel

 

僕にとってとても役に立つ記事だ。ライブラリを使えば、すべてがずっと簡単になる!

開発者へのお願い:High[i]、Low[i]を扱うクラスを書いてください。Open[i]、Close[i]。このクラスは誰にとっても役に立つと思います!この問題は自分なりに解決したのですが、テストに時間がかかるので、正しいかどうか自信がありません。

 
タイムズクラスのグループ セクションをチェック
 
#include <Indicators\Series.mqh>

double High[];
 CiHigh z;

なぜこのコードでエラーが発生するのか

'1.mq5' 1.mq5 1 1

'Series.mqh' Series.mqh 1 1

'ArrayObj.mqh' ArrayObj.mqh 1 1

'Array.mqh' Array.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'ArrayDouble.mqh' ArrayDouble.mqh 1 1

'CiHigh' - 型のない宣言 1.mq5 12 2

1 エラー(複数可)、0 警告(複数可) 2 1

すべての例で、型を宣言する必要はありません。

どのようにして

例えば、High[2]をプリントする。

 
dimeon:

なぜこのコードはエラーになるのか


すべての例で型を宣言する必要はありません。

難しいことでなければ、どのようにして

例えば、High[2]を表示する。

ドキュメントに誤植があります。このクラスはTimeSeries.mqhファイルにあります。

使用例(スクリプトは現在のチャートの直近の3つのHighを表示する):

#include <Indicators\TimeSeries.mqh>
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double High[];
   CiHigh z;
   int count=3;
   if(z.Create(_Symbol,_Period)==true)
     {
      if(z.GetData(0,count,High)==count)
        {
         for(int i=0; i<count; i++) Print(i,"=",High[i]);
        }
      else
         Print("取得に失敗しました",count,"時系列データ");
     }
   else Print("時系列の作成エラー");
  }
//+------------------------------------------------------------------+
 
Quantum:

ドキュメントに誤植があります。このクラスはTimeSeries.mqhファイルにあります。

使用例(スクリプトは現在のチャートの直近の3つの高値を出力する):

ありがとうございます!ずっと頭を悩ませていました!
 

しかし、私は基本的に時系列クラスのグループが 好きではありません。なぜなら、基本的に時系列クラスはすべて1つのメソッドで構成され、機能性よりも説明的な部分が多く、通常は特定のツールのすべての時系列を持つ必要があるからです:

struct str_bars{
   datetime    time[];     // 現在のチャートの各バーの開始時刻を含む時系列配列
   double      open[];     // 現在のチャートの各バーの始値を含む時系列配列。
   double      close[];    // 現在のチャートの各バーの終値を含む時系列配列。
   double      high[];     // 現在のチャートの各バーの最高値を含む時系列配列。
   double      low[];      // 現在のチャートの各バーの最低価格を含む時系列配列。
};
struct str_info{
   double   point;         // クォート通貨での現在の商品ポイントサイズ
   int      spread;        // 現在のスプレッド
};
//____________________________________________________________________
class currency {
   public:
//---- данные      
      MqlTick TICK;        // ティックデータ
      str_bars  BAR;       // 時系列データ
      str_info INFO;       // ツール情報
      int error;
//---- методы      
      int create(string sym,ENUM_TIMEFRAMES period, int numbars);
      int refresh(void);
   private:
      string            symbol;
      ENUM_TIMEFRAMES   per;
      int               num;
      datetime          lastbar_time;
      int               tmpint1,tmpint2;
      int ch_load(void);
};
//____________________________________________________________________

もちろん、このクラス自体はrefresh()メソッドを呼び出すことでデータを受け取る。

 
役に立つ記事
 

記事に誤りがある

double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); // ロット価格/必要なマージン数

であるべきだ。

   double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price);  //--- ロット価格/必要なマージン数
削除済み  

素晴らしい記事だ。著者に感謝します。注文を出す前にStop_Levelをチェックすることと、スプレッドの値をチェックすることも書きたいと思います。スプレッドが変動している場合、高い値では利益にならないため、市場に参入できないからです。これにより、Expert Advisorはニュース中に取引を行わないようにすることができます。また、乖離についてもチェックしたいと思います。また、ライブラリに関する質問もあります。関数とは何でしょうか(どのような処理を表し、記述するのでしょうか)。

フリーズレベル

凍結 取引操作の距離をポイントで取得する。

int FreezeLevel() const

を簡単な言葉で説明してください。

そしてもう一つ質問です。例えば、現在の時点(仮に10ポイントとします)のStop_Levelのリミットを知ることができます。SL=10ポイントの注文を発注します。例えば1時間後、価格は注文で指定された価格に達しますが、この時点のStop_Levelは例えば15ピップスです。保留中の注文は機能するのでしょうか、それとも拒否されるのでしょうか。また、価格が注文で指定された価格に到達したが、スプレッドが変更された場合、注文を開始した時点の予想価格に対して、より悪い価格でエントリーまたはエグジットが可能であるということですか、それとも注文はまったく機能しないということですか?

 

入札が印刷されないのはなぜですか?

以下は作業ログです。


2011.01.31 20:20:18 00(eurusd,m1) eurusd 0

コード

#include <Trade\SymbolInfo.mqh>  //--- CSymbolInfo クラス
CSymbolInfo    my_symbol;        //--- CSymbolInfo クラスのオブジェクト
//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {   return(0);  }
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {  }
//+------------------------------------------------------------------+
//| エキスパート・ティック機能|
//+------------------------------------------------------------------+
void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }
//+------------------------------------------------------------------+