MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 770

 
Igor Zakharov:

ATRインジケータを使用する

ありがとうございます。でも、私の場合、まだ使い方がよくわかりません。

誰かがCopyRatesへの リンクを投げた(ありがとう、残念ながらコメントは削除されました)ので、私はiVolume()が高値と安値の違いか何か他のものであるかを理解しようとしているのですか?

I.e. 私の場合(私の理解では)、月と週のデータの配列を作成し、その値を平均化することなどが可能です。

 
Alexander Layzerevich:

iVolume()は、高値と安値の差なのか、それとも別のものなのか?

MTのチャート上で右クリックし、show volumesを選択すると、チャートの下にヒストグラムが表示されます。

https://docs.mql4.com/ru/series/ivolume

iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Значение тикового объема бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
 
Igor Makanu:

MTのチャート上で右クリックし、show volumesを選択すると、チャートの下にヒストグラムが表示されます。

https://docs.mql4.com/ru/series/ivolume

分かりやすく説明していただき、ありがとうございました。

となると、残るは以下の通り。月のデータを計算するために2つの配列HighとLowを 作成し、週のデータを計算するために2つの配列HighとLowを 作成します。

そして、すべてが平均化される、など。

全部コードで実装してみるか...。

先月と先週の計算方法を教えてください。

例から判断すると:

初期位置と必要要素数による参照

intCopyHigh()
stringsymbol_name,// シンボル名
ENUM_TIMEFRAMEStimeframe,// 期間
intstart_pos,// どこから始めるか。
intcount です// 何枚コピー するか
doublehigh_array[]// 最高値をコピーするための配列
);

timeframe = PERIOD_D1;

start_pos = 1; // 前のバー

count = 30; // 30日(月)

 
Alexander Layzerevich:

もうひとつの質問:先月と先週の数え方はどうすればいいのでしょうか?

飲み屋の飛び込み営業や、飲み屋のない週末もあるので、日付指定したほうがいい、これは助かる。

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   datetime         start_time,       // с какой даты
   datetime         stop_time,        // по какую дату
   double           high_array[]      // массив для копирования максимальных цен
   );

https://docs.mql4.com/ru/series/copyhigh

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Функция получает в массив high_array исторические данные максимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар. При копировании заранее неизвестного количества...
 
Igor Makanu:

日付は、バーのスキップ(引用)があり、バーがない週末は、これが役立つので、より良いです。

https://docs.mql4.com/ru/series/copyhigh

ありがとうございます。ただ、EA(ロボット)にどの日付から始まってどこで止まるかを知らせるにはどうしたらいいのでしょうか。

1から30本のキャンドル(30日)を数えるのが簡単だと思います。あるいは7本のローソク足(日数)。

このコードを取得しました。

//************************************************************************************************/
double iPointOrderStep()
{
double Awerage30 = 0, SummAwerage30 = 0;
double Awerage7 = 0, SummAwerage7 = 0;

double High30[], Low30[], High7[], Low7[];
//----------------Для месяца---------------------------
int iHigh30 = CopyHigh(Symbol(),PERIOD_D1,1,30,High30);
int iLow30 = CopyLow(Symbol(),PERIOD_D1,1,30,Low30);
//----------------Для недели---------------------------
int iHigh7 = CopyHigh(Symbol(),PERIOD_D1,1,7,High7);
int iLow7 = CopyLow(Symbol(),PERIOD_D1,1,7,Low7);

for(int i=0;i<30;i++) 
   {
      SummAwerage30 += (High30[i]-Low30[i]);
   }
for(int i=0;i<7;i++) 
   {
      SummAwerage7 += (High7[i]-Low7[i]);
   }

   Awerage30 = SummAwerage30/30;
   Awerage7 = SummAwerage7/7;
   
   double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2),0);
   return (iPointOrderStep/6);
}
//************************************************************************************************/

しかし、残念ながら値=0を出力してしまいます。

どこがエラーなのか教えてください・・・。

それと...

セッション開始時や端末再起動時に、週に一度だけ計算を行うには?

 
Alexander Layzerevich:

ありがとうございます。しかし、私の場合、どのように使えるのかまだ理解できていません。

ATRの本質は、一定期間のバーの高さの平均値です。MA(high)-MA(low)を使うのもいいかもしれませんね。オーバーシュートを展開するよりも簡単です

 
Igor Zakharov:

ATRの本質は、一定期間のバーの高さの平均値です。MA(high)-MA(low)を使った方がいいかもしれません。オーバーシュートを反転させるより簡単です

すなわち、例によって

intiATR(
stringsymbol,// シンボル名
ENUM_TIMEFRAMESperiod,// 期間
intma_period// 平均化期間
);

double Awerage30= iATR(Symbol(),PERIOD_D1, 30); これは、30日間の平均的な数値になりますか?

 
Alexander Layzerevich:

すなわち、例によって

intiATR(
stringsymbol,// シンボル名
ENUM_TIMEFRAMESperiod,// 期間
intma_period// 平均化期間
);

double Awerage30= iATR(Symbol(),PERIOD_D1, 30); it will be average value for 30 days ?30日間の平均値?

カレンダーの日数ではありません。30日逆算(日曜、土曜)

パラメータシフトのない関数から判断して、あなたは5でやっているし、4で質問している :)

 
Igor Zakharov:

ただ、カレンダーのものはダメですね。30日バー逆算(日曜、土曜)

シフトパラメータなしの関数から判断して、あなたは5でやっていて、4で質問していますね :)

このブランチは両端末用です。特に同じ機能で。

 
Artyom Trishkin:
両端子のこの分岐特に同じ機能で。

では、タイトルは訂正すべきでしょうか?