inputint Indicatorperiod = 3;
inputdouble EnvelopesDeviation = 0.07;
int handle; //--- переменная для хранения хэндла индикатора iEnvelopesdouble upperEnv[3], lowerEnv[3]; // динамические массивы для хранения численных значений Emvelopesdouble local_envelopesupper, local_envelopeslower; // в эти переменные пытаюсь получить значения верхней и нижней линии индикатора
...
intOnInit()
...
handle=iEnvelopes(_Symbol,_Period,Indicatorperiod,0,MODE_LWMA,PRICE_OPEN,EnvelopesDeviation);
...
voidOnTick()
...
//--- Объявляем структуру, которая будут использоватьсяMqlRates mrate[3]; // Будет содержать цены, объемы и спред для каждого бараArraySetAsSeries(mrate, true);
//--- Получить исторические данные последних 3-х баровif(CopyRates(_Symbol,_Period,0,3,mrate)!=3)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//--- Используя хэндлы индикаторов, копируем новые значения индикаторных буферов в массивыif(CopyBuffer(handle,0,0,3,upperEnv)<2 || CopyBuffer(handle,1,0,3,lowerEnv)<2)
{
Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");
return;
}
...
local_envelopesupper = upperEnv[1];
local_envelopeslower = lowerEnv[1];
...
把它放进去。我没有。它是成包打开的。魔法--它无视它。
当你写代码时,将其逻辑翻译成俄语。起初,有一个循环,在其中进行比较,如果选择的订单 不是市场订单,则进入下一个迭代;如果符号不是EURUSD,则进入下一个迭代;如果magik不等于你的magik,则进入下一个迭代。在周期结束时,你要计算周期结束前所通过的迭代次数。循环结束,程序开始根据条件开立订单。考虑到其中一个条件始终为真,一个订单被打开。而这发生在每一次打勾时。
在编写代码时,将其逻辑翻译成俄语。你首先有一个进行比较的周期;如果选择的订单 不是市场订单,则进入下一个迭代;如果工具不是欧罗巴,则进入下一个迭代;如果magik不等于你的magik,则进入下一个迭代。在周期结束时,你要计算周期结束前所通过的迭代次数。循环结束,程序开始根据条件开立订单。考虑到其中一个条件始终为真,一个订单被打开。而这发生在每一次打勾时。
我明白了。但在这种情况下,如果(OrderMagicNumber()==MagicNumber)继续,已经下的订单被接受为Magic(o)下的订单。 换句话说,在EUROBAX上手动下的订单应该被忽略,应该由专家顾问用Magic再开一个订单。
OrdersTotal() - 这是一个问题,它结束了对Magic的任何操作。我明白。但在这种情况下:如果(OrderMagicNumber() == MagicNumber)继续;下的订单是采取由Magic()下的订单。 也就是说,在Eurobucks上手动下的订单应该被忽略,而另一个订单应该由具有Magic的EA开。
OrdersTotal() - 这是制止任何操纵魔术师的侵扰。代码从上到下执行。如果(OrderMagicNumber() == MagicNumber)继续; 这将中断循环主体的执行,一个新的循环迭代将开始。循环将终止,并开始下单。你是这样写的。订单 总数与此没有关系。如果你想做一个条件,如果没有用你的魔法和工具下单,那么下单代码应该是不同的。
循环浏览订单号。如果在我们的Magik和我们的仪器上发现了一个订单,那么返回--从开始退出。或一个旗帜,你的订单在那里,在开始ontik或开始检查的标志。
而创建EA的模板最好是创建一个EA脚本,一个指标。主代码字段将更加正确。
代码从上到下执行。在一个循环中,根据循环的规则。如果(OrderMagicNumber() == MagicNumber)继续; 这将中断循环主体的执行,一个新的循环迭代将开始。循环将终止,并开始下单。你是这样写的。订单 总数与此没有关系。如果你想做一个条件,如果没有用你的魔法和工具下单,那么下单代码应该是不同的。
循环浏览订单号。如果在我们的Magik和我们的仪器上发现了一个订单,那么返回--从开始退出。或一个旗帜,你的订单在那里,在开始ontik或开始检查的标志。
而创建EA的模板最好是创建一个EA脚本,一个指标。主代码字段将更加正确。
我想这不是解决办法,但要向什么方向努力呢?
我已经尝试了几十个变种。要么打开一个订单,要么没有任何中断,tuyvukucha。
在这里,顺便说一下,在OrderSekect之上--应该设置一个bool类型的变量,否则它将发誓。
这不是一个解决方案,但我应该向哪个方向努力?
我已经尝试了几十个变种。要么打开一个订单,要么不间断地打开。
这里顺便说一下,在OrderSekect之上--应该设置一个bool类型的变量,否则它将发誓。
是的,应该这样,它不知道回到哪里去了。
你最好写算法,这是你想做的。
这不是一个解决方案,但我应该向哪个方向努力?
我已经尝试了几十个变种。要么打开一个订单,要么不间断地打开。
在这里,顺便说一下,在OrderSekect之上--应该设置一个bool类型的变量,否则它将发誓。
而不是return(0),其含义应该是继续
好的和有知识的人!帮助在MT5 EA中实现包络指标。EA本身必须处理每一个刻度(不跳过)。我尝试了一些变体,我看了看文档,我似乎喜欢这个变体,但它是针对处理器OnCalculate的。我还没有试过用标准库......好吧,这是我的初步实现。
在视觉测试器中,我得到了。
是的,它应该是发誓,它回到了哪里。
你最好写下你想做的算法,不清楚你需要什么。
第一条信息中是代码。这很简单:我们突破之前的高/低点--开启交易。该EA开出的订单不应该与其他手动或其他EA开出的订单交叉,也就是说,该EA应该独立工作。
我在互联网上到处搜索。这是一个相当琐碎的话题,但有很多变化。这似乎是一件简单的事情,而且无处可寻。
在第一条信息中,代码。这很简单:突破之前的高点/低点--开启交易。该EA开出的订单不应该与其他手动开出的订单重叠,也不应该与其他EA开出的订单重叠,也就是说,该EA应该独立工作。
我在互联网上到处搜索。这是一个相当琐碎的话题,但有很多变化。这似乎是一件简单的事情,而且无处可寻。
而不是return(0),其含义应该是继续