"ダミー "からの質問 - ページ 44

 

Alexさん、m_rates[1].lowとm_rates[0].closeを比較する方法を教えて下さい。

m_rates[1].low=m_rates[0].close は正しいでしょうか、また一般的に m_rates[0].close はまだ閉じていないバーの最終価格なのでしょうか?

また、一般的に、インジケータを使用せずに最後のバーを処理する正しい方法は何でしょうか?(CopyRates、CopyHigh)。

 
Makser:

Alexさん、m_rates[1].lowとm_rates[0].closeを比較する方法を教えて下さい。

m_rates[1].low=m_rates[0].close は正しいでしょうか、また一般的に m_rates[0].close はまだ閉じていないバーの最終価格でしょうか。

また、一般的に、インジケータを使用せずに最後のバーを処理する正しい方法は何でしょうか?(CopyRates、CopyHigh)。

インジケータ以外の価格データを扱うには、CopyRatesや CopyHigh/Low/Closeなどを使うべきと正しく書かれていますね。

ヘルプやコードベースに例が掲載されています。

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - Документация по MQL5
 

コンパイル時に「行の 型変換によりデータが失われる可能 性がある」というメッセージが表示される

datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

で、Expert Advisorで関数を使用すると、テスターで動作しなくなります。理由を教えてください。コードは記事から引用しています。https://www.mql5.com/ru/articles/22

//+------------------------------------------------------------------+
//|                                                 CheckLastBar.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(isNewBar())
     {
      PrintFormat("Новый бар: %s",TimeToString(TimeCurrent(),TIME_SECONDS));
     }
  }
//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool isNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
//--- текущее время
   datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

//--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем 
      last_time=lastbar_time;
      return(false);
     }

//--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }
//+------------------------------------------------------------------+
Ограничения и проверки в экспертах
Ограничения и проверки в экспертах
  • 2010.08.02
  • MetaQuotes Software Corp.
  • www.mql5.com
Можно ли торговать этим инструментом в понедельник? Хватит ли денег на открытие позиции? Какой размер убытка мы получим, если сработает Stop Loss? Как ограничить количество отложенных ордеров? Была ли выполнена торговая операция на этом баре или это было на предыдущем? Если торговый робот не может сделать подобные проверки, то любая прибыльная торговая система может превратиться в проигрышную. В этой статье показаны примеры проверок, которые пригодятся в любом эксперте.
 
Europa:

コンパイル時に「行の 型変換によりデータが失われる可能 性がある」というメッセージが表示される

で、Expert Advisorで関数を使用すると、テスターで動作しなくなります。理由を教えてください。コードは記事から引用しています。https://www.mql5.com/ru/articles/22

テスターはよくわからない。について"...型変換」です。
   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
 

面白いですね、でも私も似たようなの持ってます。double配列に double データを充填して います。 この行でも同じ警告が出ます。

CopyBuffer(ma_handle,0,0,13,ma);
 
Karlson:

面白いですね、でも私も似たようなことがあります、double 配列にdouble データを入れるのですが、この行で同じ警告が出ます。

定数(0,0,13)の解釈が曖昧なのが原因かもしれませんね。CopyBufferには 3種類の呼び出しがあります。必要な型の変数をパラメータとして代用したり、定数を明示的に型変換するようにしましょう。
 
変換はすでに試しましたが、マスクハンドルを(int)で変換すれば明示的な変換は通りますが、もちろん私には合いません :-)。
 
Karlson:
変換はすでに試しましたが、マスクハンドルを(int)で変換すると、明示的な変換が行われますが、もちろん私には合いません :-)。
ちょっと待ってください。ハンドルネームの種類は?
 

間違っている 情報が 必要だ

int  iMA(
   string               symbol,            // имя символа
   ENUM_TIMEFRAMES      period,            // период
   int                  ma_period,         // период усреднения
   int                  ma_shift,          // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,         // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle
   );

ありがとうございます。

 
私もいくつか質問があります。移動平均のクロスオーバーシグナルモジュールはどこにあるのですか?アリゲーター 信号の行方は?もうひとつ。各インジケーターには、数種類のシグナルがあります。MACDがゼロクロス信号のみを受け入れるようにするには?