Второй код работает:
Vladimir Karputov:
Попробовал запустить:
Первый код, при первом запуске дал квадрат Малевича:
...
А в журнале причина:
array out of range in 'Canvas.mqh' (3284,22)
Renat Fatkhullin:
В финальной версии не доложили последние изменения по всей видимости.
Исправим в понедельник. А пока положите в /include/math/stat обновленный файл, пожалуйста.
Другое дело:
Появились новые режимы торговли?
Гистограмма специально сделана анимированной?
Просьба добавить перегрузку
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;
}
}
#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
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
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 код. Никто не будет загружать сторонние библиотеки для проверки..
Советник в тестере
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Попробовал запустить:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее"
Renat Fatkhullin, 2016.11.11 17:23
Если вернуться к этому комменту, то вот новые возможности для отображения графиков в MT5 с использованием стандартной графической библиотеки:
#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 сериями данных.
Еще два стиля вывода того же самого графика:
Интересная возможность использовать функции в качестве серий данных:
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);
}
Первый код, при первом запуске дал квадрат Малевича:
со второго раза уже лучше: