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

 
Lowech:
   int nomber = OrdersHistoryTotal();
   int tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY))  
こんにちは。助けてほしいんです。売り注文が終了している場合、次の注文は買いのみで開かれる可能性があります。 コードのどこが間違っているのでしょうか? アドバイスをお願いします。

この断片の2行目にエラーがあることは、すでにお伝えしました。OrderType()関数が呼ばれる 前に、OrderSelect()関数で 注文が選択されている必要があります。

3 行目にエラーがあります: しかし、番号 1 の注文はありますか? 最小番号が 1、つまりアカウントが 1 から始まる場合、最大番号はその番号と同じになります (注文 番号が 1、2、3、4、5 の合計 5 つの注文が あるとします)。OrdersHistoryTotalにカーソルを置いてF1キーを押すと、その例が表示されます。では、最大発注数はどのくらいなのでしょうか?

 
Aleksey Vyazmikin:

先ほど、月の日付を7で割って丸めるというご提案がありましたが、これは2つ目の表で行っています。

あなたのアルゴリズムが理解できない。

今、私が考えていることは、こういうことです。

1.月の初めの日の曜日を 決める。

2.週明けまであと何日あるかを調べる(水曜日(3)→月曜日7-3=4でした)。

3.5日目-2週目の始まり

4. 次に、ループの中で、5 + 7 * x から 5 + 7 * (x +1) (x - 週の数から1を引いた数) の範囲に該当する場合、その週を 探します。

でも、複雑だから、もっと簡単な方法があるのでは?

アレクセイ、私たちは違うことを話しているんだ。問題は、その月の何週目かではなく、その月の中でこの名前の週の最初の日を決めることだった。これらは異なる課題であり、結果的に異なる解決策となります。

63年間、月の週数の計算方法がいまだにわからない。例えば、ロシアでは月曜日が週の初めとされています。月が日曜日から始まるとしたら、月曜日はどのように数えるのでしょうか?2週目が始まったのでしょうか?それとも何?この質問は修辞的なもので、それについて極論を始める必要はないでしょう。

 
Alexey Viktorov:

アレクセイ、私たちは違うことを話しているんだ。問題は、その数字が月のどの週にあるかではなく、その月にその名前の週の最初の日であるかどうかであった。これらは異なる課題であり、結果的に異なる解決策となります。

63年間、私はいまだに月の週数の数え方がわからない。例えば、ロシアでは週の初めが月曜日だとしよう。月が日曜日から始まる場合、月曜日はどのようにカウントされるのでしょうか?2週目が始まったのでしょうか?それとも何?この質問は修辞的なもので、それについて極論を始める必要はないでしょう。


なるほど。私にとっては決定的な問題なのですが...。

 
Alexey Viktorov:

アレクセイ、私たちは違うことを話しているんだ。問題は、その数字が月のどの週にあるかではなく、その月にその名前の週の最初の日であるかどうかであった。これらは異なる課題であり、結果的に異なる解決策となります。

63年間、月の週数の計算方法がいまだにわからない。例えば、ロシアでは月曜日が週の初めとされています。月が日曜日から始まるとしたら、月曜日はどのように数えるのでしょうか?2週目が始まったのでしょうか?それとも何?この質問は修辞的なもので、それについて極論を始める必要はないでしょう。

ヤンデックスで 調べたら、4通り。私は「第4の道」である「横断的」が好きです。1月1日から第1週が始まり、7日後の1月8日から第2週が始まり、年末まで続きます。月ごとに同じです
Онлайн калькулятор: Определение номера недели по дате
  • Timur пользователь planetcalc
  • planetcalc.ru
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели. Первый способ: Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 «ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ» — официальный способ расчета номера недели в Российской Федерации. По...
 
Darirunu とても複雑なものが出てきます。もっとシンプルな選択肢があるはずだ。どなたか教えてください。
//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//+-------------------------------------------------------+

#property strict
string Дни[7]={"Вс","Понедельник","Вторник","Среда","Четверг","Пятница","Сб"};
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  Alert("Сейчас на компьютере: ", TimeToStr(TimeLocal(),TIME_DATE));
  Alert("Последний тик с сервера: ", TimeToStr(TimeCurrent(),TIME_DATE), " Число ", День, " ", Дни[ДеньН]);

  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;
  Alert("ДеньНеделиПервогоЧисла = ", Дни[ДеньНачалаМесяца]);

  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;

  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;
  }

  // Смотрим свечи, бары, бычьи, медвежьи
}
以下は、上記のアルゴリズムを下から上へ読み上げたものです。
 
STARIJ:

この断片の2行目にエラーがあることは、すでにお伝えしました。OrderType()関数が呼ばれる 前に、OrderSelect()関数で 注文が選択されている必要があります。

3 行目にエラーがあります: しかし、番号 1 の注文はありますか? 最小番号が 1、つまりアカウントが 1 から始まる場合、最大番号はその番号と同じになります (注文番号が 1、2、3、4、5 の合計 5 つの注文があるとします)。OrdersHistoryTotalにカーソルを置いてF1キーを押すと、その例が表示されます。では、最大発注数はどのくらいなのでしょうか?

int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
   int tip=OrderType();
   

今は正しいのでしょうか?

 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))   - так какой наибольший номер ордера?
   int tip=OrderType();

で、今はどうなんでしょう?

スクリプトを書き、各ステートメントの後に情報を表示する + GetLastError()と Alert()- 上記のサンプルスクリプトを参照。
 
STARIJ:
スクリプトを書き、各オペレータの後に情報を表示する + GetLastError() と Alert()- 上記のスクリプト例を参照してください。

しかし、エラーコードを表示するためには、_LastError変数からエラーコードを取得する必要があります。そうしないと、軽い "debug print" でロジックを破壊してしまう可能性があります。

GetLastError()は同時にGetXXX()のために、エラーコードを0にリセットして内部状態を変更するという、当たり前のことを行っています。

 
Maxim Kuznetsov:

印刷時のみ、_LastError変数からエラーコードを取得した方が良い。そうしないと、軽い "デバッグ印刷 "でロジックを破壊する可能性がある。

GetLastError()は、同時にGetXXX()のために、エラーコードを0にリセットして内部状態を変更する、という当たり前のことをします。

エラーコードを 変数に格納してエラーをリセットするか、_LastErrorに格納して後で使用するかは、好みの問題です。

 
STARIJ:
上記のアルゴリズムを下から上に読み上げるとこんな感じです。
早かったですね。バーの検索はどのように行うのですか?ループで、または時間構造を使用する?