新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1255

 
SanNneK:
你能告诉我是什么情况吗?如果图表上的数字下降了哪怕一个点,那么所有的订单都被关闭了。
条件是小于或等于。在ontik中,你把投标价格分配给一个全局变量。如果出价小于或等于全局变量,那么它就关闭挂单。否则,全局变量就等于出价。
 
晚上好。能否请您给我提供紧急关闭所有刚开张的交易的代码?
 
你能告诉我如何能同时关闭我想要的所有头寸吗?
 

这样,你就可以关闭所有未完成的交易(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:

是否可以在模板函数中制作预定义变量

不,它不能。

我无法解释.... 模板是如何工作的大概是这样的--在这样的函数被调用之前,编译器对其存在一无所知(通常,如果没有调用,甚至没有编译器错误)。

然后,你调用这样一个模板函数,编译器就会填入所需的类型,然后才检查一切是否正常。

然后你再调用不同类型的参数的模板--编译器会创建一个新的函数,也就是多一个,也就是说,就像你写了两个函数,做同样的事情,但参数类型不同。


呜呼,这就是它的工作原理 ))))



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:

不,你不能。

我无法解释.... 模板是如何工作的是这样的--在你调用这样一个函数之前,编译器对它的存在一无所知(通常,如果没有调用,甚至不会出现编译器错误)。

然后,你调用这样一个模板函数,编译器就会填入所需的类型,然后才检查一切是否正常。

然后你用不同的参数类型再次调用模板--编译器会创建一个新的函数,也就是另一个,也就是说,就像你写了两个函数,它们做同样的事情,但参数类型不同。


呼,所以它去))))

我又如何知道输入参数的类型?

如果我把一个字符串类型 传给一个模板,并想进一步处理它。

输入的参数最多可以有64个,可以有任何类型,如何确定它是一个字符串?

 
Vladimir Pastushak:

我如何知道输入参数的类型?

如果我把一个字符串类型 传给一个模板,并想进一步处理它。

最多有64个输入参数,其中任何一个都可以有任何类型,我怎么能知道它是一个字符串?

类型名