Особенности языка mql5, тонкости и приёмы работы - страница 186

 
HistorySelect.

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

MT5 и скорость в боевом исполнении

fxsaber, 2020.09.02 00:32

если кто-то вздумает использовать совместно библиотеки, в которых from-входной параметр не совпадает, то получит тормоза.


Другие HistorySelect.

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

MT5 и скорость в боевом исполнении

fxsaber, 2020.09.02 00:52

HistoryDealSelect и HistoryOrderSelect обязательно нужно писать вот так.

  static bool HistorySelectOrder( const ulong Ticket )
  {
    return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket));
  }

  static bool HistorySelectDeal( const ulong &Ticket )
  {
    return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket));
  }

Иначе гарантировано нарветесь на тормоза.

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

MT5 и скорость в боевом исполнении

Renat Fatkhullin, 2020.09.02 00:40

Когда вы работаете с громадными объемами (а тысячи и десятки тысяч сделок в истории вы неспроста показывали), требующими атомарного/снепшот доступа, нужно понимать их стоимость.

 
Если в советнике в OnInit стоит MessageBox, то нужно делать ряд действий, чтобы обойти потенциальную проблему при релогине.
 
Целесообразно сводить к минимуму количество вызовов штатных функций, чтобы уменьшить вероятность нарваться на их не редкие лаги.
 

Не могу победить 

2020.04.01 11:49:34 failed instant sell 0.32 EURUSD at 1.09539 [Invalid volume]

Проверка на общий лимит обьемов в рыке есть.

Почему получаю такую ошибку понять не могу

В валидаторе маркета
 
Vladimir Pastushak:

Не могу победить 

2020.04.01 11:49:34 failed instant sell 0.32 EURUSD at 1.09539 [Invalid volume]

Проверка на общий лимит обьемов в рыке есть.

Почему получаю такую ошибку понять не могу

В валидаторе маркета

На лимит по ордерам не могли нарваться? У меня, кажется, было так.

 
Edgar Akhmadeev:

На лимит по ордерам не могли нарваться? У меня, кажется, было так.

Пишет же не правильный обьем, наличие средств проверяется, превышение лимита по лотам то же проверяется. Копаю дальше...

 
Vladimir Pastushak:

Пишет же не правильный обьем

Edgar Akhmadeev:

У меня, кажется, было так.

... что не открывался маленький объём при большом депо. Деталей не помню, но один из брокеров на центовике имел очень маленький лимит ордеров по инструменту.

 

В МТ5 есть следующая проблема. Нужно в тестере стратегий в визуальном режиме протестировать работу торговой панели. Торговая панель имеет поля для ввода (OBJ_EDIT). При изменении текста в поле для ввода и нажатии ENTER новый текст не появляется, а вместо этого появляется исходный текст, который был задан при создании поля для ввода. То есть, не возможно поменять текст в поле для ввода во время визуального тестирования панели.

Как это решить?

Пример кода:

void OnTick()
  {
   string name="EDIT";
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_EDIT,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,"EURUSD");
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
      ObjectSetInteger(0,name,OBJPROP_READONLY,false);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
     }
  }
 

I created this auto-hotkey script to hide title bars while coding. It works for all windows on Windows. I'm not sure about other platforms.



; 
Hide borders, title bar 









#IfWinNotActive ahk_class Progman 









#IfWinNotActive ahk_class Shell_TrayWnd 









^] :: 









WinGet Style, Style, A 









if (Style & 0xC40000) { 









WinSet, Style, -0xC40000, A 









WinMaximize, A 













} 









else { 









WinSet, Style, + 0xC40000, A 









WinRestore, A 









} 









return 

The result, is a perfectly filled desktop screen. 

Just save the file as file_name.ahk. Save it in your preffered directory, then download and install  https://www.autohotkey.com

Create a shortcut of the script and cut it. Press win + r

Type shell: startup and paste the shortcut in the pop window.

That way, the script will start with windows after reboot. To launch the script now, double click it, then you can hide window title bars with ctrl +]

Make sure the window is not maximized while using the shortcut. No point in maximizing a maximized window, and I didn't handle for that case.

Enjoy

edit: 

The code formater is behaving strangely. It keeps expanding the code to huge line-spacing. Lol!

AutoHotkey
  • www.autohotkey.com
AutoHotkey provides a simple, flexible syntax allowing you to focus more on the task at hand rather than every single little technicality. It supports not only the popular imperative-procedural paradigm, but also...
Файлы:
 

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

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

fxsaber, 2020.10.01 23:49

// Возвращает true в некоторых ситуациях, когда чарт не виден.
bool IsInvisible( long chartID = 0 )
{
  bool Res = ::ChartGetInteger(chartID, CHART_IS_MINIMIZED);
  
  if (!Res && !::ChartGetInteger(chartID, CHART_IS_MAXIMIZED) && ::ChartGetInteger(chartID, CHART_IS_DOCKED))
  {
    if (!chartID)
      chartID = ::ChartID();

    for (long Chart = ::ChartFirst(); (Chart != -1) && !Res; Chart = ::ChartNext(Chart))
      Res = (Chart != chartID) && ::ChartGetInteger(Chart, CHART_IS_MAXIMIZED);
  }
  
  return(Res);
}

Торговые панели и другую информацию на чартах не обновляем, если возвращает true.

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