我从来没有学过编程,但我想写一个EA - 页 8

 

那么,怎么了,程序员朋友们?
我是这个主题的作者,我一直在征求意见。


所以在标题中声明的结构

这里是有趣的部分:这是什么?
我在OnTick中定义了一个条件,如果没有未结订单
然后。
如果快速摆动大于慢速摆动。
然后:打开一个订单。



问题:为什么订单在每个点上都会打开?

 
Sergey Lobzankin:

那么,怎么了,程序员朋友们?
我是这个主题的作者,我一直在征求意见。


所以我在标题中声明了这个结构

有趣的是,这是什么?
我在OnTick中定义了一个条件,如果没有未结订单
然后。
如果快速摆动大于慢速摆动。
然后:打开一个订单。



问题:为什么订单在每个tick上都能打开?

这意味着在每一次打勾 时,条件都得到满足。

如果条件应该是MA交叉,那么在第一个柱子上是<少,在零柱子上变成>多。但在你的情况下,在零条上>更多,在第一条上>更多。

 

https://code.org/

https://scratch.mit.edu/

如果你想在MQL中学习编程(这其实是一种思维风格,而不是一种语言)--这对你自己和你周围的人来说是非常麻烦的。

点击链接--一切都很简单,学校水平(有些地方甚至是小学水平),但至少对算法和写下它们有一些介绍。否则,每次打喷嚏,你都会联系论坛,等待答案,这是在浪费时间,而时间就是金钱。

PS/,我建议大家都来读一读,scratch是一个来自内部的杰作--现代编程的鼻祖。

Code.org: Любой может научиться
Code.org: Любой может научиться
  • code.org
Каждый студент в каждой школе заслуживает возможность изучения компьютерных наук.
 
Sergey Lobzankin:

那么,怎么了,程序员朋友们?
我是这个话题的作者,继续征求意见。


因此,在标题中宣布了这个结构

有趣的是,这是什么?
我在OnTick中定义了一个条件,如果没有未结订单
然后。
如果快速摆动大于慢速摆动。
然后:打开一个订单。



问题:为什么订单在每个tick上都能打开?

那么,该话题的作者同志?

我一个月前就劝过你,但你根本没有注意到。

这是一个关于交易、自动交易系统和交易策略测试的论坛。

我从来没有学过编程,但我想写一个专家顾问。

Alexey Volchanskiy, 2018.04.10 17:47

有一个按钮 "代码",在有字母Aa的按钮左边。如果你不知道如何使用它,你可以使用它,例如,发布你自己的代码)。


这是一个关于交易、自动交易系统和策略测试的论坛。

我从来没有学过编程,但我想写一个专家顾问。

Konstantin Nikitin, 2018.04.10 21:18

嗯,你那里没有什么超级自然的东西。因此,最好的选择是。在这里发布,但只能通过

有人会提出一些有用的建议。


而且你还是用图片来粘贴代码。

 
你好,我正面临以下问题。EA需要零点和第一条的移动平均线 数据来分析情况并进行进一步计算。
OnCalculate函数基本上是为了写一个指标而发明的。我已经在我的EA中把这个功能分开了,但我不知道如何从OnTick中访问它。
 
Sergey Lobzankin:
你好,我遇到了这样一个问题。专家顾问需要零点和第一条的移动平均线 数据来分析情况和进行进一步计算。
OnCalculate函数基本上是为了写一个指标而发明的。在我的EA中,我已经把这个函数分开了,但我不知道如何从OnTick中访问它。

你甚至不需要尝试把OnCalculate从一个指标带到一个EA中去!你只需要把OnCalculate从一个指标带到一个EA中去。你只需要在EA中应用到该指标(使用指标句柄),并获得数据。

iMA 代码中使用iMA和iStdDev的例子iStdDev- 从OnTick提取的代码,从iMA指标中获取数据

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;
 
Vladimir Karputov:

你甚至不需要尝试把OnCalculate从指标中带到EA中去!你只需要把OnCalculate从指标中带到EA中去。你只需要在专家顾问中应用到该指标(使用指标句柄)并获得数据。

iMA 代码中使用iMA和iStdDev的例子iStdDev- 从OnTick中提取代码,从iMA指标中获取数据

我怀疑你是该死的正确的))))
现在,我将尝试用数组的方式来玩 ...阵列...

 

还有一件事...。
我在专家的帽子里找到了把手的位置

extern int    zazor      = 0;
extern double Lots       = 0.1;
extern int    TrailingStop = 15;
extern int    TrailingStep = 2;
extern int    Magic      = 123;
extern int    Slippage   = 5;
int Digits;

int timeprev=0;

int    ticket;
double price,TP,SL,lastlot;
string;

int ima1_handle          = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);               //хендл
int ima2_handle          = iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
int Stoch_handle         = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
int ATR_handle           = iATR        (Symbol(),0,21);                              //хендл
double ima1_massiv [2];                                                              //статический массив для быстрой машки 

而在论坛上,谁做...每个人的做法都不同,有的用oninit,有的用ontik。
重点是,在我的布局中,我把数据复制到一个数组中,并得到要复制的元素数量

void OnTick()
  { 
    int ima_count1 = CopyBuffer(ima1_handle,0,1,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    string str_ima1 = IntegerToString(ima_count1);                 //отладочная
    printf("мой первый хендл = "  + str_ima1);                     //отладочная
   }
P.S.,顺便说一下,测试者看到了所有手柄在专家顾问标题中的指标,并在可视化图表中画出了所有的内容。
 

这里有一篇文章,清楚地解释了如何实现对指标数据的访问
https://www.mql5.com/ru/articles/43

但是,伙计们,数据被复制到一个数组中,毫无疑问,但是我需要得到具体的数字,也就是说,如果当前条形的最后一格的波浪是1.32456,那么我需要在日志中得到这个数字(为了确保真正得到这个数字),我需要在双倍 类型中取出这个具体信息。

要计算两个不同泥浆之间的int 类型的点的数量,我如何得到这个值?


Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sergey Lobzankin:

这里有一篇文章,清楚地解释了如何实现对指标数据的访问
https://www.mql5.com/ru/articles/43

但是,伙计们,数据被复制到一个数组中,毫无疑问,但是我需要得到具体的数字,即如果当前条形的最后一个刻度上的波浪是132456,我需要在日志中得到这个数字(为了确保这个数字是实际得到的),我需要在双倍 类型中取出这个具体信息。

来计算两个不同的混杂物之间的int 点的数量。你如何得到这个值?


你到底有没有看,有没有读过别人告诉你的东西?我在 帖子中给了你一个例子。它只是从两个iMAs获取数据

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;

有两个iMA指标 - "快速 "和 "正常"。这两个指标的数据分别在数组ma_fastma_normal 中获得。我们要求对#start_pos的计数,从酒吧。

然后我们访问获得的数据(在这个例子中,我们访问第0条的数据)。