Для сравнения языков MQL5 и QLUA мы написали несколько тестов, которые замеряют скорость выполнения базовых операций.
В тестах использовался компьютер с Windows 7 Professional 64 bit, MetaTrader 5 build 1340 и QUIK версии 7.2.0.45.
Результаты представлены в таблице, где все значения представлены в миллисекундах (чем меньше время, тем лучше):
Название MQL5 QLUA Преимущество MQL5 TestFloat 3 969 273 391 69 раз TestArrays 375 230 768 615 раз TestFibo 1 125 61 110 55 раз TestPiCalculated 2 328 183 812 79 раз TestQuickSort 2 031 211 279 104 раза TestAckermann 828 64 541 78 раз
Сравнения показывают, что MQL5 быстрее QLUA от 50 до 600 раз на базовых операциях любого языка программирования. Это достигается за счет того, что MQL5 является строго типизированным компилируемым языком в 32/64 бита в противоположность динамическому интерпретируемому QLUA.
Что это дает трейдеру? Возможность максимально быстро обсчитывать огромные массивы данных (а они в MetaTrader 5 практически не ограничены) и быстрее принимать решения.
Это всего лишь проверка базового функционала. Но за фасадом языков скрываются их API. И не у всех он простой. MQL5, будучи прикладным языком для торговой платформы, содержит в себе сотни специализированных функций по доступу/обработке рыночной информации и взаимодействию со всеми компонентами терминала.
Важно, что MQL5 не прицеплен сбоку к существующей системе, а сам является центральным звеном платформы. Все процессы в торговом терминале построены вокруг удовлетворения потребностей разработчиков торговых роботов. Это дает максимальную скорость доступа к внутренним данным платформы и прямой канал для торговых операций.
Ниже приведены примеры скриптов и результаты тестирования, чтобы каждый мог убедиться в результатах. Полные архивы скриптов можно скачать по ссылке https://c.mql5.com/36/9/mql5-vs-qlua-benchmarks.zip и проверить самостоятельно.
TestFloat — Скорость выполнения операций с вещественными числами
Код на MQL5
//+------------------------------------------------------------------+ //| TestFloat.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" //--- #define MAX_SIZE 35000 //--- double f0=0; double f1=123.456789; double f2=98765.12345678998765432; double f3=12345678943.98; //--- //+------------------------------------------------------------------+ //| Функция OnStart | //+------------------------------------------------------------------+ int OnStart() { uint tick_count,res; //--- тест tick_count=GetTickCount(); TestFloat(); res=GetTickCount()-tick_count; Print("Test float time=",res," ms"); Print("Result=",f0); //--- возвращает время, затраченное на выполнение теста, в милисекундах return((int)res); } //+------------------------------------------------------------------+ //| Функция тестирования | //+------------------------------------------------------------------+ void TestFloat() { for(int i=0;i<MAX_SIZE;i++) for(int j=0;j<MAX_SIZE;j++) { f0=f0+(f1/(i+1))-f2+(f3*i); } } //+------------------------------------------------------------------+
Код на LUA
-- TestFloat f0=0.0 f1=123.456789 f2=98765.12345678998765432 f3=12345678943.98 MAX_SIZE=35000 function Start() local t=os.clock() TestFloat() local res=(os.clock()-t)*1000 -- результы выполнения занесем сюда check=f0 message("TestFloat time=" ..res.." ms\n check="..tostring(check)); end function TestFloat() -- в цикле мы проходим до значение на 1 меньше, чем MAX_SIZE MAX_SIZE=MAX_SIZE-1 for i=0, MAX_SIZE do for j=0, MAX_SIZE do f0=f0+(f1/(i+1))-f2+(f3*i); end end end -- запускаем скрипт Start()
TestArrays — Тестирование времени доступа к элементам массива
Код на MQL5
//+------------------------------------------------------------------+ //| TestArrays.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" //--- #define MAX_SIZE 32000 //--- int x[MAX_SIZE],y[MAX_SIZE]; //+------------------------------------------------------------------+ //| Функция OnStart | //+------------------------------------------------------------------+ int OnStart() { int i,k; uint tick_count,res; //--- тест tick_count=GetTickCount(); for(i=0;i<MAX_SIZE;i++) x[i]=i+1; for(k=0;k<MAX_SIZE;k++) for(i=MAX_SIZE-1; i>=0; i--) y[i]+=x[i]; long check=0; for(i=0;i<MAX_SIZE;i++) { check+=y[i]; } res=GetTickCount()-tick_count; Print("TestArrays time=",res," ms"); Print("check=",check); //--- возвращает время, затраченное на выполнение теста, в милисекундах return((int)res); } //+------------------------------------------------------------------+
Код на LUA
-- TestArrays function Start() MAX_SIZE=32000 x={} y={} local start=os.clock() for i=1,MAX_SIZE,1 do x[i]=i y[i]=0 end y[MAX_SIZE]=0 for k=1,MAX_SIZE,1 do for i=MAX_SIZE, 1,-1 do y[i]=y[i]+x[i] end end local res=(os.clock()-start)*1000 -- контрольное число local check=0 for k=1,MAX_SIZE,1 do check=check+y[k] end message("Time = "..res.." ms\n check=".. check) end -- запускаем скрипт Start()
TestFibo — вычисление последовательности ряда Фибоначии
Код на MQL5
//+------------------------------------------------------------------+ //| TestFibo.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" //--- #define MAX_SIZE 40 long fib[MAX_SIZE]; //+------------------------------------------------------------------+ //| Функция OnStart | //+------------------------------------------------------------------+ void OnStart() { int i; uint res; //--- тест res=GetTickCount(); for(i=0;i<MAX_SIZE;i++) fib[i]=TestFibo(i); res=GetTickCount()-res; Print("TestFibo time=",res," ms"); Print("Fibo[39]=",fib[39]); } //+------------------------------------------------------------------+ //| Функция тестирования | //+------------------------------------------------------------------+ long TestFibo(long n) { if(n<2) return(1); //--- return(TestFibo(n-2)+TestFibo(n-1)); } //+------------------------------------------------------------------+
Код на LUA
-- TestFibo MAX_SIZE=40 fib={} function Start() start=os.clock() for i=0,MAX_SIZE-1 do fib[i]=TestFibo(i) end res=(os.clock()-start)*1000 message("TestFibo time="..res.." ms\n Fibo[39]="..fib[39]) end function TestFibo(n) if n<2 then return(1) else return(TestFibo(n-2)+TestFibo(n-1)) end end -- запускаем скрипт Start()
TestPiCalculated - Вычисление 22 000 знаков числа Pi
Код на MQL5
//+------------------------------------------------------------------+ //| TestPiCalculated.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" //--- #define MAX_SIZE 22000 //--- в эту строку поместим значение числа PI string str; int a[(MAX_SIZE/4+1)*14]; //+------------------------------------------------------------------+ //| Функция OnStart | //+------------------------------------------------------------------+ int OnStart() { uint tick_count,res; //--- тест tick_count=GetTickCount(); PiCalculate(MAX_SIZE); res=GetTickCount()-tick_count; Print("TestPiCalculated time=",res," ms"); Print("Pi=",StringSubstr(str,0,16)); //--- возвращает время, затраченное на выполнение теста, в милисекундах return((int)res); } //+------------------------------------------------------------------+ //| Функция тестирования | //+------------------------------------------------------------------+ void PiCalculate(const int digits) { int d = 0,e,b,g,r; int c = (digits/4+1)*14; int f = 10000; //--- for(int i=0;i<c;i++) a[i]=20000000; //--- while((b=c-=14)>0) { d=e=d%f; while(--b>0) { d = d * b + a[b]; g = (b << 1) - 1; a[b]=(d%g)*f; d/=g; } r=e+d/f; if(r<1000) { if(r>99) str+="0"; else { if(r>9) str+="00"; else str+="000"; } } str+=IntegerToString®; } } //+------------------------------------------------------------------+
Код на LUA
-- TestPiCalculated -- сколько знаков числа Pi будем вычислять MAX_SIZE=22000 -- в эту строку поместим значение числа Pi str="" a={} function OnStart() start=os.clock() PiCalculate(MAX_SIZE) -- время вычисления числа Pi в миллисекундах res=(os.clock()-start)*1000 message("TestPiCalculated time=" .. res .." ms\n\n Pi="..string.sub(str,1,16)) -- выведем 16 знаков end function PiCalculate(digits) d = 0 c = (math.floor(digits/4)+1)*14 -- math.floor() -целочисленное деление на основе примера из справки LUA f = 10000 for i=0,c do a[i]=20000000 end c=c-14 b=c while b>0 do e=d%f d=e while b-1>0 do b=b-1 d = d * b + a[b] g = (b * 2) - 1 a[b]=(d%g)*f d=math.floor(d/g) -- math.floor(d/g) -целочисленное деление на основе примера из справки LUA end r=e+math.floor(d/f) -- math.floor(d/f) - это целочисленное деление на основе примера из справки LUA if r<1000 then if(r>99) then str=str .. "0" else if(r > 9) then str=str .. "00" else str=str .. "000" end end end str=str .. string.format("%d",r) c=c-14 b=c end end -- запускаем скрипт OnStart()
Тестирование времени быстрой сортировки массива
Код на MQL5
//+------------------------------------------------------------------+ //| TestQuickSort.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" //--- будем сортировать массив размером в 16 миллионов элементов #define MAX_SIZE 16000000 //--- int array[MAX_SIZE]; //+------------------------------------------------------------------+ //| Функция OnStart | //+------------------------------------------------------------------+ void OnStart() { uint tick_count,res; for(int i=0;i<MAX_SIZE;i++) array[i]=i%100; tick_count=GetTickCount(); QuickSort(array,0,MAX_SIZE-1); res=GetTickCount()-tick_count; Print("TestQuickSort time=",res," ms"); for(int i=1;i<MAX_SIZE;i++) if(array[i]<array[i-1]) { Print("Array not sorted"); break; } } //+------------------------------------------------------------------+ //| Функция быстрой сортировки | //+------------------------------------------------------------------+ void QuickSort(int &arr[],int left,int right) { int i=left; int j=right; int center=arr[(i+j)/2]; int x; //--- while(i<=j) { while(arr[i]<center && i<right) i++; while(arr[j]>center && j>left) j--; if(i<=j) { x=arr[i]; arr[i]=arr[j]; arr[j]=x; i++; j--; } } if(left<j) QuickSort(arr,left,j); if(right>i) QuickSort(arr,i,right); } //+------------------------------------------------------------------+
Код на LUA
-- TestQuickSort -- будем сортировать массив размером в 16 миллионов элементов MAX_SIZE=16000000 array={} function Start() for i=0,MAX_SIZE-1 do array[i]=i%100 end start=os.clock() QuickSort(array,0,MAX_SIZE-1) res=(os.clock()-t)*1000 message("TestQuickSort time=" .. res .. " ms") for i=1,MAX_SIZE-1 do if array[i]<array[i-1] then message("Array not sorted"); break; end end end function QuickSort(arr,left,right) i=left j=right center=arr[math.floor((i+j)/2)] while i<=j do while(arr[i]<center and i<right) do i=i+1 end while(arr[j]>center and j>left) do j=j-1 end if i<=j then x=arr[i] arr[i]=arr[j] arr[j]=x i=i+1 j=j-1 end end if left<j then QuickSort(arr,left,j) end if right>i then QuickSort(arr,i,right) end end -- запускаем скрипт Start()
TestAckermann — тестирование рекурсии в функциях
Код на MQL5
//+------------------------------------------------------------------+ //| TestAckermann.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2016, MetaQuotes Software Corp." #property link "http://www.mql5.com" //--- количество прогонов функции Аккермана в цикле #define MAX_SIZE 120000 //+------------------------------------------------------------------+ //| Функция OnStart | //+------------------------------------------------------------------+ void OnStart() { //--- контрольное число uint check=0; //--- время выполнения в миллисекундах uint res=0; //--- тест res=GetTickCount(); for(int i=0;i<MAX_SIZE;i++) check+=Ackermann(1+i%3,1+i%5); res=GetTickCount()-res; Print("TestAckermann time=",res," ms"); Print("check=",check); //--- } //+------------------------------------------------------------------+ //| Функция тестирования | //+------------------------------------------------------------------+ int Ackermann(int m,int n) { if(m==0) return(n+1); if(n==0) return(Ackermann(m-1,1)); //--- return(Ackermann(m-1,Ackermann(m,(n-1)))); } //+------------------------------------------------------------------+
Код на LUA
-- TestAckermann MAX_SIZE=120000 function Start() local check=0 -- контрольное число local start=os.clock() for i=1,MAX_SIZE do check=check+Ackermann(1+i%3,1+i%5); end local finish=os.clock() local time=(finish-start)*1000 message("TestAckermann time=".. time.." ms\n\n check="..check) end function Ackermann(m,n) if(m==0) then return(n+1) end if(n==0) then return(Ackermann(m-1,1)) end return(Ackermann(m-1,Ackermann(m,(n-1)))) end -- запускаем скрипт Start()
Вообще этот набор тестов (им пару десятков лет) используют для проверки большинства языков программирования.
Правила тестирования очень просты и лучшее доказательство их качества — это возможность публичного воспроизведения. Именно для этого опубликованы все детали, включая результаты, скриншоты и полный набор программ в исходниках для проверки.
www.mql5.com/ru/articles/481
просто ох*еть что творится — чел написал двести строк кода и чуть не сдох от натуги
Посмотрите еще раз на представленный код, поменяйте тип команд, выставьте правильные цены и пробуйте.
Не могу же я за вас программы писать?
Отсюда и жалобы. Жаловаться можно все все подряд. А вот создавать большие проекты и двигать их вперед без жалоб могут немногие.
Указанную выше жалобу не поддерживаю.
Есть 2-3 активных набрасывателя, которые вовсю пытаются вывести меня из себя. В ответ я достаточно полно и точно отвечаю.
Если убрать эмоции и разложить/очистить заданные вопросы c ответами, то получится, что сегодня множество трейдеров получили очень интересные знания.
Вот так вот шаг за шагом и происходит обучение.
На самом деле ситуация ровно обратная. В качестве доказательств могу привести большой список билдов с деталями, сообщество трейдеров на 7 языках, огромный объем документации, большая библиотека кода, маркет с >6000 программ и фриланс биржей роботописателей.
Сам MQL4 (MQL5 включили в состав MQL4 при подсчете) попал в список 100 наиболее известных языков программирования, что для узкоспециализированного языка является достижением.
http://www.tiobe.com/tiobe_index?page=programminglanguages_definition#instances
Хейтеры бывают полезны.
Самокритичный трейдер, Эквити? И это спрашивает вот этот человек? - http://smart-lab.ru/blog/315315.php
который к тому же не может адекватно вести беседу
При том что разговор вообще-то идёт о коде, а не об эквити. Я могу ответить тебе только твоим же языком — иди на хуй чмо.
— Это был Неуловимый Джо, Гарри.
— А почему его зовут Неуловимым Джо, Билл?
— Потому что его никто ещё не поймал, Гарри.
— А почему его никто ещё не поймал, Билл?
— Потому что он нафиг никому не нужен, Гарри.
обгоните assembler.
Если же же нужны DLL, то MQL5 отлично их поддерживает. И даже защищает терминал от падений внутри этих DLL.
соединяться через IPC-адаптеры и dll. IPC и dll это не костыли, а нормальное и удобное средство ОС.
пожалуй, всё-таки пост интересный. я плюсанул.
давайте без подколов и наездов. написать две строчки на асме уж как-нибудь любой студент сможет, немного погуглив и станет гуру в вашем понимании.
Далее, Вы уверены, что сможете взаимодействовать с CPU напрямую, минуя HAL? И писать офигенные программы на ASM, учитывающие особенности процессора и его архитектуры? И то, что студенты учатся прогать какую-то херню на первом курсе на асме в эмуляшке доса нихрена не значит. Если не прогали — не говорите неправду, млять, как говаривал Панфёров.
на всякий случай — HAL никак не мешает общаться с CPU «напрямую», а на asm я писал, когда для DOS ещё не нужно было никаких эмуляторов.
идите нах%й, как говаривал Шнур.
По поводу «общаться с CPU напрямую» — ну-ну, удачи. Я на асме тоже писал в студенческие годы. Особенно мне интересно посмотреть будет, как Вы это сделаете не из-под режима ядра.
Так что фразу Шнура могу адресовать в обратку.
Так что сложить регистры CPU всё ещё не проблема, под Win.
По поводу OpenCL, ну параллелизм, ок, хорош для определённых задач. Но вот пример: я наговнячил последний пример из этого поста на java, с рекурсией. Практически тупо скопировал. Исполняется за 1 секунду, 1031 мсек. Быстрее луашки тоже. Но мне показалось мало. Я решил распараллелить, с помощью forkjoinpool. Но задачки такие маленькие, что распараллеливаются отвратительно. В параллели работает в несколько раз медленнее чем луашка — накладные расходы перевешивают.
Пробовал кстати запускать под квиком пре-компиленную луашку. Байткод. Как и предполагалось, скорость ничем не отличается от некомпиленной.
Насчёт LUA — получается, что в QUIK'е JIT юзается? Не могу просто понять, почему байт-код исполняется одинаково с основным?
про fiber не знаю. в любом случае нужен большой ряд, чтобы параллелиться. Рекурсия параллелится примерно так же на java, как и обычная задача.
в Lua текст переводится в байт-код, который потом исполняется интерпретатором. есть и JIT, но это отдельный, красивый проект, который к Квику не прикручивали. я думаю захотят — прикрутят, сложностей там как мне кажется не много.
кстати попробую попозже под ним исполнить скрипт-рекурсию, посмотрю, уложится ли в ~1 секунду как Java.
Рекурсия хороша для своих задач, но для GPGPU есть страшное зло, к сожалению. Кстати, а C++ AMP не юзали ни разу? Просто интересно посмотреть, как этот зверь работает. Говорят, вроде шустро параллелит с учётом особенностей архитектуры, но я пока ещё не изучал.(((
максимум только пользовался BLAS, dgemm/dgemv (умножение матриц). мне хватило такой скорости.
домашний комп даже видеокартой не оборудован, GPU не моя тема.
ПBМ,
тут есть некоторая терминологическая путаница. То, что вы делали — это не компиляция в смысле перевода в машинный код, хоть она так и называется в Lua. Это преобразование текста программы Lua в байт-код.
Такое преобразование делает и сама Lua в момент запуска текстового скрипта, так что выигрыш это этой «компиляции» лишь в небольшом ускорении запуска скрипта (речь про миллисекунды грубо говоря, даже для довольно крупного скрипта).
действительно, путаница какая-то.
1.8 секунды 1875 мс, вместо 35 секунд.
>как язык программирования в принципе может обогнать нативный CPU код?
Справедливости ради замечу, что рукожопие еще никто не отменял =)
И много данных вы врядли вытащите из цепочки QUIK -> QLUA -> свое. Например, 20 млн тиков за раз, 5 млн баров за раз, просканить сотни инструментов и тд.
В MQL5 все это элементарно доступно нативно и обсчитать все это можно по месту без проблем.
https://www.mql5.com/ru/market — около 20 программ ежедневно добавляются и обновляются разработчиками.
Прищемили, злость льется, понимаю.
Эмоции вместо технического обсуждения. Поэтому все вами сказанное заведомо ложно.
Например, в тестере торговых стратегий запускают мультисимвольные стратегии с одновременным моделированием нескольких инструментов на основе реальных тиков.
И поверх этих миллионов тиков работают роботы, кастомные индикаторы. И распределяются эти тесты на все ядра, и на расчетные фермы в локальной сети и в глобальной распределенной сети MQL5 Cloud Network, где можно в один клик запустить своего робота на 10 000 расчетных ядер.
Требования массового рынка давно уже перешли стадию «я себе через коннектор скопирую данные».
Сидя на колокации без системы доставки данных лишь с чистым коннектором, не сможете ничего сложного написать. Максимум скальпер в стакане с горизонтом в тысячи тиков.
А колокация у нас давно уже встроена прямо в платформу — система сама выбирает наилучшую точку для доступа к вашему брокеру. Мы можете весь свой терминал вместе с роботом и настройками отправить на виртуальный сервер, а потом удаленно его контролировать.
Я вытаскивал и делал. И что? В Lua тоже все доступно и без тормозов с lua api. В квике не проблема с Lua, в квике проблема с данными есть. Зато в квик + lua удобнее, чем mql5, который нативен, но почему то колбеков не сделали и приходится придумывать различные грабли.
Или это не вы?:)
Давай не дергайся. Все все поняли уже и про тебя и про них.
Ты ДОДИК!!! Твой фейс и тупые речи пол смарт-лаба видело! Как тебя лоха засняли на камеру!
И выстебало тебя дегенерата куча народу!
Так что давай не вякай, щегол!
А скорость вычислительных операций — дело десятое. Согласен с ПВМ.
Плюс эта скорость важна для бэк-/форвард-тестинга большого пула инструментов.
Да, довольно забавно слышать о скорости выставления заявки и получения рыночных данных от тех, кто юзает QUIK+LUA.)))
Пока вы делаете абсолютно бездоказательные заявления.
Он вовсю старается набрасывать побольше лжи, чтобы утолить свою жажду мести.
Никаких тормозов нет.
OpenCL: Мост в параллельные миры
У МТ5 прямые шлюзы на биржу без предобработки.
MetaQuotes Software,
Уточните, прямые шлюзы откуда? прям из клиентского терминала? сразу на биржу?
Ведь в торговых платформах нужна возможность многопотоковой числодробилки. OpenCL это дает, причем в виде универсального решения без залочки на одного производителя в виде CUDA/Nvidia.
Вы можете написать робота, который будет работать на картах разных производителей, а не требовать только CUDA ради прироста скорости в 10%.
«Во-вторых, можно попробовать сравнить OpenCL и CUDA на видеокарте от NVidia, но сама NVidia реализует OpenCL через CUDA на уровне драйвера, так что сравнение будет несколько нечестным по вполне понятным причинам.» — вот не думал совсем, что вот так вот всё просто, оказывается. Собственно, эта фраза снимает все вопросы — если враппер написан прямыми руками, то разница будет только в накладных расходах по доп.вызовам соответствующих функций из CUDA, т.е. расхождения в производительности должно быть небольшим. А есть, интересно, где сравнение производительности nVidia по реализации вычислений на OpenCL/CUDA на современных картах? Просто интересно, насколько качественно реализована поддержка OpenCL в драйверах nVidia.
Мы не делали тестов OpenCL vs CUDA, но сомневаюсь, что потери больше обычных потерь на враппере. Да и Nvidia наверняка постаралась написать враппер качественно, чтобы не проигрывать в тестах через OpenCL.
Не сомневаюсь, что в инете много таких сравнений. Но в нашем случае это не важно. Важно то, что мы используем универсальный API, поддерживаем практически все GPU и даже CPU как GPU.
Но если нужна скорость и счета, и исполнения, не подходит ни тот вариант, ни другой.
Но мой ЛИЧНЫЙ опыт говорит, что проблем с прокладками в риалтайме получается больше, чем со скоростью счета. Скорость счета повысить гораздо проще, чем устранить проблемы прокладок. А они не только в понижении скорости на заявках, но и в чужих багах, и бессмысленных ограничениях, которые идут от попытки совместить тестер с исполнителем в одном коде, и так далее.
Когда начинаешь ковыряться с п. (а) появляются содержательные идеи, а возня с кодами и железом, имхо, ничего, кроме скорости не дает.
> т.к. любой интерпретируемый код будет работать в десятки и сотни раз нативного кода
О, как все запущено, зря ты прогуливал информатику =(
Бобровский Дмитрий,
ваши рекомендации?
на моей домашней железке последний тест Lua, приведённый тут, в 2 раза быстрее исполняется. 31.7 секунд заняло.
Но то, что мы уже тестировали, показывает кратный проигрыш Квика в доставке данных (у него все еще «обновлять раз в N секунд» настройки есть), обновлении стаканов и скорости исполнения торговых приказов.
Это не говоря уже о том, что в MQL5/MT5 мощная система асинхронных торговых транзакций, которая позволяет проводить множество сделок одновременно.
> Но то, что мы уже тестировали, показывает кратный проигрыш Квика в доставке данных (у него все еще «обновлять раз в N секунд» настройки есть),
Как настройка «обновлять» относится к обсуждаемой теме, т.е. скорости расчётов QLua?
Ведь все еще в 2016 году там используются не рилтайм потоки, а запросные механизмы «дай мне данные» каждые N секунд.
MetaTrader 5 качественно быстрее, так как у наших платформ такого не было даже в 2000 году. У нас очень эффективная система асинхронной доставки данных, что дает более быстрые стаканы, чарты и тд.
MetaQuotes Software,
Вы либо не разобрались, либо специально говорите неправду
о конкуретне.
В самом деле: вы ведь не хотите сказать, что рыночная
информация в QUIK обновляется раз в несколько секунд? правда ведь?
более того, вы ведь не хотите сказать, что обновление
рыночной информации в QUIK зависит от настройки обновления
клиентского портфеля, о которой вы, вероятно, ведёте речь? или вы говорите о чем-то другом? нельзя ли уточнить?
Кроме того, я вас уже спросил: как указанная вами настройка связана с расчётами в QLua? хотелось бы получить ответ на этот вопрос от вас, ведь именно вы пишете про обновление «раз в несколько секунд».
Ибо есть подозрение, как я писал, что вы либо не
разобрались, либо умышленно говорите неправду.
Ваш ответ (или его отсутствие) это покажет.
Набрасываете без стеснения и доказательств.
> Набрасываете без стеснения и доказательств.
Вам ли это говорить после "Ведь все еще в 2016 году там используются не рилтайм потоки, а запросные механизмы «дай мне данные» каждые N секунд."
MetaQuotes Software, А чего тут доказывать? Если вы пишите робота который работает со статусами асинхронных ордеров, с событиями изменения стакана (onbookevent в терминологии mql),
и уже есть стратегия, протестированная на стаканах: то, во первых, зачем такие риски в виде лишней прокладки: интернет + сервер MQL (и еще черный ящик компилятора mql).
Если это и так архитектура DMA робота — так и нужно переходить на DMA. А во вторых — не успевает mt5 брать лучшие bid и ask, так зачем эта «возня»?
Это технические вопросы и они требуют технически точных обсуждений. Приводите свои примеры в форуме mql5, мы их с удовольствием обсудим и докопаемся до истины.
в Include\Files посмотрите файл FilePipe.mqh.
Должно помочь.
да, это действительно не вариант. Только MMF тогда.
Быстродействие и функционал еще как интересны, а процессор тут не важен. Он вообще один в этих тестах.
Ну и последнее заявление показывает, что вы совсем не знаете платформы.
)))
MetaTrader 5 давно уже сертифицирован на MOEX и пару лет как работает с российской биржей.
Три секции MOEX из четырех: фьючерсы, валютка и фондовая. Все это не только доступно в МТ5, но и давно используется трейдерами в реале.
Сочувствую, что ваша картина мира рушится, но это так.
Например, тест на массивы он не верен. В луа нет массивов, а есть таблицы. Вы сравнили таблицу и массив. Таблица более сложная структура данных, чем массив. И да победили.
Все другие тесты я могу переделать на делфи или си, ну и скорость будет сапоставимая, т.к. вызовы через lua api они нативные. Сделайте лучше тесты lua api + delphi и mql5. И увидите совершенно другую картину. Интегрировать lua api и opencl можно. Интеграция qlua и lua api на много удобней чем mql5 + dll. Ошибки в lua и библиотек тоже обрабатываются. По моему ваши тесты они очевидны, но крайне однобоки, а местами некорректны. В lua и lua api можно сделать параллельную обработку данных.
Ну сколько можно? Вы упорно повторяете заведомо проигрышную идею с прошлой ветки.
Это совершенно другой технологический уровень, что и было продемонстрировано.
У вас уже есть дата-фид c историей для бектестинга?
Какие инструменты MOEX доступны для тестирования?
Не забудьте только на билд 1340 обновиться. Это можно сделать, открыв демо-счет на сервере MetaQuotes-Demo.
Свои торговые серверы Открытие еще не обновили, так что ждем внедрения последний изменений.
Не могли бы вы чуть более подробно описать архитектуру и конфигурацию подключения к бирже, какие протоколы вы используете для подключения.
Какая суммарная пропускная способность на примере открытия?
Например если у кого-то советник шлет множество неэффективных транзакций, влияет ли это на других клиентов или вы как-то с этим боритесь на своем уровне?
Насколько мне известно MT сервера расширяемы (можно писать свои плагины) т.е. клиентов можно успешно фронтранить, делать задержки, получать информацию о сделках на худой конец. Как вы с этим боретесь? )
К сожалению, я не могу отвечать, когда речь идет о чужом оборудовании, каналах, договорах и условиях.
Жаль конечно, видимо это можно будет проверить только на практике. А БКС планирует поддерживать все секции MOEX?
Так как брокеры обновляют свои серверы с довольно заметным лагом по времени, лучше всего обновляться на последние терминалы с нашего публичного демо-сервера MetaQuotes-Demo.
Несовместимостей бояться не надо — все версии полностью совместимы со старыми серверами.
Не успеваем.
joxi.ru/dp274v1c5LgoA7
Скорость 1500ms, код выполнялся в виртуальной машине.
Вот код yadi.sk/d/FS0gnTczrw2DH
Все остальное переделываем ручками и выкладываем, и перестаем нести ерунду.
Денис Гудим, год назад S# - открывали почти все исходники, кроме некоторых платных коннекторов. Год — они были открыты. Потом лавочку прикрыли (((. Сейчас остались открыты: ЛУА-коннектор для Квика и почти все dll. Сам сейчас сижу изучаю исходники ))). В общем, там закрыты сейчас лишь коннекторы и несколько ecng помощников.
К сожалению, как программист я пока ещё валенок ))), и на данном этапе моего развития — я подзавис от данной информации ))). Мне это точно не осилить ))). Пусть М.Сухов — хозяин S#, лучше сам склепает коннектор к МТ5. Я-то точно не справлюсь ))).Вы ошибаетесь, все есть. И на много удобнее все сделано.
и для экспорта одной функций. Главное правильно указать метод передачи параметров cdecl. Так и на mql5 точно также придется поступать.
Можно посмотреть здесь: Список изменений в билдах MetaTrader 5 Client Terminal
MetaQuotes Software, вы мне прямо скажите — вы API откроете или нет? Пару лет назад Морошкин(автор привода Кьюскальп), по моей наводке, поверхностно изучал ваш форум, и пришёл к выводу что API у вас есть, но типа закрытый. И коннектор для своего привода он делать не захотел. Ну плюс типа ещё народу мало сидело на МТ5, и никто, кроме меня, ему таких запросов не делал — и Морошкин не стал парится.
Если вы хотите конкурировать с Квиком — то откроейте API, чтобы авторы скальперских стаканов и других терминалов типа АТАС, и СтокШарп, — могли к нему подсоединится. Я лично не собираюсь изучать ваш встроенный язык mql5 — у меня нет на это времени. Хотите, чтобы народ полюбил МТ5 — откройте API.
Slepoy, так API открыт огромной силы — это MQL5 с прямым доступом во все.
Про скальперские стаканы: не все в курсе, что стандартный стакан в MetaTrader 5 уже наворочен:
— настраиваемый
— содержит тиковый график с покупками
— показывает открытый интерес на покупку и продажу
— 6 типов сделок с любого ценового уровня в один клик
Желающие могут легко написать свои собственные еще более лучшие панели/стаканы прямо на MQL5 и продавать их через встроенный Аппстор.
И никаких проблем с падениями, несовместимостями и тд, что происходит сейчас со сторонними приводами.
Пост звучит как специальная олимпиада — какой из инвалидов лучше :) Абсолютно некорректное сравнение с целью приукрасить одну из систем.
Если важна latency, то только прямое подключение поможет. Если нужно перемножать и обращать большие матрицы, или эконометрика любой сложности, то легко вызывать R/MKL/Matlab из .NET. И код потом можно использовать заново на любой платформе, и подключиться к любому источнику данных…
Например, в апреле по всему миру было скачано и инсталлировано больше 1.5 миллиона десктопных терминалов MetaTrader 4/MetaTrader 5. Вы хотите им совет такой же дать?
Или может дадите им удобный язык с экосистемой, документацией, маркетом с 6 000 программ, огромной бесплатной библиотекой программ в исходных кодах, сервисом фриланса (где вот сейчас в активных 430 заявок на разработки)?
Мы — дали. Это чудовищный труд по сравнению с расходами на пару программистов, которые за неделю прикрутили чужой скриптовый движок к себе.
C# самый удобный язык по многим параметрам, наряду с Java. И да, кому-то нужен кластер с R на отдельном выделенном сервере, но далеко не всем.
Но вот полный булшит — это сравнивать скриптовый и компилируемый языки для тяжелых расчетов. Есть, кстати, LuaJIT, вероятно даже можно это прикрутить к Квику.
За много лет я вижу, что достаточное количество программистов идут в трейдинг не за результатами, а за программированием. Они не признаются себе в этом, но это так.
Время идет, технологическое окружение меняется кардинально, но все равно количество изобретений инфраструктурных велосипедов не уменьшается.
Отправлять/получать заявки можно через что угодно, важно не быть зависимым от конкретной платформы.
Например, у нас в Маркете приложений трейдерами ежемесячно скачивается больше 100 000 копий программ. Причем безопасных программ (managed язык, работа в песочнице, нет DLL).
Как вы будете распространять C#/DLL код? Там же в каждом пятом будет троян, а когда хакеры поймут, там будет каждая вторая программа трояном.
Сила MQL5 в построении правильной экосистемы, где продавцы уверены в защите своего кода, а покупателя — в его безопасности для их компьютеров. Соблюдение этих условий и дало рост нашим платформам.
И все сказанное мною будет очевидным. Добавьте туда наш 15 летний опыт в разработке торговых платформ (сами написали 4 поколения языков MQL и 5 поколений торговых терминалов), создании огромного сообщества трейдеров по всему миру и уверенность станет железобетонной.
Ну а если оставаться на эгоцентричной позиции «я, лишь я и вокруг больше нет никого», то да, берем C#, строим переходники и наслаждаемся процессом программирования велосипедов вместо работы над бизнес-логикой.
Бизнес-логику мы пишем в R или же используем функциональную математику над real-time сериями данных там, где вы предлагаете ломать мозг обработчиками событий + shared mutable state. Вы почему-то убедили себя, что я хардкорный программист, однако это не совсем так, и классические продукты программистов, мягко говоря, не подходят для аналиков данных. Покажите хоть один серьезный деск, который использует ваш продукт и парадигму...
Именно такая парадигма заставляет людей «программировать события», а не работать с абстрактными данными и логикой.
buybackoff, кстати, есть ALGLIB — библиотека численного анализа — библиотека для MetaTrader 5 в полных исходниках.
Скачивается прямо из MetaEditor в пару кликов:
Множество статистических вещей, что сейчас вы вынуждены делать в R/Mathlab, реализуются по родному в MQL5 с помощью MQL5 библиотек из Codebase.
Компаний, использующих MetaTrader по миру очень много и не имеет смысла вытаскивать их имена. Важен объем использования.
Вот интересный график распространенности платформ по гугл трендс: это по всему миру
Вы хотите сказать «почему MT5 не R/Mathlab»? Каждому — свое, но часть базовой математики можно делать и без этих пакетов. Просто посмотрите на Alglib — там большое описание возможностей на русском языке.
Интеграция MT5 и Mathlab была представлена еще в 2010 году: Взаимодействие MetaTrader 5 и MATLAB, интеграция с R тоже описывалась (не смог сразу найти).
Мы уже поднимали вопрос о нативной поддержки связи с R прямо из MQL5. Как доберемся, проведем исследования и поймем, что это имеет смысл, сделаем.
joxi.ru/dp274v1c5LgoA7
Скорость 1500ms, квик работал в виртуальной машине.
Вот код yadi.sk/d/FS0gnTczrw2DH
Lua — встраиваемый язык. Он намного лаконичное любого с языка в своей предметной области
Если нужна скорость — пишем на с++ библиотеку и лопатим массивы с максимально возможной скоростью. Заведомо быстрее чем в Mql
Используя DLL, вы лишаетесь возможности нормально продавать, распространять и защищать свои программы. Потому что мало кто будет верить набору dll и exe файлов.
А на MQL5 вы:
— пишите заведомо защищенные программы, которые не могут ничего повредить(если без DLL) на стороне покупателя за счет того, что это managed язык, прямо заботящийся о безопасности и изначально работающий в своей песочнице
— можете вообще не бояться за взлом, так как каждая программа очень хорошо защищена и перешифрована (после оптимизирующего компилятора к тому же мало что восстановишь)
— продавать через Маркет напрямую всем трейдерам, причем каждая копия автоматически активируется под железо покупателя, все деньги собираются нашим сервисом, а потом выплачиваются вам
— обновлять версии программ и все обновления легко доступны покупателям
Лаконичность в прикладном языке для терминала не нужна. Наоборот нужен максимально широкий и родной функционал по доступу к данным.
— Windows 7 Professional (x64 based PC), IE 11.00, UAC
— Intel Core i7 920 @ 2.67GHz, RAM: 12 Gb
— HDD: 200 Gb
Сравнение с GCC не делали(оно по сути равно VC), а с VC да.
В среднем проигрыш MQL5 перед MSVC 2015 от десятков процентов до 2х раз. Это ожидаемо, так как С++ — это неуправляемый код без единой проверки, а MQL5 — управляемый/контролируемый код, контролирующий все исполнение и отлавливающий все критические ошибки без падения исполнимой среды.
Но работа MetaTrader 5 и MQL5 никакого отношения ни к Quik, ни QLUA, ни к их мостам не имеет.
Можно конечно и в текущем техноукладе жить, это сработает. Но показанная выше проблема есть, как и ее решение.
Как по мне, так каждый язык для определенных задач идеален. Если язык не идеален, или не знаешь как решить, уходишь на ступень выше и применяешь другие средства. Таков мой опыт.
Например.
Если мне надо подсобрать данные в табличном варианте, если мне надо пообрабатывать ленту в онлайн и подобное, я выберу квик.
Если мне надо глянуть идею быстро, если мне надо красиво визуализировать, я выберу mt5.
Если надо спуститься до тиков на тестах, я выберу tslab, если он не тянет функциональность, то быстро самописное (на delphi например).
Ну а когда мне нужна мощность, скорость и функциональность сильная, естественно ухожу в c++ под linux.
Исходя из своего опыта, у меня и сложилось мнение о непрофессиональности споров. Я считаю, нельзя лить грязь на тот или иной язык/платформу. В своей области, для определенных задач, тот или иной язык/платформа бывает идеальной.
— Лента сделок в МТ5 не ограничена, берете CopyTicks и получаете 10-20 миллионок тиков с момента старта инструмента. Анализируйте, пересчитывайте, визуализируйте как хотите.
— Тики на тестах, да еще в мильтисимвольном режиме + визуализация процесса изумительно делаются в МТ5
— Мощность, скорость и тем более функциональность доступны в МТ5. Показанные выше бенчмарки это доказывают. Функциональность описана в документации.
Выбор языка для платформы — это критический элемент жизнеспособности терминала:
— Metastock умер не в последнюю очередь из-за своего формульного недоязыка. И его защитников было много в свое время, как и писателей всяких шлюзов
— Tradestation тоже сошел со сцены, язык Easy Language оказался откровенно слаб
— Квик пошел по легкому пути с QPILE, а потом точно так же решил сэкономить с LUA. Это даст закономерный результат.
Часть разработчиков платформ поняли, что сами они не смогут написать язык и переметнулись на C#, считая, что они решили главную проблему забесплатно. Тем самым они полностью отключили у себя пункт «проблемы с языком».
Но у них осталась нерешенная проблема — код получается абсолютно не защищенным с точки зрения авторов/продавцов и смертельно опасным с точки зрения покупателей. Этих проблем лишен MQL5.
Я только в этой ветке несколько раз объяснял, почему. Понимание этого стоит многих лет и слава богу, что наши конкуренты этого не понимают.
Если серьезно, то нам достаточно нескольких месяцев, чтобы довести MetaEditor до изумительного уровня. Просто ресурсы бросали на другое.
Но сейчас у штатной IDE в виде MetaEditor есть:
— полная интеграция в платформу
— мощный интеллисенс, а не бесконечный глюк под этим именем в MSVS, лечащийся только через Assist X/Resharper
— отладка пошаговая как в реальной работе, так и в тестере (тут улучшить надо броузинг переменных и тд)
— удобный профайлер с визуализацией расходов
— огромная документация на 10 языках (да, вся документация переведена на 10 языков и доступна по F1)
— интеграция в MQL5 Codebase
— интеграция с MQL5 Storage, это Subversion хранилище, включая групповую работу над проектами
— 64 битная среда, а MSVS все из 32 битов вылезти не может из-за груза обратной совместимости
Сейчас мы выделили ресурсы на апгрейд среды программирования:
— дописываем родной экстеншен для MSVS 2015 для полной интеграции MQL5 проектов в студию, включая интеллисенс MQL5
— вводим единый формат проектов *.mqproj для студии и MetaEditor, что позволит собирать проекты в обоих системах
— кардинально улучшим работу в самом MetaEditor
— откроем доступ к сторонним Subversion хранилищам кода
При потиковом тестировании какое-либо моделирование осталось?
Аппстор работает хорошо и покупателей весь мир — посмотрите сами: https://www.youtube.com/playlist?list=PLltlMLQ7OLeJtk0k1TFjU6eHAwqfQpcFs
Ссылок в комментариях было дано достаточно. Если хотите получить представление о реальности, то достаточно их посетить.
Только на реальных счетах реальных брокеров.
Конечно на реальных счетах.
Что за ошибка млять tester agent authorization error. Еще вчера всё работало.
Сразу разберемся. Лучше написать в сервисдеск.
PS: и да, когда результаты тестов демонстрируете, неплохо бы указать характеристики железа на котором эти тесты проводились..
— Windows 7 Professional (x64 based PC), IE 11.00, UAC
— Intel Core i7 920 @ 2.67GHz, RAM: 12 Gb
— HDD: 200 Gb
Это достаточно старое железо с процессором от 2008 года и оно в принципе не играет особой роли, так как соблюдено правило запуска на том же железе.
К сожалению, при таком разбросе уровня знаний приходится объяснять базовые вещи. Тут уж ничего не поделаешь — такова ноша автора.
угу, прямо как жаба. На синтетических тестах показывает хорошую производительность, а в реале — самое тормозное говно.
Перформанс — это в первую очередь вопрос правильной архитектуры, а не скорости ЯП
— MQL5 является ядром торговой платформы и все процессы терминала построены вокруг максимально производительного удовлетворения потребностей разработчиков на MQL5
— Все кеши, методы запроса, протоколы передачи данных, все аксес серверы, исторические серверы и торговые серверы подстроены под режим «нет никаких лимитов для MQL5 запросов»
— В платформе практически сняты лимиты на объемы данных. Можно запросить 1 млн своих сделок с сервера, получить их, обработать и не убить торговый терминал. Аналогично по ценам, тикам, чартам и тд.
Именно многолетний последовательный труд, когда мы самостоятельно с нуля реализовали 4 языка MQL, MQL2, MQL4, MQL5, внедрили их в 4 торговых платформы MetaQuotes, MetaTrader 3, MetaTrader 4 и MetaTrader 5, позволил нам создать сверх эффективного решение. С каждой платформой мы все более лучше и глубже интегрировали язык, чтобы избежать потерь.
Конечно же, получилось решение совершенно другого класса качества по сравнению с терминалами, где язык прицеплен сбоку в виде библиотеки и узкого переходника, где вся производительность теряется.
Это не говоря уже о том, что нутро терминала осталось так и заточено по ручной трейдинг и там никогда не ставили задач вида «отобразим на чарте 500 000 графических объектов и будем управлять ими своим кодом».
Вы правильно сказали «перформанс — это вопрос правильной архитектуры». Мы достигли правильной архитектуры путем набивания шишек за 15 лет и написанных каждый раз с нуля четырех алгоплатформ (первая платформа FX Charts была без алго).
Заточка на ручной трейдинг — это большой плюс, чем минус, особенно актуально для скальперов.
-Мы достигли правильной архитектуры
Ваша архитектура на самом деле в корне не верная. Особенно это касается клиентского терминала. Пример неправильной архитетуры: чтобы запустить несколько копий терминала, нужно терминал копировать в разные каталоги и эти терминалы будут качать одинаковые данные. Разве сложно сделать так, как был в mt3? Модуль, который закачивает данные и терминал уже получает доступ к этим данным — так явно правильней (уменьшается трафик), возможность запускать терминал не заморачиваясь на копирование.
Если же посмотреть на саморекламу: задать вопрос представителям квик: так они тоже так нахвалят свой квик, что прям диву даешься. А по-факту будет тоже самое, что и с метатрейдером — ни хуже, ни лучше. Вы просто больше доите роботописателей и получаете дополнительный доход.
Начнешь делать что-то особое и понимаешь: вот это нельзя, вот это нельзя, тут глюки, тут сделано так, что лучше бы не делали и т. д.
Лучше вы рекламируйте свой терминал и не суйтесь в чужой, о который по факту примерно такого же качества, как и ваш: в чем-то лучше, в чем-то хуже.
В мире существуют терминалы, которые в несколько раз выигрывают у метатрейдера и позволяют получать много больше данных с рынка и эффективнее их анализировать. Но они зачастую платные. Но вот вы с ними не боретесь? Потому что сразу же проиграете.
а зачем именно несколько копий терминалов?
Мне в самом деле интересно.
На пару с самоотверженным трейдером.
1) язык должен делать свою работу сам
2) в 2016 году говорить про «там есть хуки в виде dll/плагинов (то, что вы именуете lua api)» — это реально смешно.
Технологии в этой области ушли далеко.
С чего бы это вдруг?
Вот вы сейчас меня реально насмешили. Lua api — это расширение скриптового языка, возможность его расширения. У питона тоже есть свои расширения, в т. ч. для компиляции в нативный код и которые позволяют ускорять код. Никто же не говорит, что питон прошлый век. Java есть расширения, что прошлый век Java? На Java пишут HFT, а я бы вот не стал писать HFT на mql5.
Вот сейчас я точно понял, что вы идиоты.
Александр, Так это в квике постоянно, он предлагает всегда только куда то экспортировать, а сам ничего нормально делать не умеет. Вот в этом и вопрос — зачем такой убогий терминал? Графики нет, данных о сделках после ролловера нет, языка программирования норм тоже нет (я ничего не имею против луа, но то что он прилеплен сбоку, и платформа изначально разрабатывалась без учёта этого языка создаёт массу ограничений) Получается что квик это некий изи интерфейс для DMA и всё. Опять же, вопросов бы небыло если бы квику было год или два, но ему уже 15 лет!!! и на запрос в саппорт постоянные ответы — мы рассмотрим ваше предложение и сообщим вам результаты и потом следующие — ваше предложение признано разумным и целесообразным к внедрению… почему нет ответа что внедрят через следующие 15 лет?
Могу задать вопрос по другому, в соответствии с вашим ответом — а что в квике не поганное ?
-платформа изначально разрабатывалась без учёта этого языка создаёт массу ограничений
Каких именно ограничений?
-что в квике не поганное
1. Возможность экспортирования данных в 3-и приложения.
2. lua scripting + lua api
3. Связывание таблицы параметров с другими окнами (например со стаканами)
4. Возможность открытия нескольких таблиц параметров.
5. Возможность создавать закладки и выводить в них различные окна.
6. Возможность торговать из стакана.
7. Импортированные заявок из внешних программ.
P.S. Квик и мт из одной серии плохих программ. Что лучше, что хуже вопрос исключительно в поставленных задачах.
Попробуйте сами, пожалуйста.
А вот для трейдера ничего не изменилось. Внешний вид терминала — прошлый век. У меня 4 монитора. Вынужден запускать 6 терминалов, чтобы распределить графики.
Лично для меня большой минус, это отсутствие оффлайн графиков, я в МТ4 ими пользуюсь.
Люди в подавляющем большинстве хотят чего-то нового, но не знают чего. В результате появляются мысли «ну как так? ничего не изменилось!». Но если подумать серьезно, то окажется, что сменой интерфейса все только испортишь и каждый измененный пункт меню или чарт — это потеря XX тысяч пользователей.
На самом деле мы меняем интерфейсы, но очень медленно и аккуратно.
Вы попробуйте перебрать 100 инструментов на 2-х экранах (5мин. 1 день), а после этого еще поторгуйте и опишите свои ощущения от вашего «офигенного» интерфейса.
Вы сильно, очень сильно развиваете область под программистов. Потому что сами программисты и понимаете, что делать.
А вот на простых трейдеров болт забили, элементарно не понимаете куда развиваться и боитесь сломать то, что уже есть. Чтобы понимать, надо самим пользоваться своим продуктом. Другими словами быть трейдером. Не покажете свою годовую доходность?
Но это пустой спор. Еще в 2013 году я с Ренатом спорил, что в МТ5 нужен хэджинг позиций. И тогда же меня уверяли, что знаете лучше меня. Поэтому сейчас, слушая то же самое, понимаю, что в политике компании ничего не изменилось. Вы хорошие программисты, отличные бизнесмены, а значит простым трейдерам придется страдать и дальше.
з.ы. к счастью я давно на МТ не смотрю, написал свою оболочку и МТ выступает только в качестве очередной прокладки. Поэтому я тут с академической точки зрения.