MetaEditor build 1470

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir Karputov
Модератор
183290
Vladimir Karputov  

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

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

Обсуждение статьи "Статистические распределения в 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

 

Vladimir Karputov
Модератор
183290
Vladimir Karputov  

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

1 

Anatoli Kazharski
34709
Anatoli Kazharski  
Vladimir Karputov:

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

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

...

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

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


 

MetaQuotes
Админ
27508
Renat Fatkhullin  

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

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

Файлы:
Math.mqh 80 kb
Vladimir Karputov
Модератор
183290
Vladimir Karputov  
Renat Fatkhullin:

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

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

Другое дело:

ENUM_CURVE_TYPE

Vladimir Karputov
Модератор
183290
Vladimir Karputov  

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

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

fxsaber
16821
fxsaber  
Гистограмма специально сделана анимированной? 
fxsaber
16821
fxsaber  
Просьба добавить перегрузку
string GraphPlot(CurveFunction Functions[],const double from,const double to,const double step,ENUM_CURVE_TYPE type=CURVE_POINTS);
fxsaber
16821
fxsaber  
Журнал тестера снизу-вверх.
fxsaber
16821
fxsaber  
Советник в тестере
#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 узнать текущее время с точностью до мс?

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