Если сообщение уже было исполнено, то оно уже было удалено из очереди.
Так, у меня следующий вопрос.
#property indicator_chart_windowbool First = true;
int start(){
if(First){
int indexFirstLeftOnChart = WindowFirstVisibleBar();//иницилизируем под флагом, потому что в init() могут быть артефактыAlert("indexFirstLeftOnChart ", indexFirstLeftOnChart);
First = false;
}
if(WindowFirstVisibleBar() != indexFirstLeftOnChart){//проверяем на каждом тике, изменилось ли значениеAlert("first indexFirstLeftOnChart ", indexFirstLeftOnChart);
indexFirstLeftOnChart = WindowFirstVisibleBar();//если изменилось, записываем егоAlert("second indexFirstLeftOnChart ", indexFirstLeftOnChart);
}
return(0);
}
- сигналит на каждом тике, потому что оказывается, что first indexFirstLeftOnChart равен нулю. Как с этим бороться? Билд 509.
Zhunko: Перехватывают обычно до исполнения. Иначе, не понятно зачем перехватывать?
До исполнения не вопрос. Значит, переносить проверку AccountNumber() на валидность в dll не имеет смысла. Подразумевается, что номер аккаунта в dll уже зашит.
У меня тут что-то на простом моменте, головняк. Есть функция, для поиска ордеров.
t - счётчик всех ордеров.
p - счётчик отложенных ордеров.
//+-------------------------------------------------------------------------------------+//| Поиск своих ордеров |//+-------------------------------------------------------------------------------------+void FindOrders(int& t, int& p)
{
int total = OrdersTotal() - 1;
t = 0;
p = 0;
for (int i=total; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderType() > 1)
{
p++;
}
t++;
pr ("FindOrders(): " + "t = " + t + " " + TimeToStr(TimeCurrent()));
pr ("FindOrders(): " + "p = " + p + " " + TimeToStr(TimeCurrent()));
}
}
Вызываю из старта:
int start()
{
if (g_lastBarTime == Time[0]) // На текущем баре все необходимые действия..return (0); // ..уже были выполненыint oTotal = 0, oPending = 0;
FindOrders(oTotal, oPending);
int signal = GetGeneralSignal(oTotal);
if (signal != SIGNAL_NO)
{
if (!Trade(signal))
return(0);
}
else
По факту, при распринтовке, даже когда нет ордеров вот что видим(даже когда ордеров нет, печатает типа они есть...):
Всем доброго вечера. Недавно решил освоить язык MQL4 (учу по учебнику Сергея Ковалёва). Сегодня решил практики ради создать простой скрипт открытия ордера. Код получился такой: int start() { OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point); Alert(GetLastError());
return;
}
Скрипт не сработал и показало ошибку 4109 (Торговля не разрешена). При попытки изменить ситуацию появлялись также ошибка 4016 (Неинициализированный массив). Хотелось бы знать, в чем причина этих ошибок и как все-таки создать простой скрип открытия сделки. Интереса ради я просто скопировал пример из учебника https://book.mql4.com/ru/trading/ordersend (добавив туда лишь ф-цию GetLastError) и все равно появилась ошибка 4109.
intstart()// Спец. функция start(){// Открытие BUYOrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
Alert(GetLastError());
return; // Выход из start()}
Кто может объяснить в чем проблема, буду очень признателен. Заранее спасибо.
подскажите, как такие заборы в котировках метаквотов лечить?)
Надо перехватывать сообщения.
Если сообщение уже было исполнено, то оно уже было удалено из очереди.
Так, у меня следующий вопрос.
- сигналит на каждом тике, потому что оказывается, что first indexFirstLeftOnChart равен нулю. Как с этим бороться? Билд 509.
Если сообщение уже было исполнено, то оно уже было удалено из очереди.
Перехватывают обычно до исполнения. Иначе, не понятно зачем перехватывать?
До исполнения не вопрос. Значит, переносить проверку AccountNumber() на валидность в dll не имеет смысла. Подразумевается, что номер аккаунта в dll уже зашит.
У меня тут что-то на простом моменте, головняк. Есть функция, для поиска ордеров.
t - счётчик всех ордеров.
p - счётчик отложенных ордеров.
Вызываю из старта:
По факту, при распринтовке, даже когда нет ордеров вот что видим(даже когда ордеров нет, печатает типа они есть...):
Это как же так?
int start()
{
OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
Alert(GetLastError());
return;
}
Скрипт не сработал и показало ошибку 4109 (Торговля не разрешена). При попытки изменить ситуацию появлялись также ошибка 4016 (Неинициализированный массив). Хотелось бы знать, в чем причина этих ошибок и как все-таки создать простой скрип открытия сделки. Интереса ради я просто скопировал пример из учебника https://book.mql4.com/ru/trading/ordersend (добавив туда лишь ф-цию GetLastError) и все равно появилась ошибка 4109.