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

 
SanNneK:
チャートが1ポイントでも下がったら、全ての注文が終了した、という条件を教えてください。
以下であることを条件とする。ontikでは、グローバル変数に 入札価格を代入します。もし、bidがグローバル変数以下であれば、保留中の注文をクローズします。それ以外の場合は、グローバル変数が入札額と等しくなる。
 
こんばんは。オープンしたばかりの全トレードを緊急終了させるためのコードを教えてください。
 
希望するポジションをすべて同時にクローズする方法を教えてください。
 

こうすることで、すべてのオープントレード(MQL4)をクローズすることができます。

for(int i=OrdersTotal()-1; i>=0; i--)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<=OP_SELL)
      {
      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_SPREAD),OrderType()==OP_SELL?clrRed:clrBlue);
      }
   }
また、選択的に行う場合は、選択条件を記述する必要があります。
 
О.
 
Aleksei Stepanenko:

こうすることで、すべてのオープントレード(MQL4)をクローズすることができます。

また、選択的に行う場合は、選択条件を記述する必要があります。

ありがとうございました。

 
Igor Makanu:

2020.09.13 08:33:57.508 tst (EURUSD,H1) v1 = 1

2020.09.13 08:33:57.508 tst (EURUSD,H1) v2 = 1.01

2020.09.13 08:33:57.508 tst (EURUSD,H1) v3 = qwerty

2020.09.13 08:33:57.508 tst (EURUSD,H1) v4 = 3.1415

2020.09.13 08:33:57.508 tst (EURUSD,H1) v5 = 777

2020.09.13 08:33:57.508 tst (EURUSD,H1) v6 = 1

2020.09.13 08:33:57.508 tst (EURUSD,H1) v7 = 1.01

2020.09.13 08:33:57.508 tst (EURUSD,H1) v8 = qwerty

2020.09.13 08:33:57.508 tst (EURUSD,H1) v9 = 3.1415

2020.09.13 08:33:57.508 tst (EURUSD,H1) v10 = 777

2020.09.13 08:33:57.508 tst (EURUSD,H1) v11 = Value_11

テンプレート関数に定義済みの変数を作って、呼び出し時にすべてを指定できないようにすることは可能ですか?単純な代入でも、すべての変数が指定されていないとエラーになります。

#define  PRINT(VAL) Print(#VAL," = ",VAL)
template <typename T1, typename T2, typename T3, typename T4, typename T5,
          typename T6, typename T7, typename T8, typename T9, typename T10,typename T11>
void func(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
          T6 v6, T7 v7, T8 v8, T9 v9, T10 v10,T11 v11="")//не помогло, но ошибку не вызвало
{
   string s1 = (string) v1; PRINT(v1);
   string s2 = (string) v2; PRINT(v2);
   string s3 = (string) v3; PRINT(v3);
   string s4 = (string) v4; PRINT(v4);
   string s5 = (string) v5; PRINT(v5);
   string s6 = (string) v6; PRINT(v6);
   string s7 = (string) v7; PRINT(v7);
   string s8 = (string) v8; PRINT(v8);
   string s9 = (string) v9; PRINT(v9);
   string s10 = (string) v10; PRINT(v10);
   string s11 = (string) v11; PRINT(v11);
   
   printF( v1,  v2,  v3,  v4,  v5,  v6,  v7,  v8, v9,  v10, v11); // не получается, дает несоответствие типов.
   
}
//+------------------------------------------------------------------+
void OnStart()
{
   func(1, 1.01, "qwerty", 3.1415 f, 777, 1, 1.01, "qwerty", 3.1415 f, 777,"");// любой тип, но нужно указывать все 
                                                                             //переменные
   printF(1, 1.01, "qwerty", 3.1415 f, 777, 1, 1.01, "qwerty", 3.1415 f); //несоответствие типов, но можно не все 
                                                                        //переменные указывать
}
//+------------------------------------------------------------------+
void printF(string v1="", string v2="", string v3="", string v4="", string v5="",
          string v6="", string v7="", string v8="", string v9="", string v10="",string v11="")
{
Print( v1,  v2,  v3,  v4,  v5,  v6,  v7,  v8, v9,  v10, v11);
}
Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
Valeriy Yastremskiy:

テンプレート関数で定義済み変 数を作ることはできますか?

いいえ、できません。

説明できない......テンプレートの仕組みこのような関数が呼び出されるまで、コンパイラはその存在について何も知らない(しばしば、呼び出されなければコンパイラのエラーさえない)。

そして、そのようなテンプレート関数を呼び出すと、コンパイラは必要な型を埋めてから、すべてが正しく動作することをチェックします。

そして、別の種類のパラメータを指定してテンプレートを呼び出すと、コンパイラは新しい関数、つまり別の関数を作成します。つまり、同じことを行うがパラメータの種類が異なる2つの関数を書くようなものです


ふー、そういうことか )))



UPDです。

ができますが、テンプレートの型が一致していれば、以下の例では正しく動作します。

template<typename T1, typename T2>
int myfunc(T1 val1=0, T2 val2=0)
{
   return((int) (val1 + val2));
}

//+------------------------------------------------------------------+
void OnStart()
{
   int i1 = 2, i2 = 3;
   Print(myfunc(i1, i2));
   double d1 = 10.0, d2 = 30.0;
   Print(myfunc(d1, d2));
}
//+------------------------------------------------------------------+
 
Igor Makanu:

いいえ、できません。

説明できない......テンプレートの仕組みこのようなものです。このような関数を呼び出すまで、コンパイラはその存在について何も知りません(しばしば、呼び出しがなければコンパイラのエラーさえ発生しません)。

そして、そのようなテンプレート関数を呼び出すと、コンパイラは必要な型を埋めてから、すべてが正しく動作することをチェックします。

そして、別の種類のパラメータを指定してテンプレートを呼び出すと、コンパイラは新しい関数、つまり別の関数を作成します。つまり、同じことを行うがパラメータの種類が異なる2つの関数を書いたようになります。


ふぅ、そうですか ))))

また、入力パラメータの種類を知るにはどうしたらよいですか?

テンプレートに文字列型を 渡して、さらにそれを処理したい場合。

入力パラメータは最大64個、任意の型を持つことができますが、文字列であることはどのように判断するのですか?

 
Vladimir Pastushak:

入力パラメータの型を知るには?

テンプレートに文字列型を 渡して、さらにそれを処理したい場合。

入力パラメータは最大64個あり、そのどれもが任意の型を持つことができますが、それが文字列であることをどうやって知ることができるのでしょうか?

型名