Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 557

 
Ihor Herasko:

OrderSelect() выполняется внутри терминала, запрос на сервер при этом не производится. Поэтому ничего страшного в обращении к списку ордеров на каждом тике нет. Большинство советников так и делает. 

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

Стоит лишь уточнить тот факт, что даже при наличии массива ордеров никак не обойтись без обращения к OrderSelect(). Ведь на каждом тике необходимо проверить, существует еще этот ордер, или нет. Также у него могут быть изменены параметры. 

Спасибо.
 
Rustam Bikbulatov:

Ребята, подскажите как разобраться и с чего начать!

Например: Есть 15 ордеров с лотом 0.01. Надо закрыть в какой либо момент сделку(-и) с обьемом 0.07.

Вопрос как с одним OrderClose(..) закрыть 7 ордеров или обьем 0.07 лота?

Если поставить сразу 0.07 он не видит сделок с объемом 0.01.

Если что новичок в программировании


    int countS = 3;
   if(LastTime!=iTime(NULL,1,0)){
      for(int i=OrdersTotal()-1; i>=0; i--){
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==321){ 
         if(OrderType()==OP_SELL){
           irvb=OrderClose(OrderTicket(),0.01,Ask,3,CLR_NONE);
           LastTime=iTime(NULL,1,0); countS--; if(countS==0)break;   
          }}}}} 

Подсказали как сделать счетчик в виде countS.

В минуту должно закрываться по три сделки по 0.01 лота. Теперь возник вопрос как преобразовать чтобы все ордера высчитывались по порядку.

Если будет стоять for(int i=OrdersTotal()-1; i>=0; i--){ идут по порядку с последних ордеров, 

Если for(int p=0; p<OrdersTotal(); p++){ то с первых через одного ордера. 

Счетчик работает но когда лотность например 0.15 он не закрывает по 0.03 лота а закрывает каждую минуту по 0.01. 

Что посоветуете добавить?

Как сделать так чтобы из общей лотности можно было закрыть часть в независимости от количество и лотности ордеров?
 
Rustam Bikbulatov:


Подсказали как сделать счетчик в виде countS.

В минуту должно закрываться по три сделки по 0.01 лота. Теперь возник вопрос как преобразовать чтобы все ордера высчитывались по порядку.

Если будет стоять for(int i=OrdersTotal()-1; i>=0; i--){ идут по порядку с последних ордеров, 

Если for(int p=0; p<OrdersTotal(); p++){ то с первых через одного ордера. 

Счетчик работает но когда лотность например 0.15 он не закрывает по 0.03 лота а закрывает каждую минуту по 0.01. 

Что посоветуете добавить?

Как сделать так чтобы из общей лотности можно было закрыть часть в независимости от количество и лотности ордеров?

При постановке такой задачи (очень странной, к слову), нужно работать со списком "История счета". На каждой новой итерации следует пройтись по этому списку и найти ордера, которые были закрыты в течение текущей минуты, суммировать их объем. Если объем недостаточен, то отсортировать необходимым (так, как Вам нужно; поэтому не спрашивайте, как, это к Вам вопрос) образом и взять один единственный ордер. Его закрыть на 0.01. На следующей итерации все сначала.

 
Ihor Herasko:

При постановке такой задачи (очень странной, к слову), нужно работать со списком "История счета". На каждой новой итерации следует пройтись по этому списку и найти ордера, которые были закрыты в течение текущей минуты, суммировать их объем. Если объем недостаточен, то отсортировать необходимым (так, как Вам нужно; поэтому не спрашивайте, как, это к Вам вопрос) образом и взять один единственный ордер. Его закрыть на 0.01. На следующей итерации все сначала.

Буду пробовать! спасибо 

 
harbor:
не могу настроить отправку почтовых сообщений с терминала
раньше работало через майл.ру, сейчас прописываю также, тестовое сообщение не уходит
ктонибудь разбирался с этим ?

если для себя любимого (не на продажу) то правильное лечение проблем с почтой :

1) поднять почтарь на localhost который будет заниматься пересылкой, гарантирует доставку и не заумствует с авторизацией и anti-spam защитой. Иначе советники очень быстро попадают во всевозможные "чёрные" списки.
Это не сложно - есть и встроенный win smtp и бесплатные с простыми настройками, на край можно наскриптовать самому :-)

2) использовать альтернативу SendMail() . Чтобы контролировать весь процесс, отсылать более разумные отчёты, с тегами, флагами, опционально в html`е и с картинками.

когда объединяешь 1+2 получаешь в сумме 3 :-) то есть весьма разумное и стабильное решение.

ещё про отправку почты : https://www.mql5.com/ru/blogs/post/718364

-----

Если нужна помощь про конкретику настройку SendMail и MT, то прикладывайте скриншоты, выдержки из исходников, диагностику ошибок..
чтобы это был не просто "подземный стук"

TradeBiff - отправка почты со скриншотами
TradeBiff - отправка почты со скриншотами
  • 2018.05.19
  • Maxim Kuznetsov
  • www.mql5.com
Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
 
Правильно ли я понимаю, что "TimeCurrent()" вернет время последнего тика, когда он вызывается из пользовательской функции?
 
Asa saas:
Правильно ли я понимаю, что "TimeCurrent()" вернет время последнего тика, когда он вызывается из пользовательской функции?

Да

 

Приветствую!


Обратиться к ордеру можно с помощью команды OrderSelect по его номеру.

Вопрос, возможно ли заранее знать номера существующих ордеров, что бы не перебирать их все? Например запоминать этот номер при открытии нового ордера.

Я так понимаю этот номер присваивается по порядку начиная с 1. Какие могут быть нюансы?

За ранее спасибо.

 
Decromor:

Приветствую!


Обратиться к ордеру можно с помощью команды OrderSelect по его номеру.

Вопрос, возможно ли заранее знать номера существующих ордеров, что бы не перебирать их все? Например запоминать этот номер при открытии нового ордера.

Я так понимаю этот номер присваивается по порядку начиная с 1. Какие могут быть нюансы?

За ранее спасибо.

OrderSend
OrderSelect

 

Сломал мозг, помогите пожалуйста!

Написал блок расчета корреляции. Но OANDA и investing.com выдают совершенно иные результаты! Причем забавно - и между собой они не совпадают!

Где я ошибаюсь?


Текущая валютная пара - EURUSD, проверяю корреляцию с GBPUSD.


extern string SubSymbol = "GBPUSD";

extern int correlation_time = 24;         // на сколько часов проверять скоррелированность выбранных валютных пар

.....

   // ------------------------ блок вычисления корреляции --------------------------------------

   int period = 15;

   int bars_number = MathRound(correlation_time*60/period);

   double symbol_avg = 0;

   double subsymbol_avg = 0; 

   double symbol_price[], subsymbol_price[]; 

   double x,y;

   int j;

   int shift = 0;

   ArrayResize(symbol_price, bars_number);

   ArrayResize(subsymbol_price, bars_number);

   for (j=0; j < bars_number; j++)

     {   

         symbol_price[j] = (iHigh(NULL,period,j+shift) - iLow(NULL,period,j+shift))/2;

         subsymbol_price[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2;

         symbol_avg = symbol_avg + symbol_price[j];

         subsymbol_avg = subsymbol_avg + subsymbol_price[j];

     }

   symbol_avg = symbol_avg/bars_number;

   subsymbol_avg = subsymbol_avg/bars_number;

   double ss_xx = 0;

   double ss_xy = 0;

   double ss_yy = 0; 

   for (j=0; j < bars_number; j++)

     {   

         x = symbol_price[j] - symbol_avg;

         y = subsymbol_price[j] - subsymbol_avg;

         ss_xy = ss_xy + x*y;

         ss_xx = ss_xx + x*x;

         ss_yy = ss_yy + y*y;

     }

   double correlation = ss_xy/MathSqrt(ss_xx*ss_yy);  

   Alert(correlation, " ", bars_number);

   ArrayFree(symbol_price);

   ArrayFree(subsymbol_price);  

// ------------------------ конец блока вычисления корреляции ---------------------------------

Причина обращения: