Ваши вопросы по языку MQL4

Genry_05

Отдыхает
привет, я пытаюсь преобразовать текст из нижнего регистра в верхний регистр, но при использовании команды ...
строка text= "lower case"; text= StringToUpper (text); Print(text);

Я получаю 1 вместо "LOWER CASE",

Anyhelp будет воспринята
А хелп лениво почитать? Функция возвращает булевское выражение, не надо подставлять туда текстовую переменную: text= "lower case"; bool status = StringToUpper (text); Print(text, " stat=", status);
В случае успешного выполнения возвращает true, иначе false. Для получения кода ошибки нужно вызвать функцию GetLastError().
 
Последнее редактирование модератором:

elgaza

Новичок форума
А хелп лениво почитать? Функция возвращает булевское выражение, не надо подставлять туда текстовую переменную: text= "lower case"; bool status = StringToUpper (text); Print(text, " stat=", status);
В случае успешного выполнения возвращает true, иначе false. Для получения кода ошибки нужно вызвать функцию GetLastError().

Я понимаю спасибо
хотя, можете ли вы порекомендовать способ преобразования в верхний регистр?
 
Последнее редактирование модератором:

Genry_05

Отдыхает
на самом деле я только что понял это
благодарю вас
Да, я понимаю откуда у этой проблемы ноги растут - вызов функции StringToUpper в мукле кривой: есть входные данные и они же выходные... с какого ляха? А если я не хочу у переменной-источника регистр менять?
Анекдот:
Идет обычная лесная жизнь: птички поют, мушки летают... И вдруг поверх этого щебетания слышится чья-та тяжелая поступь... Лес стихает, звери гадают - кто идет? Медведь?
Кусты раздвигаются и на поляну выходит озверелый ежь с топором в руке. Решительно подходит к пеньку, кладет на него свой главный прибор и топором по нему ....Хрясь!
Весь лес на это дружно АХ! ... и в наступившей мертвой тишине слышится голос ежа:
- Вот такие мы звери необыкновенные!

Так и MQL...
 

elgaza

Новичок форума
Здравствуй
У меня есть простой индикатор rsi, который я пытаюсь изменить на лету
Мне удается сделать это с помощью поля редактирования, но при попытке воссоздать или обновить буферы у меня не получается.
Поэтому я прошу вас, гуру, показать мне, как это делается, если вообще возможно.
Большое вам спасибо за это.

US500M5.png
 

MrGreen86

Гуру форума
Здравствуй
У меня есть простой индикатор rsi, который я пытаюсь изменить на лету
Мне удается сделать это с помощью поля редактирования, но при попытке воссоздать или обновить буферы у меня не получается.
Поэтому я прошу вас, гуру, показать мне, как это делается, если вообще возможно.
Большое вам спасибо за это.

Посмотреть вложение 401238
скинь оригинал индикатора что бы меньше морочится.
 

elgaza

Новичок форума
на скорую руку слепил
Привет, Алекс, извини за беспокойство, ты гуру, я просто пытаюсь учиться понемногу
Я забыл прикрепить индикатор раньше, но я попытался сделать то же, что и вы, переписав буфер, и все же, я думаю, что-то там не так.
не могли бы вы просто взглянуть и сказать мне, что не так?
это меня убивает :)
благодарю вас
 

Вложения

  • Test.mq4
    Test.mq4
    13,7 КБ · Просмотры: 17

AlexeNP

Гуру форума
Привет, Алекс, извини за беспокойство, ты гуру, я просто пытаюсь учиться понемногу
Я забыл прикрепить индикатор раньше, но я попытался сделать то же, что и вы, переписав буфер, и все же, я думаю, что-то там не так.
не могли бы вы просто взглянуть и сказать мне, что не так?
это меня убивает :)
благодарю вас
Дай мне то, что меня убьет, и если я не умру то это сделает меня сильнее...
во-первых, не стесняйся ставить скобки
во-вторых, давай уже использовать новые функции... у меня старческий склероз и я помню только новые варианты)
насколько я понял, ты хочешь написать RSI с возможностью изменения параметров прямо на графике... ну, если хочешь, то давай напишем такой индикатор, постепенно и с разбором что, как и для чего мы делаем
 

