Утилита максимального количества сделок. Заработала один раз.

 
Привет. Написал утилиту: ограничивает количество торговых сделок для выбранных роботов по MagicNumber. Она всё хорошо, без проблем. Но, запустилась один только раз. Вот, приложил исходный файл. Посмотрите, заранее благодарю.
Файлы:
Maximum.mq4  3 kb
 
Alexander Bykov:
Привет. Написал утилиту: ограничивает количество торговых сделок для выбранных роботов по MagicNumber. Она всё хорошо, без проблем. Но, запустилась один только раз. Вот, приложил исходный файл. Посмотрите, заранее благодарю.
ааа эта функция разве просто не клацает общую кнопку автоторговли в терминале и всё..., процесс вырубания отдельного ЕА на отдельном графике выглядит сильно сложнее
 
Тут и конструктивная ошибка (при проектировании кода), и синтаксическая. Компилятор о ней как раз и говорит.
 
Aleksey Semenov #:
ааа эта функция разве просто не клацает общую кнопку автоторговли в терминале и всё..., процесс вырубания отдельного ЕА на отдельном графике выглядит сильно сложнее
Ну да.
 

Ни проще было пройтись по истории закрытых сделок (ну или по уже открытым) и пересчитать те, у которых есть заданный магик на заданном символе. Если их число >= тотал, то ретурн?

Ваше условие (Ваш код) если выполнится 1 раз, то вырубит всю автоторговлю. Значит другие советники не смогут продолжать работу. А представьте, что они тоже открыли сделки, которые им нужно сопровождать. Отжимая кнопку автоторговли Вы отнимаете у них эту возможность.

 
Это, помогите переписать "void ExpertEnabled" для MT5, пж-ста.
 
Alexander Bykov #:
ExpertEnabled
AccountInfoInteger(ACCOUNT_TRADE_EXPERT)
 
//+------------------------------------------------------------------+
//|                                                            M.mq5 |
//|                                  Copyright 2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright " Byokov Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <WinUser32.mqh>

#import "user32.dll"
int GetAncestor(int hwnd,int gaFlags);
#import
input int      Total;
input int      MagicNumber, MagicNumber2, MagicNumber3, MagicNumber4, MagicNumber5, MagicNumber6, MagicNumber7, MagicNumber8, MagicNumber9, MagicNumber10, MagicNumber11, MagicNumber12, MagicNumber13, MagicNumber14, MagicNumber15;

void AccountInfoInteger(bool ACCOUNT_TRADE_EXPERT)
{
   
   int HandlWindow=WindowHandle(Symbol(),Period()); // Системный дескриптор окна.
   int HandlMT5=GetAncestor(HandlWindow,2); // Системный дескриптор окна МТ4.
   SendMessageA(HandlMT5,WM_COMMAND,33020,0);
}
//void ExpertEnabled(bool Switch) // TRUE - включить эксперт, FALSE - отключить эксперт.
 
//+------------------------------------------------------------------+


void OnInit()
  {

  int i=0;
  double order_magic=OrderGetInteger(ORDER_MAGIC); 
  if(i>=Total&& order_magic==MagicNumber&& order_magic==MagicNumber2&& order_magic==MagicNumber3&& order_magic==MagicNumber4&& order_magic==MagicNumber5&& order_magic==MagicNumber6&& order_magic==MagicNumber7&& order_magic==MagicNumber8&& order_magic==MagicNumber9&& order_magic==MagicNumber10&& order_magic==MagicNumber11&& order_magic==MagicNumber12&& order_magic==MagicNumber13&& order_magic==MagicNumber14&& order_magic==MagicNumber15)
  {
   
   ACCOUNT_TRADE_EXPERT==FALSE;
   AccountInfoInteger(ACCOUNT_TRADE_EXPERT);
  } 
  if(i=0)
  {
   ACCOUNT_TRADE_EXPERT==TRUE;
   AccountInfoInteger(ACCOUNT_TRADE_EXPERT);
  }
//+------------------------------------------------------------------+

  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
Ну вот так, вроде того.
 
К сожалению, нет. AccountInfoInteger() - это уже существующая системная функция в MQL5, поэтому переписывать её код нет смысла. Она позволяет получить заданное в параметре целочисленное свойство счета. Например, узнать, разрешена ли сейчас торговля советником. А это не то, что вы хотите, судя по всему.
Если представленный вами код писал ИИ, то врядли он вам поможет.

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

Сейчас ваш первоначальный код просто запрещает "незаконным" способом работу всем советникам в терминале без какого либо разбору по магическому номеру. В том числе перестает работать и ваш запрещающий советник. Поэтому и срабатывает он только один раз: запретил всем работу и потом разрешить её становится уже некому.
 
Alexander Bykov #:
Ну вот так, вроде того.

на мт5 вроде номер кнопки другой

void ExpertEnabled(bool Switch) // TRUE - включить эксперт, FALSE - отключить эксперт.
  {
   if(Switch == TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))  return;
   int HandlWindow=ChartGetInteger(0,CHART_WINDOW_HANDLE); // Системный дескриптор окна.
   int HandlMT5=GetAncestor(HandlWindow,2); // Системный дескриптор окна МТ5.
   SendMessageW(HandlMT5,WM_COMMAND,32851,0);
  }
 

Наваял, но не пропускает код кнопки. Прикрепил файл.

Файлы:
M.mq5  5 kb