初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1238

 
Alexey Viktorov:

而这句话的第一部分和整个问题?

嗯,我们是程序员。床头柜上的满杯和空杯以及所有这些......

然而,我写了三种可能的情况,以及在主要指标计算周期中发生的情况。

关于交易、自动交易系统和策略测试的论坛

初学者的常见问题 MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates 是一种非常有效的算法。

  • 如果它等于零,它意味着在当前条形图上按刻度计算。
  • 如果它等于1,这意味着有一个新的条形图,将计算两个条形图--前一个和当前一个。
  • 如果它大于1,意味着第一次运行或历史数据的变化
我们计算出极限。而在从极限到大于或等于零的循环中,我们计算出指标数据。并计算出极限是什么,当计算极限= rates_total - prev_calculates。

第四种情况--低于零--是很有可能的。但它根本不会在循环计算中被处理 for(int i=limit; i>=0; i--) ...。

很少有人只想思考,通常只是复制和粘贴。相应地,第一次发射和历史变化是在limit>1的时候,所以我们应该在这种情况下写第一次发射,而不是检查prev_calculated为零。

 
Сергей Таболин:

阿列克谢,我很感兴趣 ))))但我没有看到这个错误!而且,学习并不可耻。如果有人更聪明或更有经验,我也不认为这有什么不对。

我刚刚运行了这个指标,输入参数很大,是蜡烛的大小。我想拥有更小的烛台。

蜡烛图的所有价格都是从指标缓冲区 计算和初始化的。一切都是正确的。但没有渲染。我不明白为什么。

我建议你

Alexey Viktorov:

.........,开始时选择N个数字之后的柱子,或至少一个最后关闭的柱子。你试过吗?它是否呈现?

而我再次建议你开始时至少选择一个最后的封闭条。当你得到一个积极的结果时,才开始进行计算和条件。

 
Alexey Viktorov:

我已经向你建议

我建议你至少先挑出最后一个封闭的酒吧。当你得到一个积极的结果时,才开始进行计算和条件。

恐怕我不明白你的意思......你建议分配到哪个酒吧?我形成的那个?还是在图表上?

如果它在图表上,我就不需要它们的先验。该指标在任何时间框架上都被认为是相同的。

之前的计算是在H1上进行的,而现在是在H4上进行的。其结果是一样的。

2020.08.08 11:06:14.580 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора.
2020.08.08 11:06:14.789 newCandles (USDJPY,H4)  2019.01.02 06:00:00 >>> Свеча 00000 >> open = 109.419 hihg = 109.462 low = 105.388 close = 105.388 > Сформирована за 122162 тика.
2020.08.08 11:06:15.230 newCandles (USDJPY,H4)  2019.01.03 00:41:15 >>> Свеча 00001 >> open = 105.388 hihg = 109.388 low = 105.268 close = 109.388 > Сформирована за 1336258 тиков.
2020.08.08 11:06:19.056 newCandles (USDJPY,H4)  2019.01.17 21:50:34 >>> Свеча 00002 >> open = 109.388 hihg = 112.398 low = 105.388 close = 105.388 > Сформирована за 11546466 тиков.
2020.08.08 11:06:20.788 newCandles (USDJPY,H4)  2019.08.09 18:57:55 >>> Свеча 00003 >> open = 105.388 hihg = 109.388 low = 104.453 close = 109.388 > Сформирована за 5400916 тиков.
2020.08.08 11:06:22.592 newCandles (USDJPY,H4)  2019.11.07 17:57:24 >>> Свеча 00004 >> open = 109.388 hihg = 112.225 low = 105.384 close = 105.384 > Сформирована за 5555641 тик.
2020.08.08 11:06:22.725 newCandles (USDJPY,H4)  2020.03.06 11:47:26 >>> Свеча 00005 >> open = 105.384 hihg = 105.732 low = 101.377 close = 101.377 > Сформирована за 272724 тика.
2020.08.08 11:06:22.822 newCandles (USDJPY,H4)  2020.03.09 15:37:48 >>> Свеча 00006 >> open = 101.377 hihg = 105.378 low = 101.187 close = 105.378 > Сформирована за 314847 тиков.
2020.08.08 11:06:23.736 newCandles (USDJPY,H4)  2020.03.10 21:05:27 >>> Свеча 00007 >> open = 105.378 hihg = 109.385 low = 103.094 close = 109.385 > Сформирована за 2045775 тиков.
2020.08.08 11:06:27.124 newCandles (USDJPY,H4)  2020.03.19 04:13:11 >>> Свеча 00008 >> open = 109.385 hihg = 111.711 low = 105.385 close = 105.385 > Сформирована за 10250092 тика.
2020.08.08 11:06:27.296 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора закончен.
 
Сергей Таболин:

恐怕我不明白你的意思......你建议突出哪一个酒吧?在我身上形成的那个?还是在图表上?

如果它在图表上,我就不需要它们的先验。该指标在任何时间框架上都被认为是相同的。

之前的计算是在H1上进行的,而现在是在H4上进行的。其结果是一样的。

阿列克谢告诉你,首先你至少应该让你的指标画出蜡烛。因为他们是。至少在目前的酒吧。如果你能做到这一点,就认为迈向理解的第一步已经过去。但最好不要通过尝试不同的参数来找到它,而是用你自己的头脑。

