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

DomovenokBrest

♔♕♖♗♘♙
Как прописать: если Low на предыдущих 4 свечах убывающие, то функция true???

if (Low<Low[i+1] && Low[i+1]<Low[i+2] && Low[i+2]<Low[i+3])
{
Ваша функция
}
else
{
Что то еще
}

Как то так
 

eevviill2

Местный знаток
Всем привет!
Вопрос на засыпку: нужно зачистить график от объектов при выгрузке сова. Имена объектов генерируются в процессе работы, но есть определенные комбинации символов, по которым их можно вычислить и удалить. Вроде все просто, но каждый раз в тестере что-нибудь оставляет не выдавая каких-то сообщений в журнале. Может я опять что-то туплю (13 часов просидел за написанием кода и уткнулся в примитив). Вот примерный образец:
PHP:
     int Ob=ObjectsTotal();
      for(int i=0; i<Ob; i++)
         {
          if(StringFind(ObjectName(i),"VTRMB",0)>=0) ObjectDelete(ObjectName(i));
          if(StringFind(ObjectName(i),"VTRMS",0)>=0) ObjectDelete(ObjectName(i));
          if(StringFind(ObjectName(i),"VTRPB",0)>=0) ObjectDelete(ObjectName(i));
          if(StringFind(ObjectName(i),"VTRPS",0)>=0) ObjectDelete(ObjectName(i));
         }
Или это тестер у меня глючит...:nda:
Та же фигня с глобальными (терминала) переменными...
При создании объектов перед именем пишешь
PHP:
identif+
В глобальных
PHP:
string identif="gdfgeyebn3e";
Для удаления пользуешь
PHP:
ObjectsDeleteAll(0,identif);
 

eevviill2

Местный знаток
здравствуйте. Подскажите пожалуйста, что нужно подправить, чтобы в советнике ставились несколько горизонтальных линий по сигналам индикатора(например стрелочного)? У меня ставится только одна линия.
PHP:
"BS"+string(Time[i])
и т.д.
 

vitto.mq4

Местный знаток
Здравствуйте, подскажите как бороться с такой бедой:

2018.02.28 06:01:37.603 '60058065': order buy 0.01 AUDCHF opening at market sl: 0.00000 tp: 0.00000 failed [Off quotes]
2018.02.28 06:01:37.229 '60058065': order buy 0.01 AUDCAD opening at market sl: 0.00000 tp: 0.00000 failed [Off quotes]
2018.02.28 06:01:36.425 '60058065': order buy 0.01 AUDNZD opening at market sl: 0.00000 tp: 0.00000 failed [Off quotes]
Торгует советник.
 

eevviill2

Местный знаток
Здравствуйте, подскажите как бороться с такой бедой:

2018.02.28 06:01:37.603 '60058065': order buy 0.01 AUDCHF opening at market sl: 0.00000 tp: 0.00000 failed [Off quotes]
2018.02.28 06:01:37.229 '60058065': order buy 0.01 AUDCAD opening at market sl: 0.00000 tp: 0.00000 failed [Off quotes]
2018.02.28 06:01:36.425 '60058065': order buy 0.01 AUDNZD opening at market sl: 0.00000 tp: 0.00000 failed [Off quotes]
Торгует советник.
Меняй брокера на ecn/stp
 

vitto.mq4

Местный знаток
Это и так счет ecn в Альпарях... Раньше такого не было у них.
 
Последнее редактирование:

megelan

Почетный гражданин
приветствую.
Подскажите как реализовать в коде:
Открытие в четко указанное время (настраиваемое) всего 1 одной сделки в день
и открыть ее нужно если текущая цена в это время выше цены свечи другого времени предыдущего дня (настраиваемое)
допустим цена выше - бай, ниже - селл
нужна всего одна сделка в день на определенной свече открытия сразу. Открытие если цена выше или ниже другой предыдущего дня
 

megelan

Почетный гражданин
наступил новый день - новая сделка каждый день! И всего одна!
 

MrGreen86

Гуру форума
приветствую.
Подскажите как реализовать в коде:
Открытие в четко указанное время (настраиваемое) всего 1 одной сделки в день
и открыть ее нужно если текущая цена в это время выше цены свечи другого времени предыдущего дня (настраиваемое)
допустим цена выше - бай, ниже - селл
нужна всего одна сделка в день на определенной свече открытия сразу. Открытие если цена выше или ниже другой предыдущего дня
вот так Посмотреть вложение time 1 open.mq4
 

valenok2003

