Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 117

 

подскажите, как такие заборы в котировках метаквотов лечить?)

 
Zhunko:
Надо перехватывать сообщения.

Если сообщение уже было исполнено, то оно уже было удалено из очереди.

Так, у меня следующий вопрос.

#property indicator_chart_window
bool 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.

 
static bool First = true;
 
gyfto:

Если сообщение уже было исполнено, то оно уже было удалено из очереди.

Перехватывают обычно до исполнения. Иначе, не понятно, зачем перехватывать?
 
FAQ:
static bool First = true;


Zhunko:
Перехватывают обычно до исполнения. Иначе, не понятно зачем перехватывать?


До исполнения не вопрос. Значит, переносить проверку AccountNumber() на валидность в dll не имеет смысла. Подразумевается, что номер аккаунта в dll уже зашит.

 
static int indexFirstLeftOnChart;
 

У меня тут что-то на простом моменте, головняк. Есть функция, для поиска ордеров.

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.

int start()                                  // Спец. функция start()
  {                                          // Открытие BUY
   OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
Alert(GetLastError());
   return;                                   // Выход из start()
  }

Кто может объяснить в чем проблема, буду очень признателен. Заранее спасибо.
 
депозит = тип 6
 
Подскажите пожалуйста, как нибудь можно коментарии к ордену установить по умолчанию???
Причина обращения: