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

 

Как контролировать отложенные ордера в MQL5?


Проблема в том что в нужных мне функциях пишут: "Не следует путать между собой позиции и действующие отложенные ордера"


А как тогда получать информацию об этих самых отложенных ордерах?

 
Alexandr Sokolov:

Как контролировать отложенные ордера в MQL5?


Проблема в том что в нужных мне функциях пишут: "Не следует путать между собой позиции и действующие отложенные ордера"


А как тогда получать информацию об этих самых отложенных ордерах?

Нужно просто считать отложенные ордера. Например эта функция только для отложенных Stop ордеров:

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
 
Vladimir Karputov:

Нужно просто считать отложенные ордера. Например эта функция только для отложенных Stop ордеров:

Спасибо большое!


Просто я смотрел пример и там всё через Position...

 
Alexandr Sokolov:

Спасибо большое!


Просто я смотрел пример и там всё через Position...

Вот пример, который компилируется:

//+------------------------------------------------------------------+
//|                                    CalculateAllPendingOrders.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
//---
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
//---
   int count_buy_stops=0,count_sell_stops=0;
   CalculateAllPendingOrders(count_buy_stops,count_sell_stops);
  }
//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
//+------------------------------------------------------------------+
Файлы:
 
Alexandr Sokolov:

Как контролировать отложенные ордера в MQL5?


Проблема в том что в нужных мне функциях пишут: "Не следует путать между собой позиции и действующие отложенные ордера"


А как тогда получать информацию об этих самых отложенных ордерах?

Вся разница в том, что в mql4 функция OrdersTotal() возвращает общее количество рыночных и отложенных ордеров. А в mql5 возвращает количество только отложенных ордеров. А для получения количества позиций, в терминологии mql4 рыночных ордеров, есть функция PositionsTotal()

 
Alexey Viktorov:

На форуме темы не встречал, но посмотрев несколько инструкций, считаю эту более понятной. Попробовал, получилось, но применять, пока не вижу необходимости. Хотя думаю что объединить историю со всех терминалов в одну папку было-бы неплохо.

Прочитал статью по ссылке. Это гениально. И это супер решение, для тех у кого много терминалов. Теперь может быть одна папка mql4 для разных терминалов, без необходимости постоянно копировать файлы туда/сюда.

спасибо вам большое!!!

 
Sergey Likho:

Прочитал статью по ссылке. Это гениально. И это супер решение, для тех у кого много терминалов. Теперь может быть одна папка mql4 для разных терминалов, без необходимости постоянно копировать файлы туда/сюда.

спасибо вам большое!!!

Да не меня надо благодарить. Я обратил внимание на сообщения Сергея Таболина и сопоставил некоторые слова в них с желанием Seric29, ну и сам посмотрел что это такое.

 

Здравствуйте.

Помогите пожалуйста разобраться с кодом. 

Пытался выложить в маркет сетку , а они на меня начали ругаться: 2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: invalid lots amount for FreeMarginCheck function

во вложении файл советника.

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

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
Файлы:
123.mq4  87 kb
 
Dmitriy Prigodich:

Здравствуйте.

Помогите пожалуйста разобраться с кодом. 

Пытался выложить в маркет сетку , а они на меня начали ругаться: 2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: invalid lots amount for FreeMarginCheck function

во вложении файл советника.

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

там-же написано : invalid lots amount

не проверяются аргументы советника и не нормируется объём лота.

PS - ну не кладите вы всё подряд в маркет, тем паче вещь которой сами не пользуетесь. Нужен рейтинг, пополняйте лучше codobase

 

В общем ребята провёл я эксперимент хотел на видео снять но у меня нет камеры, а телефон у меня старинный который ещё при царе горохе был. Значит создал я эксперта я назвал его 111.mq4

вот его прмитивный код 

#property strict
#import "111б.ex4"//111б.mq4
int Funi(string Soob);
#import

int OnInit(){Funi(Symbol());return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){}
void OnTick(){Funi(Symbol());}


, далее я создал библиотеку я назвал её 111б.mq4 с примитивным кодом

#property library
#property strict
 string  st_mas[]; //export
 int Funi(string Soob)export
 {st_mas[(ArrayResize(st_mas,ArrayRange(st_mas,0)+1))-1]=Soob;
 Print("Размер массива = ",ArrayRange(st_mas,0));
 for(int i=0;i<ArrayRange(st_mas,0);++i)
 Print("Вывод массива ",st_mas[i]);
 return 2;}

. Внутри библиотеки я объявил массив типа string но как оказалось в последствии разработчики не предусмотрели возможности экспорта и импорта массивов и переменных. Получается нет возможности получить глобальный массив который бы помнил информацию. Ну да ладно я пошёл другим путём. Я создал функцию  Funi(). Далее я создал жёсткие ссылки по ключу H терминалы у меня установлены вот так 

оригиналы файлов у меня находятся в Forex4you а ссылки в Forex4you1 далее я бросил роботы оригинал и ссылку на график, первые расчёты были получены но когда пошли тики только оригинал Forex4you обновил информацию и массив  st_mas увеличился в размере, а когда шли тики на Forex4you1 ничего не происходило взаимодействие только возможно тогда когда файлу вручную попадает на график. Тогда я пошёл другим путём. Я сделал эксперта с названием 333.mq4 и установил его в МТ4 Forex4you1 в него я подключил библиотеку 111б.mq4 и бросил программу на график. Робот 333.mq4 смог подключиться к ссылке библиотеке и это дело начало работать онлайн но как оказалось в последствии библиотека это прообраз и объявленный в ней массив на глобальном уровне работает в пределах одного графика

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

Ребята кто знает можно ли экспортировать массивы и переменные?

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