MetaEditor build 1470

 

Попробовал запустить:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее"

Renat Fatkhullin, 2016.11.11 17:23

Если вернуться к этому комменту, то вот новые возможности для отображения графиков в MT5 с использованием стандартной графической библиотеки:

n <- 2000

k <- seq(0, n, by = 20)
a <- dbinom(k, n, pi/10, log = TRUE)
str(a)
plot(a)


#include <Math/Stat/Binomial.mqh>
#include <Graphics/Graphic.mqh>

void OnStart(void)
  {
   double    vars[101];
   double    results[101];
   const int N=2000;
//---  
   MathSequence(0,N,20,vars);
   MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
   ArrayPrint(results,4);
   GraphPlot(results);
//---
  }



По размеру кода и самим вызовам все практически одинаково. 4 рабочие строки там и там, но со стороны лучше читается MQL5 код.

Хотя под капотом находится полнофункциональная графическая ООП библиотека CGraphic, у нас есть несколько простых функций GraphPlot, которые позволяют легко выводить простые случаи с 1, 2, 3 сериями данных.

Еще два стиля вывода того же самого графика:


Интересная возможность использовать функции в качестве серий данных:

#include <Graphics/Graphic.mqh>

double Func1(double x) { return MathPow(x,2); }
double Func2(double x) { return MathPow(x,3); }
double Func3(double x) { return MathPow(x,4); }

void OnStart()
  {
   GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
  }


Будет доступно в сегодняшней бета-версии на MetaQuotes-Demo

Первый код, при первом запуске дал квадрат Малевича:

1


со второго раза уже лучше:

2

 

 

Второй код работает:

1 

 
Vladimir Karputov:

Попробовал запустить:

Первый код, при первом запуске дал квадрат Малевича:

...

А в журнале причина:

array out of range in 'Canvas.mqh' (3284,22)


 

 

В финальной версии не доложили последние изменения по всей видимости.

Исправим в понедельник. А пока положите в /include/math/stat обновленный файл, пожалуйста.

Файлы:
Math.mqh  80 kb
 
Renat Fatkhullin:

В финальной версии не доложили последние изменения по всей видимости.

Исправим в понедельник. А пока положите в /include/math/stat обновленный файл, пожалуйста.

Другое дело:

ENUM_CURVE_TYPE

 

Появились новые режимы торговли?

новые задержи режимы задержек 

 
Гистограмма специально сделана анимированной? 
 
Просьба добавить перегрузку
string GraphPlot(CurveFunction Functions[],const double from,const double to,const double step,ENUM_CURVE_TYPE type=CURVE_POINTS);
 
Журнал тестера снизу-вверх.
 
Советник в тестере
#include <MT4Orders.mqh>

#define TOSTRING(A) #A + " = " + (string)(A)

void OnTick()
{
  static bool FirstRun = true;
    
  if (FirstRun && SymbolInfoDouble(_Symbol, SYMBOL_ASK) != 0)
  {
    MqlTick Tick;    
    SymbolInfoTick(_Symbol, Tick);
    
    const int Ticket = OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0);

    MqlTick Tick2;    
    SymbolInfoTick(_Symbol, Tick2);

    Print(TOSTRING(Tick2.time_msc - Tick.time_msc));
    
    if (HistoryDealSelect(Ticket))
      Print(TOSTRING(HistoryDealGetInteger(Ticket, DEAL_TIME_MSC) - Tick.time_msc));

    FirstRun = false;
  }
}

Результат при Delay = 2500

2016.11.12 10:49:41     Core 1  2016.11.11 00:00:02   HistoryDealGetInteger(Ticket,DEAL_TIME_MSC)-Tick.time_msc = 2500
2016.11.12 10:49:41     Core 1  2016.11.11 00:00:02   Tick2.time_msc-Tick.time_msc = 0
2016.11.12 10:49:41     Core 1  2016.11.11 00:00:02   order performed buy 1.00 at 0.76123 [#2 buy 1.00 AUDUSD at 0.76123]
2016.11.12 10:49:41     Core 1  2016.11.11 00:00:02   deal performed [#2 buy 1.00 AUDUSD at 0.76123]
2016.11.12 10:49:41     Core 1  2016.11.11 00:00:02   deal #2 buy 1.00 AUDUSD at 0.76123 done (based on order #2)
2016.11.12 10:49:41     Core 1  2016.11.11 00:00:02   instant buy 1.00 AUDUSD at 0.76123 (0.76112 / 0.76123 / 0.76112)
2016.11.12 10:49:41     Core 1  AUDUSD,M1: testing of Experts\fxsaber\Test9.ex5 from 2016.11.11 00:00 to 2016.11.12 00:00 started
2016.11.12 10:49:41     Core 1  testing with execution delay 2500 milliseconds

Результат при Delay = 10000

2016.11.12 10:52:40     Core 1  2016.11.11 00:00:36   Tick2.time_msc-Tick.time_msc = 9815
2016.11.12 10:52:40     Core 1  2016.11.11 00:00:36   requote 0.76041 / 0.76139 / 0.76041 (instant buy 1.00 AUDUSD at 0.76152)
2016.11.12 10:52:40     Core 1  AUDUSD : real ticks begin from 2016.11.03 00:00:00
2016.11.12 10:52:40     Core 1  AUDUSD,M1: testing of Experts\fxsaber\Test9.ex5 from 2016.11.11 00:00 to 2016.11.12 00:00 started
2016.11.12 10:52:40     Core 1  testing with execution delay 10000 milliseconds

Как в тестере (на реале костыльно можно) в OnTick без использования OnTimer узнать текущее время с точностью до мс?

 
fxsaber:
Советник в тестере
Пожалуйста, если есть вопросы - предоставляйте минимально воспроизводимый MQL5 код. Никто не будет загружать сторонние библиотеки для проверки..
Причина обращения: