Desead: Народ, раньше в эдиторе при наведении курсора на зарезервированное слово и нажатии ф1 открывалось снизу окно с описанием данной функции, сейчас у меня этого не стало. В чём может быть проблема ?
Так и делаю: if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())
Сколько советников я писал, везде при торговле отложками проверю рыночные условия (стоплевел, спред и тд). Посмотрел я как пишут гридеров, так ни в одном не увидел, чтоб хоть перед посылом какого-н. одного ордера проверялось значение того же стоплевела. В чём причина?
На форуме уйма метариалов про тестер, и почему его результаты отличаются от реальной жизни. Поищите в разделе Статьи, там эта тема затрагивалась не раз.
Это значит, что в DLL строка передается именно как char*, а не как MqlStr. Но не значит, что в ex4-программе строка не хранится как MqlString. Вообще передача параметров из ex4 в dll - это (по заявлениям разработчиков) довольно сложный процесс, сопровождающийся всевозможными проверками и преобразованиями параметров.
Zhunko:
Справку по MQL4 читали? MQL4-строка это таже с-строка с нультерминатором.
Структура предназначена только для организации массива строк. Чисто придумка Метаквотов для облегчения создания строковых массивов.
#property indicator_chart_window#import "stdlib.ex4"string IntegerToHexString(int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"int GetStrAddress(string szStr);//из самописной dll.
#import "shlwapi.dll"int StrStrA(string pszFirst, string pszSrch);//из WinAPI.
#importint addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.
int init()
{//тестовый прогон; в init(), это чтобы не повторялось
string s; strAddress (s);
s=""; strAddress (s);
s=s+"something"; strAddress (s);
s="MyStr"; strAddress (s);
s="mystr"; strAddress (s);
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();//оставляем блок пустым
return(0);
}
void strAddress (string myStr)//тестовая функция
{
addr1=GetStrAddress(myStr);//эта из dll
addr2=StrStrA(myStr,myStr);//эта из WinAPI
Print(" строка ", CharToStr(34), myStr, CharToStr(34), " указатель 1: ", IntegerToHexString(addr1), ", указатель 2: ", IntegerToHexString(addr2));//в лог
}
Механизм следующий. shlwapi.dll в /system32. StrStrA это WinAPI-аналог StringSubstr. MQL4 безтиповый язык, и если мы ставим на выходе ловушку не string, а int, то и получаем не строку, а указатель на неё. StrStrA ищет первое вхождение подстроки в строке (с учётом регистра, но т.к. у нас строки одинаковы, нас это не волнует), и поскольку у нас строки одинаковы, возвращает указатель на первый символ строки, т.е. на саму строку.
Поясню для тех, кто будет использовать этот код. В WinAPI нет формата string. Вместо него только формат lpsz (указатель на первый элемент массива символов, заканчивающийся 0х00, он же /0). Указатель на адрес памяти. А поскольку у нас ячейки памяти 32-битные (т.е. 4 байта) и int тоже размером 4 байта, то всё туда аккуратно входит.
Итог: можно спокойно упаковывать строки в интовые массивы, эмулируя тем самым структуры (а на MQL4 структур и классов нет) для передачи их дальше в dll, если там необходимы структура или класс. Самописные dll для перевода типов данных (т.е. конструкции типа "int(const char*)" (си-тип перевода) или аналогичные на C++) теперь можно не использовать.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Народ, раньше в эдиторе при наведении курсора на зарезервированное слово и нажатии ф1 открывалось снизу окно с описанием данной функции, сейчас у меня этого не стало. В чём может быть проблема ?
Кто подскажет, как сделать результат всегда положительным ? (лоты Бай - лоты Селл)= -0,25, а надо чтоб всегда с плюсом ?
Так и делаю: if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())
что в скобках?
if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(??????))
там где ???? что?
Я открываю позицию объемом = 0,05. Нужен код - как сократить объем позиции на 0,01 при достижении убытка 100 пунктов для 5 знаков ???
Спасибо.
Сколько советников я писал, везде при торговле отложками проверю рыночные условия (стоплевел, спред и тд). Посмотрел я как пишут гридеров, так ни в одном не увидел, чтоб хоть перед посылом какого-н. одного ордера проверялось значение того же стоплевела. В чём причина?
На форуме уйма метариалов про тестер, и почему его результаты отличаются от реальной жизни. Поищите в разделе Статьи, там эта тема затрагивалась не раз.
Спасибо.
Нашёл альтернативу.
Это значит, что в DLL строка передается именно как char*, а не как MqlStr. Но не значит, что в ex4-программе строка не хранится как MqlString. Вообще передача параметров из ex4 в dll - это (по заявлениям разработчиков) довольно сложный процесс, сопровождающийся всевозможными проверками и преобразованиями параметров.
Справку по MQL4 читали? MQL4-строка это таже с-строка с нультерминатором.
Структура предназначена только для организации массива строк. Чисто придумка Метаквотов для облегчения создания строковых массивов.
StrStrA из библиотеки shlwapi.dll. Тест:
Лог:
Механизм следующий. shlwapi.dll в /system32. StrStrA это WinAPI-аналог StringSubstr. MQL4 безтиповый язык, и если мы ставим на выходе ловушку не string, а int, то и получаем не строку, а указатель на неё. StrStrA ищет первое вхождение подстроки в строке (с учётом регистра, но т.к. у нас строки одинаковы, нас это не волнует), и поскольку у нас строки одинаковы, возвращает указатель на первый символ строки, т.е. на саму строку.
Поясню для тех, кто будет использовать этот код. В WinAPI нет формата string. Вместо него только формат lpsz (указатель на первый элемент массива символов, заканчивающийся 0х00, он же /0). Указатель на адрес памяти. А поскольку у нас ячейки памяти 32-битные (т.е. 4 байта) и int тоже размером 4 байта, то всё туда аккуратно входит.
Итог: можно спокойно упаковывать строки в интовые массивы, эмулируя тем самым структуры (а на MQL4 структур и классов нет) для передачи их дальше в dll, если там необходимы структура или класс. Самописные dll для перевода типов данных (т.е. конструкции типа "int(const char*)" (си-тип перевода) или аналогичные на C++) теперь можно не использовать.