Вложения

elgaza

Новичок форума
Дай мне то, что меня убьет, и если я не умру то это сделает меня сильнее...
во-первых, не стесняйся ставить скобки
во-вторых, давай уже использовать новые функции... у меня старческий склероз и я помню только новые варианты)
насколько я понял, ты хочешь написать RSI с возможностью изменения параметров прямо на графике... ну, если хочешь, то давай напишем такой индикатор, постепенно и с разбором что, как и для чего мы делаем
Доброе утро Алекс.
Прежде всего, я хотел бы еще раз поблагодарить вас за ваше время и терпение, которые вы мне показали.
Я попробовал индикатор, который вы здесь прикрепили, и вот что у меня получилось.
линии RSI по какой-то причине не отображаются правильно, и, следовательно, когда я меняю значения, я не получаю лучших результатов.
есть идеи почему?

конечно, я не менял ваш код, а оставил как есть.

еще раз большое спасибо

EURUSDM5.png
 

AlexeyVik

Программист mql4 mql5
... у меня старческий склероз и я помню только новые варианты)
Не обманывай людей. Старческий склероз это когда детство и юность помнится как вчера, а то что было вчера… вроде как и вообще небыло. :)
Видимо ты ещё достаточно молод. :)
 

AlexeNP

Гуру форума
Доброе утро Алекс.
Прежде всего, я хотел бы еще раз поблагодарить вас за ваше время и терпение, которые вы мне показали.
Я попробовал индикатор, который вы здесь прикрепили, и вот что у меня получилось.
линии RSI по какой-то причине не отображаются правильно, и, следовательно, когда я меняю значения, я не получаю лучших результатов.
есть идеи почему?

конечно, я не менял ваш код, а оставил как есть.

еще раз большое спасибо
я примерно понял, чего ты хочешь добиться, но... давай ты сам пройдешь весь путь программиста
итак, сначала мы с тобой делаем индикатор, который объединяет 2 RSI
ну, посмотрели мы на него - нам нравится... но, нам хочется еще менять параметры не вызывая свойств индикатора
вспоминаем основные признаки при которых индикатор RSI что-то делает:
rates_total>prev_calculated - открылся новый бар
и
prev_calculated==0 - первый запуск индикатора

тут всё понятно... а вот теперь начинается самое интересное - ты пробовал реализовать ввод новых параметров через событие OnChartEvent
но, тут может скрываться серьезный недостаток - ты не можешь тестировать этот вариант
мое предложение - всё тоже самое, но проверяется состояние кнопки (нажата/отжата)
тогда мы получаем
if(rates_total>prev_calculated или кнопка нажата)
 

Jax Teller

Прохожий
Здравствуйте!Я у вас новенький на форуме,может не в ту тему пишу.Кто-нибудь может помочь с индикатором?При установке его в мт4 и подключении к мт2,робот не видит сигналы от индикатора,автоматом стоит UPBuffer 0 и DNBuffer 1. Стоит поменять UP на 1 и DN на 0,сигналы принимаются,но МТ2 открывает их в обратном направлении.В чём может быть проблема? Индикатор прикрепить к сообщению?
 

nurfirdaus

Новичок форума
Привет всем, как преобразовать из нескольких строк в одну строку, есть ли пример кода, который я могу сослаться?

Код:
Expand Collapse Copy
string parts[];
StringSplit(row, ' ', parts);
int len = ArraySize(parts);
string txt;

for(int k = 0; k < len; k++) {
   txt = parts[k];
}

Print(txt); // Result  a
            //         b
            //         c
            //         d

Я хочу, чтобы это было так.
// Result a b c d
без заказа, как показано ниже.

Код:
Expand Collapse Copy
for(int k = 0; k < len; k++) {
   txt00 = parts[0];
   txt01 = parts[1];
   txt02 = parts[2];
   txt03 = parts[3];
}
Print(txt00 + " " + txt01 + " " + txt02 + " " + txt03 ); // Result  a b c d

Есть простой способ сделать это?
 

Ugar

Гуру форума
Привет всем, как преобразовать из нескольких строк в одну строку, есть ли пример кода, который я могу сослаться?

