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

 
Alexey Belyakov:

把它放进去。我没有。它是成包打开的。魔法--它无视它。



当你写代码时,将其逻辑翻译成俄语。起初,有一个循环,在其中进行比较,如果选择的订单 不是市场订单,则进入下一个迭代;如果符号不是EURUSD,则进入下一个迭代;如果magik不等于你的magik,则进入下一个迭代。在周期结束时,你要计算周期结束前所通过的迭代次数。循环结束,程序开始根据条件开立订单。考虑到其中一个条件始终为真,一个订单被打开。而这发生在每一次打勾时。

 
Valeriy Yastremskiy:

在编写代码时,将其逻辑翻译成俄语。你首先有一个进行比较的周期;如果选择的订单 不是市场订单,则进入下一个迭代;如果工具不是欧罗巴,则进入下一个迭代;如果magik不等于你的magik,则进入下一个迭代。在周期结束时,你要计算周期结束前所通过的迭代次数。循环结束,程序开始根据条件开立订单。考虑到其中一个条件始终为真,一个订单被打开。而这发生在每一次打勾时。

我明白了。但在这种情况下,如果(OrderMagicNumber()==MagicNumber)继续,已经下的订单被接受为Magic(o)下的订单。 换句话说,在EUROBAX上手动下的订单应该被忽略,应该由专家顾问用Magic再开一个订单。

OrdersTotal() - 这是一个问题,它结束了对Magic的任何操作。
 
Alexey Belyakov:

我明白。但在这种情况下:如果(OrderMagicNumber() == MagicNumber)继续;下的订单是采取由Magic()下的订单。 也就是说,在Eurobucks上手动下的订单应该被忽略,而另一个订单应该由具有Magic的EA开。

OrdersTotal() - 这是制止任何操纵魔术师的侵扰。

代码从上到下执行。如果(OrderMagicNumber() == MagicNumber)继续; 这将中断循环主体的执行,一个新的循环迭代将开始。循环将终止,并开始下单。你是这样写的。订单 总数与此没有关系。如果你想做一个条件,如果没有用你的魔法和工具下单,那么下单代码应该是不同的。

循环浏览订单号。如果在我们的Magik和我们的仪器上发现了一个订单,那么返回--从开始退出。或一个旗帜,你的订单在那里,在开始ontik或开始检查的标志。

而创建EA的模板最好是创建一个EA脚本,一个指标。主代码字段将更加正确。

datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >= 0; i--) 
{
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}
          

             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Valeriy Yastremskiy:

代码从上到下执行。在一个循环中,根据循环的规则。如果(OrderMagicNumber() == MagicNumber)继续; 这将中断循环主体的执行,一个新的循环迭代将开始。循环将终止,并开始下单。你是这样写的。订单 总数与此没有关系。如果你想做一个条件,如果没有用你的魔法和工具下单,那么下单代码应该是不同的。

循环浏览订单号。如果在我们的Magik和我们的仪器上发现了一个订单,那么返回--从开始退出。或一个旗帜,你的订单在那里,在开始ontik或开始检查的标志。

而创建EA的模板最好是创建一个EA脚本,一个指标。主代码字段将更加正确。

for(int i = OrdersTotal(); i >= 0; i--) 
{
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}

我想这不是解决办法,但要向什么方向努力呢?

我已经尝试了几十个变种。要么打开一个订单,要么没有任何中断,tuyvukucha。

在这里,顺便说一下,在OrderSekect之上--应该设置一个bool类型的变量,否则它将发誓。

 
Alexey Belyakov:

这不是一个解决方案,但我应该向哪个方向努力?

我已经尝试了几十个变种。要么打开一个订单,要么不间断地打开。

这里顺便说一下,在OrderSekect之上--应该设置一个bool类型的变量,否则它将发誓。

是的,应该这样,它不知道回到哪里去了。

for(int i = OrdersTotal(); i >= 0; i--) 
{
     bool sel = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}

你最好写算法,这是你想做的。

 
Alexey Belyakov:

这不是一个解决方案,但我应该向哪个方向努力?

我已经尝试了几十个变种。要么打开一个订单,要么不间断地打开。

在这里,顺便说一下,在OrderSekect之上--应该设置一个bool类型的变量,否则它将发誓。

而不是return(0),其含义应该是继续

 

好的和有知识的人!帮助在MT5 EA中实现包络指标。EA本身必须处理每一个刻度(不跳过)。我尝试了一些变体,我看了看文档,我似乎喜欢这个变体,但它是针对处理器OnCalculate的。我还没有试过用标准库......好吧,这是我的初步实现。

input int       Indicatorperiod         = 3;
input double    EnvelopesDeviation      = 0.07;
int    handle;                                          //--- переменная для хранения хэндла индикатора iEnvelopes
double upperEnv[3], lowerEnv[3];                        // динамические массивы для хранения численных значений Emvelopes
double local_envelopesupper, local_envelopeslower;      // в эти переменные пытаюсь получить значения верхней и нижней линии индикатора
...

int OnInit()
...
handle=iEnvelopes(_Symbol,_Period,Indicatorperiod,0,MODE_LWMA,PRICE_OPEN,EnvelopesDeviation);
...

void OnTick()
...
//--- Объявляем структуру, которая будут использоваться
   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];
...

在视觉测试器中,我得到了。


你能告诉我哪里出了问题,有什么好办法吗?
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Некорректное отображение индикатора
 
Valeriy Yastremskiy:

是的,它应该是发誓,它回到了哪里。

你最好写下你想做的算法,不清楚你需要什么。

第一条信息中是代码。这很简单:我们突破之前的高/低点--开启交易。该EA开出的订单不应该与其他手动或其他EA开出的订单交叉,也就是说,该EA应该独立工作。

我在互联网上到处搜索。这是一个相当琐碎的话题,但有很多变化。这似乎是一件简单的事情,而且无处可寻。

 
Alexey Belyakov:

在第一条信息中,代码。这很简单:突破之前的高点/低点--开启交易。该EA开出的订单不应该与其他手动开出的订单重叠,也不应该与其他EA开出的订单重叠,也就是说,该EA应该独立工作。

我在互联网上到处搜索。这是一个相当琐碎的话题,但有很多变化。这似乎是一件简单的事情,而且无处可寻。

完整地描述一下专家顾问的工作步骤。第一步是检查在选定的符号上是否有我们的魔法的订单。如果我们有,那么我们就完成工作,如果我们没有,那么我们就设定订单。下订单后会发生什么?它是这样的
 
Maxim Kuznetsov:

而不是return(0),其含义应该是继续

在那里,如果是平等的,那么我们就不要再走了,完成...如果不平等,我不喜欢,那就继续吧。这就更难理解了。
原因: