voidOnStart()
{
string text="Hello man";
string keystr="ABCDEFG";
uchar src[],dst[],key[];
//--- подготовка ключа шифрованияStringToCharArray(keystr,key);
//--- подготовка исходного массива src[]StringToCharArray(text,src);
//--- вывод исходных данныхPrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- шифрование массива src[] методом DES с 56-битным ключом key[]int res=CryptEncode(CRYPT_AES256,src,key,dst);
//--- проверка результата шифрованияif(res>0)
{
//--- вывод шифрованных данныхPrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
//--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[]
res=CryptDecode(CRYPT_AES256,dst,key,src);
//--- проверка результатаif(res>0)
{
//--- вывод дешифрованных данныхPrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
}
elsePrint("Ошибка в CryptDecode. Код ошибки=",GetLastError());
}
elsePrint("Ошибка в CryptEncode. Код ошибки=",GetLastError());
}
//+------------------------------------------------------------------+string ArrayToHex(uchar &arr[],int count=-1)
{
string res="";
//--- проверка размераif(count<0 || count>ArraySize(arr))
count=ArraySize(arr);
//--- преобразование в шестнадцатиричную строкуfor(int i=0; i<count; i++)
res+=StringFormat("%.2X",arr[i]);
//---return(res);
}
Пытаюсь запустить пример из мануала с криптованием, только вместо метода CRYPT_DES использую CRYPT_AES256. В итоге ошибка 4029 после метода CryptEncode
Пытаюсь запустить пример из мануала с криптованием, только вместо метода CRYPT_DES использую CRYPT_AES256. В итоге ошибка 4029 после метода CryptEncode
Я туплю и не могу сам разобраться, пожалуйста подскажите в чём может быть проблема или хотя бы направление укажите.
Разные индикаторы синхронно начинают показывать другой кусок истории. Происходит это эпизодически, не каждый день.
Думал причина в том, что индикаторы некорректно обрабатывают динамически подгружаемую историю. Вроде, всё перепробовал, что касается корректного обновления индикатора на обновляющейся истории, уже больше не знаю, что ещё надо сделать, чтобы такого не было.
Брокер Альпари. MT5 билд 2363 от 13.03.2020.
На скринах сначала «слетевший» вариант.
Потом корректный после ручного обновления.
//+------------------------------------------------------------------+bool IsReadyForCalculate(constint rates_total,constint prev_calculated,constdatetime &time[])
{
//--- подключение терминала и синхронизация данныхif(TerminalInfoInteger(TERMINAL_CONNECTED))
if(!SymbolIsSynchronized(_Symbol) ||
!SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED)) return(false);
//--- некорректное значение prev_calculatedif(prev_calculated<0) return(false);
//---if(prev_calculated==0) prev_time = time[rates_total-1];
//--- произошли изменения в данных, но prev_calculated не сброшен в 0//--- или изменение времени не соответствует одному баруif( (rates_total!=prev_calculated+1 &&
rates_total!=prev_calculated &&
prev_calculated!=0) ||
(time[rates_total-1]>prev_time &&
time[rates_total-2]!=prev_time))
{
loc_prev_calculated = 0; // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что естьreturn(true);
}
//--- корректный сценарийif( (rates_total==prev_calculated || rates_total==prev_calculated+1 || prev_calculated==0) &&
(time[rates_total-1]==prev_time || time[rates_total-2]==prev_time))
{
loc_prev_calculated = prev_calculated;
return(true);
}
//--- return(false); // верну false, пока не знаю, какие варианты ещё могут быть
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,constint prev_calculated,constdatetime &time[],constdouble &open[],constdouble &high[],constdouble &low[],constdouble &close[],constlong &tick_volume[],constlong &volume[],constint &spread[])
{
if(!IsReadyForCalculate(rates_total,prev_calculated,time)) return(0);
//---// вызов функции зигзага//--- return value of prev_calculated for next call
prev_time = time[rates_total-1];
return(rates_total);
}
//+------------------------------------------------------------------+
У меня такой вопрос по MQL5. Как принудительно запустить функцию OnChartEvent()? Есть ли какой-нибудь штатный способ?
Я для этой цели использую функцию ChartNavigate(), запуская её из OnChartEvent(). Но это работает нестабильно - когда поступает очень много тиков, часто OnChartEvent() почему-то повторно не запускается после вызова ChartNavigate(). Я не могу понять как это взаимосвязано - работа ChartNavigate() и частота поступления тиков, но тем не менее это происходит.
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
Всем доброго времени суток! Я осваиваю функцию double OnTester() и функцию TesterStatistics( ). Написал простой код для Тестера в МТ4 , который каждый день открывает по одному ордеру в 10:00 , в 16:00 в 20:00 , и в 01:00. А в конце тестирования функция TesterStatistics( ) возвращает наименьшее значение баланса(то есть относительной просадки).
ПРОБЛЕМА
TesterStatistics( ) возвращает наименьшее значение баланса для ВСЕХ открытых ордеров
ВОПРОС
При помощи какой языковой конструкции можно сделать так, что бы TesterStatistics() возвращала наименьшее значение баланса только для ордера открытого на каком то одном часе, например в 16:00. При этом в коде должны одновременно тестироваться все указанные в коде ордера. То есть TesterStatistics( ) должна отслеживать динамику баланса из всех ордеров только одного ордера , открытого в 16: 00 и в конце тестирования вывести наименьшее значение баланса только по ордеру открытому в 16:00.
Буду очень признателен, если вставите нужную языковую конструкцию в мой код. Это позволит мне очень быстро понять алгоритм решения моей проблемы. Вот мой код.
Всем доброго времени суток! Я осваиваю функцию double OnTester() и функцию TesterStatistics( ). Написал простой код для Тестера в МТ4 , который каждый день открывает по одному ордеру в 10:00 , в 16:00 в 20:00 , и в 01:00. А в конце тестирования функция TesterStatistics( ) возвращает наименьшее значение баланса(то есть относительной просадки).
ПРОБЛЕМА
TesterStatistics( ) возвращает наименьшее значение баланса для ВСЕХ открытых ордеров
ВОПРОС
При помощи какой языковой конструкции можно сделать так, что бы TesterStatistics() возвращала наименьшее значение баланса только для ордера открытого на каком то одном часе, например в 16:00. При этом в коде должны одновременно тестироваться все указанные в коде ордера. То есть TesterStatistics( ) должна отслеживать динамику баланса из всех ордеров только одного ордера , открытого в 16: 00 и в конце тестирования вывести наименьшее значение баланса только по ордеру открытому в 16:00.
Буду очень признателен, если вставите нужную языковую конструкцию в мой код. Это позволит мне очень быстро понять алгоритм решения моей проблемы. Вот мой код.
Спасибо за отклик. Благодаря Вам понял, что указание функции TesterStatistics( ); вместе с объявлением глобальной переменной Н ... было моей ошибкой. Ошибку исправил.
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
МТ4
Что это за пункт и что он делает, нигде не нашёл описание?
Как его отключить по-умолчанию?
Пытаюсь запустить пример из мануала с криптованием, только вместо метода CRYPT_DES использую CRYPT_AES256. В итоге ошибка 4029 после метода CryptEncode
Пытаюсь запустить пример из мануала с криптованием, только вместо метода CRYPT_DES использую CRYPT_AES256. В итоге ошибка 4029 после метода CryptEncode
Разобрался. Ключ ему нужен позабористее ))
Здравствуйте!
Я туплю и не могу сам разобраться, пожалуйста подскажите в чём может быть проблема или хотя бы направление укажите.
Разные индикаторы синхронно начинают показывать другой кусок истории. Происходит это эпизодически, не каждый день.
Думал причина в том, что индикаторы некорректно обрабатывают динамически подгружаемую историю. Вроде, всё перепробовал, что касается корректного обновления индикатора на обновляющейся истории, уже больше не знаю, что ещё надо сделать, чтобы такого не было.
Брокер Альпари. MT5 билд 2363 от 13.03.2020.
На скринах сначала «слетевший» вариант.
Потом корректный после ручного обновления.
Здравствуйте.
У меня такой вопрос по MQL5. Как принудительно запустить функцию OnChartEvent()? Есть ли какой-нибудь штатный способ?
Я для этой цели использую функцию ChartNavigate(), запуская её из OnChartEvent(). Но это работает нестабильно - когда поступает очень много тиков, часто OnChartEvent() почему-то повторно не запускается после вызова ChartNavigate(). Я не могу понять как это взаимосвязано - работа ChartNavigate() и частота поступления тиков, но тем не менее это происходит.
Здравствуйте!
Я туплю и не могу сам разобраться, пожалуйста подскажите в чём может быть проблема или хотя бы направление укажите.
Может я зря это недавно добавил...
УбралЗаменил на
return(false);Понаблюдаю.
А про стандартные индикаторы, которые идут с MT5 скажите пож-та, как у вас работают. Слетают ли как у меня в скриншотах выше?
Всем доброго времени суток!
Я осваиваю функцию double OnTester() и функцию TesterStatistics( ). Написал простой код для Тестера в МТ4 , который каждый день открывает по одному ордеру в 10:00 , в 16:00 в 20:00 , и в 01:00. А в конце тестирования функция TesterStatistics( ) возвращает наименьшее значение баланса(то есть относительной просадки).
ПРОБЛЕМА
TesterStatistics( ) возвращает наименьшее значение баланса для ВСЕХ открытых ордеров
ВОПРОС
При помощи какой языковой конструкции можно сделать так, что бы TesterStatistics() возвращала наименьшее значение баланса только для ордера открытого на каком то одном часе, например в 16:00. При этом в коде должны одновременно тестироваться все указанные в коде ордера. То есть TesterStatistics( ) должна отслеживать динамику баланса из всех ордеров только одного ордера , открытого в 16: 00 и в конце тестирования вывести наименьшее значение баланса только по ордеру открытому в 16:00.
Буду очень признателен, если вставите нужную языковую конструкцию в мой код. Это позволит мне очень быстро понять алгоритм решения моей проблемы.
Вот мой код.
Всем доброго времени суток!
Я осваиваю функцию double OnTester() и функцию TesterStatistics( ). Написал простой код для Тестера в МТ4 , который каждый день открывает по одному ордеру в 10:00 , в 16:00 в 20:00 , и в 01:00. А в конце тестирования функция TesterStatistics( ) возвращает наименьшее значение баланса(то есть относительной просадки).
ПРОБЛЕМА
TesterStatistics( ) возвращает наименьшее значение баланса для ВСЕХ открытых ордеров
ВОПРОС
При помощи какой языковой конструкции можно сделать так, что бы TesterStatistics() возвращала наименьшее значение баланса только для ордера открытого на каком то одном часе, например в 16:00. При этом в коде должны одновременно тестироваться все указанные в коде ордера. То есть TesterStatistics( ) должна отслеживать динамику баланса из всех ордеров только одного ордера , открытого в 16: 00 и в конце тестирования вывести наименьшее значение баланса только по ордеру открытому в 16:00.
Буду очень признателен, если вставите нужную языковую конструкцию в мой код. Это позволит мне очень быстро понять алгоритм решения моей проблемы.
Вот мой код.
Вот это что такое?
Вот это что такое?
Спасибо за отклик. Благодаря Вам понял, что указание функции TesterStatistics( ); вместе с объявлением глобальной переменной Н ... было моей ошибкой. Ошибку исправил.