Код:
Expand Collapse Copy
string parts[];
StringSplit(row, ' ', parts);
int len = ArraySize(parts);
string txt;

for(int k = 0; k < len; k++) {
   txt = parts[k];
}

Print(txt); // Result  a
            //         b
            //         c
            //         d

Я хочу, чтобы это было так.
// Result a b c d
без заказа, как показано ниже.

Код:
Expand Collapse Copy
for(int k = 0; k < len; k++) {
   txt00 = parts[0];
   txt01 = parts[1];
   txt02 = parts[2];
   txt03 = parts[3];
}
Print(txt00 + " " + txt01 + " " + txt02 + " " + txt03 ); // Result  a b c d

Есть простой способ сделать это?
Код:
Expand Collapse Copy
string txt="";
for(int k = 0; k < len; k++) {
if(k>0)StringAdd(txt," ");
StringAdd(txt,parts[k]);
}
Print(txt); // Result  parts[0] parts[1] parts[2] parts[3]
 

Moriarti

Активный участник
Пожалуйста, подскажите, как грамотно рассчитать необходимую маржу для открытия позиции ДО её открытия?

К примеру, я хочу открыть длинную позицию объёмом 1 лот. Я полагал, что рассчитать маржу можно двумя способами:
MQL4:
Expand Collapse Copy
MarketInfo(_Symbol, MODE_MARGINREQUIRED)
AccountFreeMarginCheck(_Symbol, OP_BUY, 1)

Однако на самом деле оказалось, что оба эти способа возвращают неверные значения.

Вот, к примеру, есть такой брокер Альпари. Плечо моего счёта у данного брокера составляет 1:500, валюта счёта - доллары США. Казалось бы, размер залога (маржи) для покупки одного лота можно вычислить, разделив размер контракта (100 тыс. единиц базовой валюты) на плечо. Дело вроде бы нехитрое. Однако на практике этот подход почему-то не работает. Точнее, результат такого вычисления не совпадает с тем, что возвращают вышеупомянутые функции MQL.

У брокера из моего примера есть таблица (_alpari.forex/ru/trading/trading_terms/#margin_requirements), в которой указаны значения максимального кредитного плеча для различных инструментов. Вот небольшая выдержка из неё:

SymbolMax. Leverage
USDCHF1:1000
USDRUB1:100
USDZAR1:25
USDTRY1:3

Я специально выбрал инструменты с базовой валютой USD для лучшего понимания.

Поскольку плечо моего счёта составляет 1:500, логично предположить, что величина залога при покупке одного лота для данных инструментов должна составлять:

SymbolRequired Margin
USDCHF200
USDRUB1000
USDZAR4000
USDTRY33333.33

Для проверки этого предположения я написал простенький скрипт:
MQL4:
Expand Collapse Copy
void OnStart() {
   Print("MarginRequired[USDTRY] = ",MarketInfo("USDTRY",MODE_MARGINREQUIRED));
   Print("MarginRequired[USDZAR] = ",MarketInfo("USDZAR",MODE_MARGINREQUIRED));
   Print("MarginRequired[USDRUB] = ",MarketInfo("USDRUB",MODE_MARGINREQUIRED));
   Print("MarginRequired[USDCHF] = ",MarketInfo("USDCHF",MODE_MARGINREQUIRED));
   Print("----------------------------");
   Print("MarginCheck[USDTRY] = ",AccountFreeMarginCheck("USDTRY",OP_BUY,1));
   Print("MarginCheck[USDZAR] = ",AccountFreeMarginCheck("USDZAR",OP_BUY,1));
   Print("MarginCheck[USDRUB] = ",AccountFreeMarginCheck("USDRUB",OP_BUY,1));
   Print("MarginCheck[USDCHF] = ",AccountFreeMarginCheck("USDCHF",OP_BUY,1));
}

К моему величайшему удивлению, этот скрипт вернул одинаковые значения для всех валютных пар! В частности, маржа для открытия одного лота USDCHF и USDZAR одинакова и равна 200. Хотя на самом деле она должна отличаться в 167 раз!

Внимание, вопрос! Где в моих рассуждениях ошибка и как на самом деле средствами MQL4 можно получить размер залога ДО открытия позиции?
 
Верх