这与 "先验 "有什么关系?你非常需要它--如果你不能画出只有四个值的蜡烛。

 
Artyom Trishkin:

阿列克谢告诉你,你应该首先使你的指标至少只是画出蜡烛。因为他们是。至少在目前的酒吧。如果你设法做到这一点,就认为理解的第一步已经过去。但最好不要通过尝试不同的参数来找到它,而是用你自己的头脑。

这与 "先验 "有什么关系?你真的需要它,因为你无法画出一个只有四个值的蜡烛。

明白了。会做的。 ...

 
论坛的用户们,你们好。请你告诉我如何进行信号的顺序接收。例如,我从4小时的时间框架得到第一个,然后是1小时的时间框架,15分钟的时间框架,只在最小的时候进入交易?我从CodeBase 借来的代码
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool  SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);
//---
   double  ma[];
   MqlRates  rates_1[],rates_2[],rates_3[],rates_4[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(rates_1,true);
   ArraySetAsSeries(rates_2,true);
   ArraySetAsSeries(rates_3,true);
   ArraySetAsSeries(rates_4,true);
   int  start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_1,start_pos,count,rates_1)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_2,start_pos,count,rates_2)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_3,start_pos,count,rates_3)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_4,start_pos,count,rates_4)!=count)
     {
      return(false);
     }
   int  size_need_position=ArraySize(SPosition);
   if(size_need_position>0)
      return(true);

   if((rates_1[0].open<rates_1[0].close) && (rates_2[0].open<rates_2[0].close) &&
      (rates_3[0].open<rates_3[0].close) && (rates_4[0].open<rates_4[0].close) && ma[2]<ma[1] && ma[1]<ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
     }
   if((rates_1[0].open>rates_1[0].close) && (rates_2[0].open>rates_2[0].close) &&
      (rates_3[0].open>rates_3[0].close) && (rates_4[0].open>rates_4[0].close) && ma[2]>ma[1] && ma[1]>ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+

Four Timeframes 2
Four Timeframes 2
  • www.mql5.com
На одном из таймфреймов (задается через параметр 'MA Trend ') создаётся трендовый индикатор iMA (Moving Average, MA). Именно этот индикатор будет работать в качестве трендового фильтра. Тренд определяется так: MA на трёх барах (#2, #1 и #0) имеет одно направление. Советник проверяет направление бара #0 (это самый правый бар, который Вы видите...
 
你好。我已经决定尝试同时掌握mql5语言和mt5平台。我有一个关于测试器的问题。我的问题是关于引言。我已经把audcad对放在Weltrade的平台上。我在我的专家顾问里有一个小的信息面板。我在可视化模式下看到点差不正确(非常小,类似于eurusd点差)。我联系了该公司(Veltrade)的技术支持,询问mt4和mt5是否有不同的点差。他们回答说他们是一样的。如果测试器中没有通信,我应该怎么做?我试图用遗传密码来优化它。我的CPU负载是100%,工作几分钟后,我的电脑就崩溃了(处理器是phenom II x4 955(4核,3.2 GHz),冷却器是备用的)。两次之后,我决定不再冒任何风险。我应该如何理解这样的情况?那么,在没有可视化的测试时,根本就没有交易信息,只有一个图表。这是真的吗?还是我做错了什么?在可视化模式下,信息性相当差。事实上,我最担心的是价差的不一致。简而言之,我的第一印象是完全失望。但我把它折算为我还没有想明白的事实。
 
Youri Lazurenko:
你好。我已经决定尝试同时掌握mql5语言和mt5平台。我有一个关于测试器的问题。我有一个关于报价的问题。我已经把audcad对放在Weltrade的平台上。我在我的专家顾问里有一个小的信息面板。我在可视化模式下看到点差不正确(非常小,类似于eurusd点差)。我联系了该公司(Veltrade)的技术支持,询问mt4和mt5是否有不同的点差。他们回答说他们是一样的。如果测试器中没有通信,我应该怎么做?我试图用遗传密码来优化它。我的CPU负载是100%,工作几分钟后,我的电脑就崩溃了(处理器是phenom II x4 955(4核,3.2 GHz),冷却器是备用的)。两次之后,我决定不再冒任何风险。我应该如何理解这样的情况?那么,在没有可视化的测试时,根本就没有交易信息,只有一个图表。这是真的吗?还是我做错了什么?在可视化模式下,信息性相当差。事实上,我最担心的是不匹配利差。简而言之,我的第一印象是完全失望。但我把它折算为我还没有想明白的事实。

根据真实的刻度线设置测试。然后所有对传播有效性的怀疑都会消失。


 
Alexey Viktorov:

根据真实的刻度线设置测试。然后所有对传播有效性的怀疑都会消失。


谢谢你,我现在就去试试。你在优化方面有什么建议。我对速度更感兴趣。我可能会在以后的测试中纠正质量问题。

P.S. 我已经按照你的建议做了,传播是一样的。我特意检查了账户类型。它被指定为在 audcad 4.1(浮动)上传播。在同一个账户上(模拟图),它是4.7(浮动)。在测试器中,mt5,最大2.8(浮动到较小的一边)。

 
Youri Lazurenko:

谢谢你,我会试一试的。你对优化有什么建议?我对速度更感兴趣。质量可以在以后测试时进行调整。

我不能给你任何建议。我不使用优化。我认为这只是一个庸医。