Ошибки, баги, вопросы - страница 3618

 
Мне тоже не нравится и IsStopped, и OrderSend, но я бы придрался к названию метода, а не к отсутствию this. Наверное проблема в том, что нет договоренностей о code style, так как нет командной разработки. Думаю, такие вещи должны быть прописаны в code style
 
fxsaber #:

Эту торговую библиотеку нельзя использовать без чтения ее исходников, к сожалению.

Доказательство.

Forum on trading, automated trading systems and testing trading strategies

Delete pending orders on deInit

fxsaber, 2025.02.11 12:47

input long inpMagicEA = 0;

#include <Trade\Trade.mqh>

class CTrade2 : public CTrade
{
public:
  bool OrderDelete(const ulong ticket)
    {
  //--- check stopped
  //   if(IsStopped(__FUNCTION__))
  //      return(false);
  //--- clean
     ClearStructures();
  //--- setting request
     m_request.action    =TRADE_ACTION_REMOVE;
     m_request.magic     =m_magic;
     m_request.order     =ticket;
  //--- action and return the result
     return(OrderSend(m_request,m_result));
    }  
};

CTrade2 trade;

void OnDeinit( const int reason )
{
  trade.SetAsyncMode(true);

  for (int i = OrdersTotal() - 1; i >= 0; i--)
    if (OrderGetTicket(i) && (OrderGetInteger(ORDER_MAGIC) == inpMagicEA) && (OrderGetString(ORDER_SYMBOL) == _Symbol))
      trade.OrderDelete(OrderGetInteger(ORDER_TICKET));
}

Чтобы иметь возможность удалить ордера в OnDeinit, требуется использовать наследование (причем без виртуальности, а тупо перегрузкой).

Aleksandr Slavskii #:

CTrade, один из не многих классов, который можно использовать без знаний ООП. А всё потому, что написан нормально, а не через  this.

 
fxsaber #:
причем без виртуальности, а тупо перегрузкой

По-моему, в виртуализации что-то сломалось.

Отправил в личку тестовый код.

 
fxsaber #:
Доказательство.

Чтобы иметь возможность удалить ордера в OnDeinit, требуется использовать наследование (причем без виртуальности, а тупо перегрузкой).

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

В тестере, раньше удалял позиции в OnTester, там CTrade работает норм. Сейчас, если я ничего не путаю, в тестере, когда мы заходим в  OnTester, позиции уже все закрыты.

У меня ни разу не было необходимости удалять ордера или позиции из  OnDeinit. 

Собственно, я ничего не пытаюсь доказать, просто сказал, что  CTrade интуитивно понятен. Всё.

 
Aleksandr Slavskii #:

У меня ни разу не было необходимости удалять ордера или позиции из  OnDeinit.

Кто-то в терминале (не в тестере) хочет, чтобы все выставленные отложки удалялись, когда выгружается советник.
 
Прошу помочь, сломал все копья. Проблема где-то на поверхности.
#include <WinAPI\WinAPI.mqh>

#define GENERIC_READ  0x80000000
#define SHARE_READ    1
#define OPEN_EXISTING 3

template <typename T>
int FileLoadWinAPI( const string FileName, T &Buffer[] )
{
  int Res = -1;
  const HANDLE handle = kernel32::CreateFileW(FileName, GENERIC_READ, SHARE_READ, 0, OPEN_EXISTING, 0, 0);

  if (handle != INVALID_HANDLE)
  {
    long Size;
    kernel32::GetFileSizeEx(handle, Size);

    uint Read;

    ArrayResize(Buffer, (int)Size / sizeof(T));

    kernel32::ReadFile(handle, Buffer, (uint)Size / sizeof(T), Read, 0);
    Res = ArrayResize(Buffer, Read);

    kernel32::CloseHandle(handle);
  }

  return(Res);
}

void OnStart()
{
  ushort Words1[];
  Print(FileLoadWinAPI(::TerminalInfoString(TERMINAL_COMMONDATA_PATH) + "\\Files\\temp.txt", Words1));   

  ushort Words2[];
  Print(FileLoad("temp.txt", Words2, FILE_COMMON));  

  Print(ShortArrayToString(Words1, 1)); // D:\Program FilS\METATRADER 5
  Print(ShortArrayToString(Words2, 1)); // D:\Program Files\MetaTrader 5
}

Написал через WinAPI FileLoad-аналог. А он первую половину файла читает правильно, вторую - нет.

Штатный FileLoad работает правильно.


Для воспроизведения нужно поместить прикрепленный файл в Common-папку.

Где ошибка?

Файлы:
temp.txt  1 kb
 
fxsaber #:
Прошу помочь, сломал все копья. Проблема где-то на поверхности.

...

Где ошибка?

Попробуйте так:

    if(kernel32::ReadFile(handle, Buffer, (uint)Size, Read, 0)) {
      Res = ArrayResize(Buffer, Read / sizeof(T));
    }
 
Anatoli Kazharski #:

Попробуйте так:

Спасибо огромное!

 

Как это интерпретировать?


 
Vitaly Muzichenko #:

Как это интерпретировать?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления

fxsaber, 2023.11.18 14:23

Эта хрень насильно исправлена у некоторых брокеров через сторонний софт: выставляете лимитник по текущий цене, и он тут же акцептируется. Некоторые пошли дальше - когда цена доходит до TP, то никто не ждет, пока MT5 создаст соответствующий маркет-ордер, а сразу идет акцепт TP. Итого - быстрое исполнение: TP-сделка без ордера.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопрос о функции OnTradeTransaction

fxsaber, 2023.03.28 10:24

На скрине сделки, порожденные тейками позиций. При этом тейки не представлены в виде MT5-ордеров.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: MT4Orders

fxsaber, 2023.07.21 22:59

// Список изменений:
// 21.07.2023
//   Fix: Исправлена OrderLotsOpen() для удаленных отложенных ордеров.
//   Add: Обрабатывается ситуация, когда торговая MT5-сделка не имеет MT5-ордера.
//   Fix: Корректное определение OrderClosePriceRequest() при отсутствии цены у SL/TP-ордера.
//   Add: Макрос MT4ORDERS_AUTO_VALIDATION позволяет автоматически проходить проверку Маркет-продуктов.
//   Add: Макрос MT4ORDERS_ORDERS_SORT формирует сортированную по времени закрытия/удаления историю MT4-ордеров.