mql5言語の特徴、微妙なニュアンスとテクニック - ページ 63

 
4にそのような機能がありますが、MQL5でどのように実装すればよいでしょうか?

Expert Advisorから呼び出されるインジケータを非表示に するフラグを設定します。

void  HideTestIndicators
(
   bool hide // флаг
);

 
fxsaber

このため、「タップ」EAを並列に動作させる、つまり補助チャートが必要です。

この例では状況が多少異なります:チャートが1つあり、その上ですでにいくつかのEAが動作しています。そして、時には新しいインジケータを開かずにOrderSendを通過させたいと考えています。

もちろん、DLLなしで、チャートが渡されるようにします。

そのためにフクロウのオーダー取り可能パネルを追い込み、時々マニュアルモードでオーダーを落としますが、フクロウが取った通りになっています。

 
コンスタンチン・ニキーチン

フクロウで発注できるようにしたのですが、たまにマニュアルで発注してもフクロウの通りになってしまうんです。

当初は、インジケータ自体がOBJ_CHART 上でOrder-scriptを実行する場合の仕掛けでした。

 

後置演算子(演算子 ++ と演算子 --)は次のように定義されます。

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

ちょっとしたミスを発見する手助けが必要です。

whroeder1, 2014.07.07 11:37


  1. プリフィックス operator++
    Postfix operator++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
パヴェル・ヴェルヴェイコ
4にはそのような関数がありますが、MQL5ではどのように実装するのでしょうか?

Expert Advisorから呼び出されるインジケータを非表示にするフラグを設定します。


こんな感じです、ヘルプをご覧ください。

MQL5リファレンスガイド / カスタムインジケータ / サンプルにおけるインジケータスタイル / DRAW_NONE
 
MQL4の熟練者にとっては、MQL5でTFを操作する古くからの方法があります。

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

CopyTicks」のテスト

fxsaber, 2016.10.19 07:59

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.

#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME NAME;                                                                                           \
                                                                                                              \
  T i##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)

おそらく、MQL4のアプローチは、ティックヒストリーを扱う際にも有用だと思う人がいるでしょう。

// Позволяет работать с тиковой историей в MQL4-стиле
struct TICK_HISTORY
{
  const string Symb;
  
  TICK_HISTORY( const string sSymb = NULL ) : Symb(sSymb)
  {
  }
  
  const MqlTick operator []( const int Pos ) const
  {
    static const MqlTick NullTick = {0};
    static MqlTick Ticks[];
    
    return((::CopyTicks(this.Symb, Ticks, COPY_TICKS_INFO, 0, Pos + 1) > Pos) ? Ticks[::ArraySize(Ticks) - Pos - 1] : NullTick);
  }
};

const TICK_HISTORY Tick;


アプリケーション

if (Tick[0].bid > Tick[100].bid) // сравниваем текущий и исторический тики
  Print("Hello World!");

if (High[0] > Close[100]) // https://www.mql5.com/ru/forum/42122/page24#comment_2904023
  Print("Hello World!");
 
アレクセイ・ヴォルチャンスキー

このようなことがあるようです、ヘルプをご覧ください。

MQL5リファレンスガイド / カスタムインジケータ / サンプルにおけるインジケータスタイル / DRAW_NONE

どうもありがとうございます、試してみます。SDはIndicatorReleaseがこうなるはずだと言っていました。

 

誰が遭遇したのか、構造体のフィールドの配置はアライメント的にどうするのが正しいのか。

struct A
  {
   uchar  arr[20];
   // тут поля заполнители
   double val;
  };

struct B
  {
   double val;
   // тут поля заполнители
   uchar  arr[20];
  };

構造体のアライメントは上から下へと進みますが、20個の要素を持つ配列の場合、Aの方法が正しいように思われます。
 
fxsaber
MQL4の熟練者にとっては、MQL5でTFを操作する古くからの方法があります。

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)

アプリケーション...


クラス全員をMacroに入れるのはいい方法だ。デバッガでこのようなクラスを扱うことができないのが残念です:-)(

 
コンスタンチン

構造上、フィールドをどのように配置するかということに遭遇した人。

構造体のアライメントは上から下へ行うことになっていますが、20要素以下のメモリが割り当てられた配列があるので、Aの方法がある意味正しいのです

MQLということであれば、アライメントはありません。

また、C++ということであれば、struct Bの方がよいでしょう。

しかし、いずれにせよC++のアライメントはプログラマー次第です。

理由: