错误、漏洞、问题 - 页 737

 
-Alexey-:
为什么当我按下 "开始 "按钮时,测试器不从最初的存款水平开始测试,而是从上次测试结束的水平开始。4中没有这样的问题。如何从初始存款水平开始测试

我们无法重现你描述的情况。

让我们给出更多细节

 
stringo:

我们无法重现你描述的情况。

给我们更多的细节

我在向导 中生成了一个带止损的均线抛物线。我在开盘价上进行了测试,然后点击取消。我第二次运行它,得到了上述情况(余额和权益图没有重新绘制,而是继续)。不是来自向导的专家顾问是可以的。
Мастер MQL5: Создание эксперта без программирования
Мастер MQL5: Создание эксперта без программирования
  • 2010.12.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы хотите быстро проверить торговую идею, не тратя времени на программирование? Выберите в "Мастере MQL5" нужный тип торговых сигналов, подключите модули сопровождения позиций и управления капиталом - на этом вся работа закончена. Создайте свои реализации модулей или закажите их через сервис "Работа" - и комбинируйте новые модули с уже существующими.
 

这似乎是一个错误。

在多币种测试模式下,当等待两个工具上出现一个新的条形图 时,测试者的行为不正确。

稍微澄清一下。在isNewBar函数中,当主符号上出现一个新条形时,我们在循环中等待另一个符号上出现新条形。

我正在粘贴代码。

//в тестере баг в режиме мультивалютного тестирования
//позиция открывается если на двух инструментах появился новый бар 
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
//--- input parameters
input int      Per=10;//период средней 
input string   Instrum1="EURUSD";//первый инструмент
input string   Instrum2="GBPUSD";//второй инструмент
//-------------------------------------------------------
CTrade   trade;//торговые функции
COrderInfo orderinfo;//информация об ордере
CPositionInfo  posinfo;//информация о позиции
int hiMA ;//хэндл индикатора 
int OnInit()
  {
      hiMA=iMA(_Symbol,_Period,Per,0,MODE_SMA,PRICE_OPEN) ;
      if(hiMA < INVALID_HANDLE) return(-1) ;
      return(0);
  }
//====================================================================
void OnDeinit(const int reason)
  {
   IndicatorRelease(hiMA) ;
  }
//=====================================================================
void OnTick()
  {
      if(!isNewBar(Instrum2)) return   ;
      //Print("  Это новый бар  ");
      double   Ma[1] ;//показания индикатора 
      CopyBuffer(hiMA,0,0,1,Ma) ;
      MqlTick price;// будет использоваться для получения текущих/последних котировок цены
      bool possel=posinfo.Select(Instrum1) ;
      SymbolInfoTick(Instrum1,price) ;
      if(possel && price.bid > Ma[0] && posinfo.PositionType() == POSITION_TYPE_SELL)
         {//цена выше средней закрываем короткую позу
            trade.PositionClose(Instrum1) ; return ;
         }
      if( !possel && price.bid > Ma[0])
         {//цена выше средней нет поз открываем длинную позу 
            trade.Buy(0.1,Instrum1,0,0,0,NULL) ; return ;
         }
      if( possel && price.ask < Ma[0] && posinfo.PositionType() == POSITION_TYPE_BUY)
         {//цена ниже средней закрываем длинную позу
            trade.PositionClose(Instrum1) ; return ;
         } 
      if(!possel && price.ask < Ma[0])
         {// цена ниже средней нет поз открываем короткую позу
            trade.Sell(0.1,Instrum1,0,0,0,NULL) ;
         }
      return ;
  }
//=======================================================================
bool isNewBar(string other_symbol)
  {//возвращает труе если новый бар на двух инструментах
   static datetime last_bar_time=0;
   int cntsleep ;
   if(last_bar_time==0)
     {//--- это первый вызов, запишем время открытия и выйдем
      last_bar_time=(datetime)SeriesInfoInteger(_Symbol,Period(),SERIES_LASTBAR_DATE);
      return(false);
     }
   datetime curr_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
   if(curr_time!=last_bar_time)
     {//время открытия не совпадает это новый бар 
      last_bar_time=curr_time;
      cntsleep=0 ;
      while(!(curr_time == (datetime)SeriesInfoInteger(other_symbol,Period(),SERIES_LASTBAR_DATE)))
         {// ждем появления нового бара на втором инструменте   
            Sleep(5000); 
            if(cntsleep >10) return(false) ;// недождались 
            cntsleep++ ;
         }
      return(true) ;
     }
    return(false) ;
  }
Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
ivandurak:

这似乎是一个错误。

在多币种测试模式下,当等待两个工具上出现一个新的条形图 时,测试者的行为不正确。


你到底认为什么是错误,请解释。你没有提供任何关于测试的细节,或获得的结果,或预期的结果。

此外,我想提请您注意MetaTrader 5中的测试基础知识。它解释了蜱虫的产生机制和基本概念。

 
Rosh:

你到底认为什么是错误,请解释。你没有提供任何测试的细节或你得到的结果,你也不知道预期的结果。

此外,我想提请您注意MetaTrader 5中的测试基础知识。它解释了蜱虫的产生机制和基本概念。

这很容易。

我们启动专家顾问进行优化,看看结果。

例如,我们选择第4个通道,运行专家顾问,并获得其所有交易的正常运行 - 这是报告。

我有一种感觉。在多币种优化模式下,如果交易不是在开盘时开出的,测试员就不能将其绑定在条形图上。

如果isNewBar函数注释了循环,并且不等待另一个符号上的新条形出现,那么一切都会正常。终端机版本5 build 642。

我已经阅读了这些文章,并从那里阅读了代码。虽然,我知道我自己,我可能要重读它们。

节日快乐。

 
-Alexey-:
我在向导中生成了一个 带有抛物线止损的中型EA。我在开放的价格上运行一个测试,然后点击 "取消"。我第二次运行它,得到了上述情况(余额和权益图没有重新绘制,而是继续)。不是来自向导的专家顾问是可以的。

创建一个Servicedesk应用程序,指定

  • 建造号
  • 系统位模式和Windows版本。
  • 附上专家顾问的代码
  • EA设置和输入参数
 

这里有一段代码。如何使参数input int grusdchf=100; input int grusdjpy=100;trpar2=false 时不被优化?

//------------------------------------------------------------
input bool  trpar1=true ;//разрешение торговли по EURUDSD
input int   greurusd=100;//сетка для EURUSD
input int   grgbpusd=100;//сетка для GBPUSD
//------------------------------------------------------------
input bool  trpar2=true;//
input int   grusdchf=100;//
input int   grusdjpy=100;//
//------------------------------------------------------------
input bool  trpar3=true;//
input int   graudjpy=100;//
input int   grchfjpy=100;//
 
ivandurak:

这里有一段代码。如何使参数input int grusdchf=100; input int grusdjpy=100;trpar2=false 时不被优化?

不要在测试器中针对这些参数勾选复选框。或者澄清这个问题,否则我认为有歧义。:)

 

问题。

你需要向一个函数传递一个对象指针的数组。当然,是通过引用(一个数组)。

使用什么语法?

void MyFunc(MyClass &*MayClassPointersArray[]);  / не компилируется.
void MyFunc(MyClass *&MayClassPointersArray[]);  / компилируется, но сомневаюсь что смысл правильный

或者我应该以其他方式使用它?

 
ivandurak:

这里有一段代码。如何使参数input int grusdchf=100; input int grusdjpy=100;trpar2=false 时不被优化?

input bool trpar2=true;
input int grusdchf=100;
input int grusdjpy=100;

if (trpair2==false)  // если false то всегда 100
  {
   x_grusdchf=100;
   x_grusdjpy=100;
  }
 else                // если true то значения с перебора 
  {
   x_grusdchf=grusdchf;
   x_grusdjpy=grusdjpy;
  }
复选框在三个输入上都是启用的,然后锁定为假。