Эта статья предназначена для начинающих, для тех, кто хочет научиться написанию простых советников на новом языке MQL5. Сначала мы определимся с тем, что требуется от нашего советника, а затем приступим к написанию того, каким образом он будет это делать. 1. Торговая стратегия Он будет следить за некоторыми индикаторами и при определенном...
//находит дату точки (координату X) на прямой, на заданную цену (координата Y)datetime GetPointTimeOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, double ePrice3, string eSymbol, int eTimeFrame)
{
if(ePrice2-ePrice1==0) return(0.0);
//индекс бара соответствующий заданному времени, возможно задавать будующее времяint eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
int eIndex3=eIndex1+(int)((eIndex2-eIndex1)*(ePrice3-ePrice1)/(ePrice2-ePrice1));
return(iTime(eSymbol,eTimeFrame,eIndex3));
}
//находит цену точки (координату Y) на прямой, на заданное время (координата X)double GetPointPriceOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, datetime eTime3, string eSymbol, int eTimeFrame)
{
//индекс бара соответствующий заданному времени, возможно задавать будующее времяint eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
if(eIndex2-eIndex1==0) return(0.0);
int eIndex3=(eTime3>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime3)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime3);
return(ePrice1+(ePrice2-ePrice1)*(eIndex3-eIndex1)/(eIndex2-eIndex1));
}
//--- есть ли открытые позиции?bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //это длинная позицияreturn;
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // это короткая позицияreturn;
}
}
你好。
我是个新手,所以不要骂我太多。 )
https://www.mql5.com/ru/articles/100
本文举例说明,只有在出现买入信号且没有未平仓多头头寸 的情况下,EA才应下达买入指令。 同样,在卖出的情况下--卖出条件且没有未平仓空头头寸。
在第一次测试中,我们很快意识到,不仅有一个位置被打开,而且有几个位置被打开。问题是为什么?
我阅读了EA的代码,试图理解并找到原因,但一切似乎都很好。
你好。
我是个新手,所以不要骂我太多。 )
https://www.mql5.com/ru/articles/100本文举例说明,只有在出现买入信号且没有未平仓多头头寸 的情况下,EA才应下达买入指令。 同样,在卖出的情况下--卖出条件且没有未平仓空头头寸。
在第一次测试中,我们很快意识到,不仅有一个位置被打开,而且有几个位置被打开。问题是为什么?
我阅读了专家顾问的代码,试图理解它并找到原因。
尝试改变
if(Buy_opened)
它是由
卖出的情况也是如此
尝试更换
至
类似的出售
这不会有帮助。更经常地阅读文档。
"画一条趋势线,走向未来"
从一条线上的两个点,你可以找到该线上任意第三个点的价格,也是在未来(反之亦然)。
你好。
请注意"Chechako"。
我需要指出代码中的错误,因为在测试器中,EA没有打开订单...
编译器没有显示任何错误或警告,同样的日志也没有显示任何错误......。
你好。
我是个新手,所以不要骂我太多。 )
https://www.mql5.com/ru/articles/100
本文举例说明,只有在出现买入信号且没有未平仓多头头寸 的情况下,EA才应下达买入指令。 同样,在卖出的情况下--卖出条件且没有未平仓空头头寸。
在第一次测试中,我们很快意识到,不仅有一个位置被打开,而且有几个位置被打开。问题是为什么?
我阅读了专家顾问的代码,试图理解它并找到原因。
我曾试图帮助。我自己也是个新手。现在,关于你的问题。有几个仓位被打开是因为进行了开仓的检查,而检查时忘记了 停止。操作员返回 将控制权返回给调用程序(取自MQL5参考)。
我们必须在专家顾问的代码中添加返回的 内容(用黄色标出)。
此外,为防止编译器产生警告,应在买入和卖出开仓条件中再增加一个条件,以检查OrderSend(mrequest,mresult)。这个条件是由if 操作符定义的,应该是这样的
还应考虑到一件事。有时,在23:59:59从一个交易日转到另一个交易日时,一个已开的头寸关闭,然后在00:00:00,一个新的头寸打开。这就是所谓的展期收盘和展期开盘,这取决于特定的外汇商和其交易条件。在论坛上搜索一下,我在某个地方有一些相关信息。
问候,弗拉基米尔。
你好。人们需要你的帮助。我将两个具有不同参数的锯齿形连接到一个指标中(没有错误或警告) 问题是第二个锯齿形绘制不正确。
这是代码本身 (MQL5)
大家好。人们需要你的帮助。我将两个参数不同的之字形组合成一个指标(没有错误或警告),问题是2个之字形不能正确绘制。
下面是代码本身(MQL5)。
一切正常--只需修正顶部的几个数字即可
这一切都在发挥作用--把上面的数字修正一下。
谢谢你的帮助。还有一件事,为什么一个之字形的形成和平常一样(最大,最小),而另一个只在最大处形成。