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

 
fxsaber:

時間がどこから来るのか、示唆がない(私も同じ)。おそらく、時間帯によるのでしょう。


これはもう、おもしろくないですね。

当てずっぽう。モスクワを持っています。GMTで1時間もない・・・他の考えもない。

 

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

端末の自動エラー監視を利用するには?

レナート・ファットフーリン, 2021.01.22 16:12

Print(NULL) メソッドを使用して、ログを強制的にディスクにリセットする文書化されていない方法があります。

 

Andrey Khatimlianskii:

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

端末の自動エラー監視を利用するには?

レナート・ファットフーリン, 2021.01.22 16:12

Print(NULL) を使って強制的にログをディスクにリセットする、文書化されていない方法があります。

カッコイイ!

 
Andrey Khatimlianskii:

fxsaber:

カッコイイ!

確認せずに急いでシェア

 
Andrey Khatimlianskii:

確認せずにシェアすることを急いだため


文字列を先に0にしてから印刷するとどうなるか
 

チャートの表示(アクティブ化しない)オプション(MT5のみ)

// Показывает (не активирует) данный чарт.
bool ChartShow( const long Chart )
{
  const bool IsDocked = ChartGetInteger(Chart, CHART_IS_DOCKED);
  
  return(ChartSetInteger(Chart, CHART_IS_DOCKED, !IsDocked) && 
         ChartSetInteger(Chart, CHART_IS_DOCKED, IsDocked) &&
         ChartGetInteger(Chart, CHART_WINDOW_HANDLE));  
}


使用例

// Переключает чарты клавишами клавиатуры '<'/'>'.

#define  KEY_LEFT2 188  // '<'
#define  KEY_RIGHT2 190 // '>'

int GetExpertCharts( long &Charts[], const string ExpertName = NULL )
{
  int Amount = 0;
  
  for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))
    if ((ExpertName == NULL ) || (ChartGetString(Chart, CHART_EXPERT_NAME) == ExpertName))
    {
      Amount = ArrayResize(Charts, Amount + 1, 10);
      
      Charts[Amount - 1] = Chart;
    }
    
  return(ArrayResize(Charts, Amount));
}

long ChartNextShow( const long Chart, const int Step = 1 )
{
  long ResChart = Chart;
  
  long Charts[];  
  const int Size = GetExpertCharts(Charts);
  
  if ((Size > 1) && (bool)(Step % Size))
    for (int i = 0; i < Size; i++)  
      if (Charts[i] == Chart)
      {
        ResChart = Charts[(i + ((Step > 0) ? Step : (Size - ((-Step) % Size)))) % Size];
        
        ChartShow(ResChart); // https://www.mql5.com/ru/forum/170952/page196#comment_20841674
        
        break;
      }

  return(ResChart);  
}

void OnChartEvent( const int id, const long &lparam, const double&, const string& ) 
{         
  static long Chart = ChartID();
  
  if (id == CHARTEVENT_KEYDOWN) 
    switch ((int)lparam)
    {
    case KEY_LEFT2:
      Chart = ChartNextShow(Chart, -1); // Показали чарт слева
      break;

    case KEY_RIGHT2:
      Chart = ChartNextShow(Chart); // Показали чарт справа
      break;
    }
}

残念ながら、チャート起動のオプションは見つかりませんでした。表示のみ。

 
昔からの悩みを解決。
/*
// https://www.mql5.com/ru/forum/1111/page2863#comment_18591240
#define VALUE 10

#define MACROS

#ifdef MACROS
  // Нужно VALUE увеличить в два раза.
#endif
*/

// https://www.mql5.com/ru/forum/1111/page2965#comment_20841725
#define  MACRO(  x, y, z )       enum nn##z { y = x };
#define  MACRO2( x, y )          MACRO( x, y, __LINE__ )

// https://www.mql5.com/ru/forum/1111/page2866#comment_18603128
#define  VALUE 10

MACRO2(VALUE, VALUE_TMP) // VALUE_TMP - поле enum, поэтому имя не должно повторяться.
#undef  VALUE
#define  VALUE (VALUE_TMP * 2)

void OnStart()
{
  Print(VALUE);
}

このオプションの方が良いですね。

#define  MACRO3(x, y)            const int y = x;

MACRO3(VALUE, VALUE_TMP)

変数を必要としない。すべての値はコンパイル時に設定されます。A100 さん、ありがとうございました。

 
fxsaber:

残念ながら、チャート起動のオプションは見つかりませんでした。表示のみです。

よくわからないんだけど......そういうことなの?台本なんです。


ps; そして、これは何でしょう?

  const bool IsDocked = ChartGetInteger(Chart, CHART_IS_DOCKED);

ドキュメントを見ても見当たらないのですが...。

ファイル:
200.mq5  2 kb
 
Alexey Viktorov:

ps; これは何ですか?

ドキュメントを見ても見当たらないのですが...。

チャート上でALT+Dです。

 
Alexey Viktorov:

意味がわからない......これのことですか?台本なんです。

ありがとう、何かやりすぎた。もちろん、上記は今まで実現できなかったチャート管理を手に入れたのです。しかし、私の目標は違っていた。

// Активирует данный чарт.
bool ChartActivate( const long Chart )
{
  return(ChartSetInteger(Chart, CHART_BRING_TO_TOP, true) && ChartGetInteger(Chart, CHART_WINDOW_HANDLE));
}


使用例

// Переключает чарты с одним и тем же советником клавишами клавиатуры '<'/'>'.

void ChartNextActivate( const int Step = 1, const bool Expert = true )
{
  long Charts[];  
  // https://www.mql5.com/ru/forum/170952/page196#comment_20841674
  const int Size = GetExpertCharts(Charts, Expert ? ChartGetString(0, CHART_EXPERT_NAME) : NULL);
  const long Chart = ChartID();
  
  if ((Size > 1) && (bool)(Step % Size))
    for (int i = 0; i < Size; i++)  
      if (Charts[i] == Chart)
      {
        // https://www.mql5.com/ru/forum/170952/page197#comment_20845067
        ChartActivate(Charts[(i + ((Step > 0) ? Step : (Size - ((-Step) % Size)))) % Size]);
        
        break;
      }

  return;  
}

void OnChartEvent( const int id, const long &lparam, const double&, const string& ) 
{         
  if (id == CHARTEVENT_KEYDOWN) 
    switch ((int)lparam)
    {
    case KEY_LEFT2:
      ChartNextActivate(-1);
      break;

    case KEY_RIGHT2:
      ChartNextActivate();      
      break;
    }
}
理由: