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

vadim2490

Активный участник
Не кто понимает, а кто хочет помочь во взломе.
Для взломов есть ветка больничка.

Писал во всех ветках по теме...всем наверное лени сказать. Если понимать язык тут без всяких сложностеи можно определить!Никто не помог.
 

Milord

Местный знаток
Как ввести реверс ордеров?

Правильно ли я написал Revers?
если =0,то без реверса, при =1, с реверсом!
if (Revers==0)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Aqua);
}
else
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Magenta);
}
if (Revers==0)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Magenta);
}
else
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Aqua);
}
 

Ugar

Гуру форума
Писал во всех ветках по теме...всем наверное лени сказать. Если понимать язык тут без всяких сложностеи можно определить!Никто не помог.
Понимающих в языке много. Но вот желающих помочь не нашлось. Ничего удивительного. Кроме понимания и лени есть ещё этическая сторона. Некоторые программисты, я в том числе, не желают ломать чужой код, и помогать в этом не станут.
Есть конечно те кто, хоть чуть чуть понимает в языке программирования и без отягощения всякими там этическими нормами. Но и им никакого интереса нет помогать. Взломать советник это одно. Результатом может быть то что он сам сможет воспользоваться взломанным кодом.
А так получается всё равно что попросить медвежатника взломать сейф за спасибо. А содержимое себе забрать.
 

Ugar

Гуру форума
Правильно ли я написал Revers?
если =0,то без реверса, при =1, с реверсом!
if (Revers==0)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Aqua);
}
else
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Magenta);
}
if (Revers==0)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Magenta);
}
else
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Aqua);
}
В принципе можно и так. Только буквально если 0, то без реверса, а если любое другое значение то реверс.
 

vadim2490

Активный участник
Понимающих в языке много. Но вот желающих помочь не нашлось. Ничего удивительного. Кроме понимания и лени есть ещё этическая сторона. Некоторые программисты, я в том числе, не желают ломать чужой код, и помогать в этом не станут.
Есть конечно те кто, хоть чуть чуть понимает в языке программирования и без отягощения всякими там этическими нормами. Но и им никакого интереса нет помогать. Взломать советник это одно. Результатом может быть то что он сам сможет воспользоваться взломанным кодом.
А так получается всё равно что попросить медвежатника взломать сейф за спасибо. А содержимое себе забрать.

Всё понеатно! Не хототе отбирать хлеб у колег по цеху.Если бы ето был толковый сов то я заплатил за его взлом, а так ето очеренднои развод для набора реферов.
 

eevviill

Заблокирован
Здрасвуите! Очень хочу понять как по этим строкам сова генерирует ключ. Посмотрите плс кто понимает.

int li_24;
if (Key == "пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ" || Key == "") {
gi_380 = FALSE;
Print("пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅп їЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ");
if (ObjectFind(gs_key_384) == -1) ObjectCreate(gs_key_384, OBJ_LABEL, 0, 0, 0);
ObjectSet(gs_key_384, OBJPROP_CORNER, 1);
ObjectSet(gs_key_384, OBJPROP_XDISTANCE, 5);
ObjectSet(gs_key_384, OBJPROP_YDISTANCE, 15);
ObjectSetText(gs_key_384, "пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅп їЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ!", 10, "Tahoma", Red);
} else {
li_24 = StrToInteger(StringSubstr(Key, 0, StringLen(Key) - 2)) / gi_396 + 57;
gi_392 = StrToInteger(StringSubstr(Key, StringLen(Key) - 2, 2)) / StrToInteger(StringSubstr(Key, 0, 1));
if (AccountNumber() == li_24 || IsDemo() == TRUE || IsOptimization() == TRUE || IsTesting() == TRUE) {
gi_380 = TRUE;
Print("пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ!");
gs_key_384 = "label";
if (ObjectFind(gs_key_384) == -1) ObjectCreate(gs_key_384, OBJ_LABEL, 0, 0, 0);
ObjectSet(gs_key_384, OBJPROP_CORNER, 1);
ObjectSet(gs_key_384, OBJPROP_XDISTANCE, 5);
ObjectSet(gs_key_384, OBJPROP_YDISTANCE, 15);
ObjectSetText(gs_key_384, "пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ!", 10, "Tahoma", Lime);
MaxLots = 130.0 * Lots;
Там расчёт номера счёта. Если он совпадает, то торговля на реале разрешена.
Рекомендую всё удалить, кроме {MaxLots = 130.0 * Lots; и перед функцией start() добавить сточку bool gi_380 = TRUE;
 

Milord

Местный знаток
Можно ли еще упростить код реверса???

В принципе можно и так. Только буквально если 0, то без реверса, а если любое другое значение то реверс.
как можно еще упростить мой вариант или свой предложите проще?:question:
 

Ugar

Гуру форума
как можно еще упростить мой вариант или свой предложите проще?:question:
Пожалуй тот вариант был самый простой. Ещё вот такой вариант может быть:
Здесь в TypeOrder пишем OP_BUY для открытия Buy ордеров или OP_SELL для Sell ордеров.
double op, sl, tp,
color arrow;
int type, TypeOrder;
if ((Revers==0 && TypeOrder==OP_BUY) || (Revers==1 && TypeOrder==OP_SELL))
{
op=Ask;
sl=Ask-SL*Point;
tp=Ask+TP*Point;
arrow=Magenta;
type=OP_BUY;
}
else
{
op=Bid;
sl=Ask-SL*Point;
tp=Ask+TP*Point;
arrow=Magenta;
type=OP_SELL;
}
OrderSend(Symbol(),type,Lots,op,slippage,sl,tp,"",Magic,0,arrow);

Не знаю проще он или нет. Можно ещё вынести открытие в пользовательскую функцию, что бы не писать одно и то же 4 раза. Вообще, простота не не самое важное в коде, не стоит особо задумываться над этим.
 
Последнее редактирование:

vadim2490

Активный участник
Там расчёт номера счёта. Если он совпадает, то торговля на реале разрешена.
Рекомендую всё удалить, кроме {MaxLots = 130.0 * Lots; и перед функцией start() добавить сточку bool gi_380 = TRUE;

Спосибо огромное за помошь! А какая там формула расчёта кюча?
 

eevviill

Заблокирован
Спосибо огромное за помошь! А какая там формула расчёта кюча?
StrToInteger(StringSubstr(Key, 0, StringLen(Key) - 2)) / gi_396 + 57;
1)StrToInteger ==то что в скобках после этого будет округлено до целого числа. Например в скобках выйдет 6.4, то округлит и будет 6
2)StringSubstr отображает текстовую строку переменной. Имеет 3 параметра.
2.1)Key название переменной
2.2)0 позиция текста в переменной(если 0 то первое слово или сочетание цифр).
2.3)StringLen(Key) - 2 здесь указывается длина текста в переменной. В данном случае это StringLen вычисляет количество символов текста переменной Key а потом -2.
3) Ну а дальше это всё поделить на значение переменной gi_396(допустим 10) и +57.

