//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfPositions(string sy="",int op=-1,int mn=-1){int i, k=OrdersTotal(), kp=0;if( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()== sy || sy==""){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( op<0||OrderType()== op){if( mn<0||OrderMagicNumber()== mn) kp++;}}}}}return( kp);}
使用实例:我们把这个函数放在代码的最后,当我们开仓时检查它。
if( NumberOfPositions(NULL,OP_BUY, Magic)<1){// если нет окрытых OP_BUY позиций с заданным магиком, покупаем
ticket=OrderSend(Symbol(),0, Lots,Ask, Slippage,Bid- SL*Point,Ask+ TP*Point,NULL, Magic ,0,Blue);}
如果我们不寻找头寸而是寻找挂单,我们可以使用这个函数
函数NumberOfOrders()。 该函数返回订单的数量。你可以用函数参数限制要检查的订单列表。 sy - 仪器的名称。如果我们设置这个参数,函数将只检查指定工具的订单。NULL表示当前的符号,而""(默认)表示任何符号。 op - 待定订单的类型。有效值:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP或-1。默认值为-1意味着任何顺序。 mn - 订单标识符(MagicNumber)。默认值为-1意味着任何MagicNumber。
bool Open_Buy(){bool res=false;if( условие_1){if( NumberOfPositions(NULL, Magic)<1)// если нет открытых позиций с заданным магиком{ res=true;}}else{if( условие_1){if( NumberOfPositions(NULL, Magic)>1)// если советник уже открывал позиции{if( условие_2){
res=true;}}}}return( res);}
问题是。
如何得到一个没有减号的数字,如果结果是 Open[1]<Close[1], 当你减去 Open[1]-Close[1]时,我 得到的值是一个减号,如何使它总是一个正值,我需要计算 Open 和Close 之间的距离,也许有别的方法?
谢谢你。
问题是。
如何得到一个没有减号的数字,如果结果是Open[1]<Close[1],当你减去Open[1]-Close[1]时,我得到的值是一个减号,如何使它总是一个正值,我需要计算Open和Close之间的距离,也许有别的方法?
>> 谢谢你。
https://docs.mql4.com/ru/math/MathAbs
https://docs.mql4.com/ru/math/MathAbs
;)>> 谢谢你!
日安!
当为 MT4编写EA 时,需要以编程方式(即在EA本身的代码中)确定该EA的至少一个订单是否被打开。你能否告知是否有这样的功能?也许,如果有的话,它看起来会是这样的
Bool (是否有一个具有这个神奇数字的EA订单被打开)
{答案=真/假}
?
专家--请帮助--我们已经在绞尽脑汁了
P.S.- 试着用订单号的选项 - 没有用
日安!
在为MT4编写EA时,需要以编程方式(即在EA本身的代码中)确定该EA的至少一个订单是否被打开。你知道是否有这样的功能吗?
这个功能能起作用吗?
使用实例:我们把这个函数放在代码的最后,当我们开仓时检查它。
如果我们不寻找头寸而是寻找挂单,我们可以使用这个函数
函数NumberOfOrders()。
该函数返回订单的数量。你可以用函数参数限制要检查的订单列表。
sy - 仪器的名称。如果我们设置这个参数,函数将只检查指定工具的订单。NULL表示当前的符号,而""(默认)表示任何符号。
op - 待定订单的类型。有效值:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP或-1。默认值为-1意味着任何顺序。
mn - 订单标识符(MagicNumber)。默认值为-1意味着任何MagicNumber。
https://www.mql5.com/ru/forum/107476/page12
请解释这些文件提供了什么。
如果可能的话,以一些简单的方式。
谢谢你。
请解释这些文件提供了什么。
如果可能的话,以一些简单的方式。
谢谢你。
它们是所谓的 "库文件"。这些文件存储了经常使用的函数。它们被用来避免加载源代码。如果库文件被 "声明",声明文件中的函数可以被使用,就像它们被包含在源代码中一样。
请解释一下这些文件给了我们什么。
如果可能,请保持简单。
谢谢你。
当使用(调用)这些文件中的函数时(最初已经内置到mt4中),在EA操作不正确的情况下,我们可以在日志中看到我们在代码中的错误编号。
例如,我们调用GetLastError()函数。
在这种情况下,如果我们在代码中犯了错误或设置了不正确的外部参数,我们将在日志中看到这个错误的编号。
例如,130。
而这个数字的解码可以在-https://book.mql4.com/ru/appendix/errors。
而且我们不需要翻阅整个代码,因为我们已经知道错误出在哪里了。
这个功能能起作用吗?
使用实例:我们将该函数本身放在代码的最后(在START函数之外),然后在开仓时检查它。
如果我们不寻找头寸而寻找挂单,我们可以使用
函数NumberOfOrders()。
该函数返回订单的数量。你可以用函数参数限制要检查的订单列表。
sy - 仪器的名称。如果你指定这个参数,函数将只检查指定工具的订单。NULL表示当前的仪器,而""(默认)表示任何仪器。
op - 待定订单的类型。有效值:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP或-1。默认值为-1表示任何顺序。
mn - 订单标识符(MagicNumber)。默认值-1表示任何MagicNumber。
https://www.mql5.com/ru/forum/107476/page12
非常感谢你的提示,我们尝试了一下,但没有成功,请检查一下代码中的某个地方是否有错误。
如果我们想检查是否有卖出或买入条件,而我们没有开出或关闭订单,在这种情况下,只有第一个条件会起作用。 如果EA在过去已经开过单,那么,当一个订单被打开时,第一个+第二个条件应该触发。
我翻看了你提供的链接,也许ExistOrders(); 更合适?
(但说实话,我无法找到它,因为我显然暂时缺乏这种技能)。
你没有正确地调用该函数。
你的函数是这样调用的:如果(NumberOfPositions(NULL,Magic)>1)
它应该看起来像这样。
感受一下差异(你漏掉了"-1")!并获得你的代码。
为了控制它,你可以在图表上打印一个注释。例如,像这样(在START函数的开头)。
至于你的第二个条件,我会("不假思索")设置一个不同的魔术师和单独的函数Open_Buy_2(),通过第二个条件开仓!第二个条件的代码将看起来像这样