Прохожий
https://forexsystemsru.com/yazyk-pr...-formula-proverki-marzhi-mt4.html#post1053316

по ссылке дана формула расчета лота

double GetLot(int Risk){
double Free = AccountFreeMargin();
double margin = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double minLot = MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot = MarketInfo(Symbol(),MODE_MAXLOT);
double Step = MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot = MathFloor(Free*Risk/100/margin/Step)*Step;
if(Lot<minLot) Lot = minLot;
if(Lot>Max_Lot) Lot = Max_Lot;
if(Lot*margin>Free) return(0);
return(Lot);
}
к сожалению она не учитывает возможность открытия противоположной позиции при недостатке свободных средств
как исправить, подскажите, плиз
 
Последнее редактирование:

vladradon

Программист
к сожалению она не учитывает возможность открытия противоположной позиции при недостатке свободных средств
как исправить, подскажите, плиз
А какая в этом нужда? Если у тебя свободная маржа 15, а для расчетного лота нужно 20, то, по идее, если открыть 2 разнонаправленных ордера одинаковой лотности, в сумме будет задействовано маржи всего 10 (я примерно считаю без нюансов брокера). Только вот ордера открываются последовательно и для первого ордера нужно будет 20 свободной маржи и он не откроется, как и для второго то же самое. Это только после открытия обоих ордеров они в сумме будут занимать 10. Может, если добавить расчет лота противоположного ордера для взаимокомпенсации текущих ордеров по марже, которого будет достаточно для открытия нужного нам ордера. Но все равно нужно будет сначала открывать этот компенсирующий ордер.
 
Последнее редактирование:

Чижык

Прохожий
Всем привет!Не подскажите как делается так,чтоб было два разных индюка в одном подокне при работе советника,к примеру стохастик и рси?
 

freshwind

Новичок форума
уважаемые знатоки,
подскажите как корректно перейти от данных типа iHigh и iLow к уже непосредственно ТП и СЛ в фyкции Ordersend. То есть, в начале мы имеем переменные double с цифрами 4 знака после запятой, потом проводим с ними математические манипуляции, округляем опять к 4-ьох знаку, в опцию price функции Ordersend такое число подходит, а вот для СЛ и ТП нет.
В сети нашел такой вариант для захода в бай:
double TP=Ask+up*Point;
double SL=Ask-down*Point;
up и down величины из первой группы, то есть double 4-ьох знак.
 

Ugar

Гуру форума
уважаемые знатоки,
подскажите как корректно перейти от данных типа iHigh и iLow к уже непосредственно ТП и СЛ в фyкции Ordersend. То есть, в начале мы имеем переменные double с цифрами 4 знака после запятой, потом проводим с ними математические манипуляции, округляем опять к 4-ьох знаку, в опцию price функции Ordersend такое число подходит, а вот для СЛ и ТП нет.
Подходит.
В сети нашел такой вариант для захода в бай:
double TP=Ask+up*Point;
double SL=Ask-down*Point;
up и down величины из первой группы, то есть double 4-ьох знак.
В этом примере если up и down в пунктах о цены открытия, а не дробная цена.
 

KriKs-Fx

Интересующийся
В чём ошибка? Как исправить?

При компилировании выдаётся предупреждение ! (return value of "OrderSelect" should be checket) на строке OrderSelect Как это исправить?

total = CountTrades();
if (total == 0) flag = FALSE;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
LongTrade = TRUE;
ShortTrade = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
LongTrade = false;
ShortTrade = TRUE;
break;
}
}
}:facepalm:
 

vladradon

Программист
При компилировании выдаётся предупреждение ! (return value of "OrderSelect" should be checket) на строке OrderSelect Как это исправить?
PHP:
total = CountTrades();
if (total == 0) flag = FALSE;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
LongTrade = TRUE;
ShortTrade = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
LongTrade = false;
ShortTrade = TRUE;
break;
}
}
}
}
;)
 

vladradon

Программист
Ах вон оно чё !!! Благодарю Вас vladradon !!!
Это один из вариантов. Сообщение говорит о том, что выполнение функции OrderSelect желательно проверить (не обязательно). Функция if и запускает OrderSelect и проверяет, как она отработала и если OrderSelect вернула код true (ордер выбран), то выполняются все следующие команды (их нет смысла выполнять, если по какой-то причине ордер не был выбран функцией OrderSelect). Можно тупо так:
bool x=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
только в этом варианте мы просто игнорируем результат работы OrderSelect и продолжаем выполнение кода без учета проверки на выбор ордера.
 
Верх