DenisR: Что такое "режим математических расчётов"?
В режиме математических расчетов нет прогонов по истории - за счет этого достигается максимальная скорость когда требуется производить мат.вычисления без использования торговых операций. В этом режиме, если оптимизировать торговый эксперт, придется рыночное окружение (побарное/потиковое поступление в эксперт исторических данных, спред и пр.) моделировать самостоятельно. В этом случае можно использовать какие угодно исторические данные, брать их из предварительно подготовленного файла.
DenisR: Что такое "режим математических расчётов"?
В этом режиме вызывается только OnTester(); Но сложность и объём расчётов в OnTester() не ограничивается. Если сами посчитаете прибыль вашего эксперта при заданных входных параметрах - сможете использовать генетический алгоритм тестера для оптимизации.
1. Я понимаю так что переход на x64 ОС, связан с тем что на 4 байтах более 4 ГБайт оперативки не "разметишь". У меня x64 ОС, почему указатели у меня занимают 4 байта (касается не только mql, также и в C++))?
2. Вопрос по MT4: почему при вызове dll функции:
#import "MemoryDLL.dll"void fn(double j[]); // Подозреваю что так отдается адрес?#import
int start()
{
double dVal[1];
fn(dVal);
retutn(0);
}
в dll переменную можно нормально принять в таких вариантах:
extern"C" __declspec(dllexport) void fn(double &j); // Почему так работает????
// и такextern"C" __declspec(dllexport) void fn(double *j); // Думаю что должно работать только так
хотя предполагаю что указатель и ссылка, по идеи должны быть не совместмы, например потому что указатель на double занимает у меня 4 байта.
Я считал что элементарный участок памяти состоит из двух частей - адрес и значение. Если передаем адрес, то он должен быть в какой-то переменной с адресом передаваемого участка в поле "значение". Поэтому непонимаю как могут одновременно корректно работать такие варианты:
extern"C" __declspec(dllexport) void fn(double &j);
// и такextern"C" __declspec(dllexport) void fn(double *j);
// Прототип для MQL - void fn(&s[]);
Можно попробывать найти объяснение типа - передается участок памяти "как есть" а принимающая сторона сама решает что с ним делать (записать адрес в значение или копировать адрес). Но эта гипотеза разрушается тем фактом что не работает так:
Можно опять попытаться найти объяснение - в первых дувух на вход подается адрес в поле "значение", а принимающая сторна решает что с этим делать. В противовес этому тот факт что в С++ комипилятор говорит что так делать нельзя, по его мнению или так:
Пришел к выводу что ссылка и указатель по большему вещи одинаковые. Есть Небольшие отличия:
записать адрес в ссылку можно только один раз, в указатель много
отличный синтаксис
Очень важным моментом является: если у вызываемой функции аргумент - ссылка или указатель, то фактически передается адрес. Это очень важно понимать при вызове из dll.
теперь выдает
2012.02.26 15:47:46 Tester file C:\Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5\Files\signal10000.csv open error [32]
Во-первых, проверьте что там у вас в папке C:\Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5\Files\
Второе: ошибки 32 в MQL5 нет. Странно... Вы проверяете хендл после попытки открывия файла и код последней ошибки после попытки открытия?
Что такое "режим математических расчётов"?
Что такое "режим математических расчётов"?
В этом режиме вызывается только OnTester(); Но сложность и объём расчётов в OnTester() не ограничивается. Если сами посчитаете прибыль вашего эксперта при заданных входных параметрах - сможете использовать генетический алгоритм тестера для оптимизации.
Помогите пожалуйста разобраться, мозг кипит.
1. Я понимаю так что переход на x64 ОС, связан с тем что на 4 байтах более 4 ГБайт оперативки не "разметишь". У меня x64 ОС, почему указатели у меня занимают 4 байта (касается не только mql, также и в C++))?
2. Вопрос по MT4: почему при вызове dll функции:
в dll переменную можно нормально принять в таких вариантах:
хотя предполагаю что указатель и ссылка, по идеи должны быть не совместмы, например потому что указатель на double занимает у меня 4 байта.
Так работает:
Не работает:
Хотя бы как привильно (хочу передать несколько массивов)? А то не хочу через задний ход.
Хотя бы как привильно (хочу передать несколько массивов)? А то не хочу через задний ход.
а в MQL в объявлении функции кто будет & ставить?
Да, наверное так будет правильно. Только все равно МКЛ как-то не по Си работает (могу ошибаться).
Да, наверное так будет правильно. Только все равно МКЛ как-то не по Си работает (могу ошибаться).
есть одно отличие в передаче - все нужно передавать только по ссылке &, по указателю ' * ' можно передавать только объекты классов
Я считал что элементарный участок памяти состоит из двух частей - адрес и значение. Если передаем адрес, то он должен быть в какой-то переменной с адресом передаваемого участка в поле "значение". Поэтому непонимаю как могут одновременно корректно работать такие варианты:
Можно попробывать найти объяснение типа - передается участок памяти "как есть" а принимающая сторона сама решает что с ним делать (записать адрес в значение или копировать адрес). Но эта гипотеза разрушается тем фактом что не работает так:
Можно опять попытаться найти объяснение - в первых дувух на вход подается адрес в поле "значение", а принимающая сторна решает что с этим делать. В противовес этому тот факт что в С++ комипилятор говорит что так делать нельзя, по его мнению или так:
или так:
В общем ничего кроме противоречий я не вижу.Сам спросил, сам отвечу.
Пришел к выводу что ссылка и указатель по большему вещи одинаковые. Есть Небольшие отличия:
Очень важным моментом является: если у вызываемой функции аргумент - ссылка или указатель, то фактически передается адрес. Это очень важно понимать при вызове из dll.
Подскажите чайнику, как найти точное значение пересечения главной и индикаторной линии стохастика?
Визуально это просто, а как реализовать программно?