Итак. Пример. Если Key="7654343"
2.3)7цифр-2=5
2.2)У нас одно сочетание цифр.
2.1)Key
2)Так как третий параметр 5, второй 0, первый Key, то значит что мы
из значения Key берём 1 сочетание цифр но только первые 5 цифр. А именно 76543.
1)Округляем до целого. Так и остаётся 76543.
3)Делим на переменную(её значение) gi_396(10) и плюсуем 57.
Вышло. 7707. Это число должно быть такое же на каком стоит советник для роботы на реале.
 

vadim2490

Активный участник
StrToInteger(StringSubstr(Key, 0, StringLen(Key) - 2)) / gi_396 + 57;
1)StrToInteger ==то что в скобках после этого будет округлено до целого числа. Например в скобках выйдет 6.4, то округлит и будет 6
2)StringSubstr отображает текстовую строку переменной. Имеет 3 параметра.
2.1)Key название переменной
2.2)0 позиция текста в переменной(если 0 то первое слово или сочетание цифр).
2.3)StringLen(Key) - 2 здесь указывается длина текста в переменной. В данном случае это StringLen вычисляет количество символов текста переменной Key а потом -2.
3) Ну а дальше это всё поделить на значение переменной gi_396(допустим 10) и +57.

Итак. Пример. Если Key="7654343"
2.3)7цифр-2=5
2.2)У нас одно сочетание цифр.
2.1)Key
2)Так как третий параметр 5, второй 0, первый Key, то значит что мы
из значения Key берём 1 сочетание цифр но только первые 5 цифр. А именно 76543.
1)Округляем до целого. Так и остаётся 76543.
3)Делим на переменную(её значение) gi_396(10) и плюсуем 57.
Вышло. 7707. Это число должно быть такое же на каком стоит советник для роботы на реале.

Спасибо! Вы так всё ясно поиснили,прям как в школе.:-)
 

Milord

Местный знаток
Спасибо Ugar!)

Пожалуй тот вариант был самый простой. Ещё вот такой вариант может быть..............
.........Не знаю проще он или нет. Можно ещё вынести открытие в пользовательскую функцию, что бы не писать одно и то же 4 раза. Вообще, простота не не самое важное в коде, не стоит особо задумываться над этим.
После опыта программирования на бейсике десятков программ, убедился, что чем проще и меньше код, тем он быстрее выполняется компьютером, быстрее компилируется, и вообще его проще читать!)
сравните код советника на MQL4, который умещается на экране, без скроллинга, и другой, который листать устанешь:-)
 

Ugar

Гуру форума
После опыта программирования на бейсике десятков программ, убедился, что чем проще и меньше код, тем он быстрее выполняется компьютером, быстрее компилируется, и вообще его проще читать!)
сравните код советника на MQL4, который умещается на экране, без скроллинга, и другой, который листать устанешь:-)
Скорость компиляции вообще не имеет значения, если мне придётся подождать компиляцию не 1, а 3 секунды, ничего страшного.
Длинный текст неудобно читать, но текст программы это же не роман или детектив. Кстати не факт что весь текст в работе. У меня есть функция 300 строк, вызывается она редко и используется из неё всего пару строк, но вот какие именно зависит от ситуации. Так что её длинна на скорость не влияет.
Скорость работы конечно важно, но надёжность важнее. И не всегда чем короче текст, тем быстрее работает. Иногда для ускорения работы приходится немного увеличивать текст.
 

Selhal

Прохожий
Помогите вставить правильно трал в советник.Я не програмер вставил трал но он не работает
 

Вложения

vet666

Прохожий
подскажите плс действие сравнения

если а+б
и с+д


то Алерт.....

:), спасиб!
 
Верх