MetaTrader 4 build 169. MetaTrader Data Center 4 build 168. - страница 4

 
Глюк компилятора (билд 165).

Модифицируя текст случайно не поставил константу в определении строки.
Компилятор проглотил дез диагностики, при работе эксперта естественно были ошибки.
int Log(int Level, string mes = "")
{
   if (LogLevel() >= Level)
   {
      string sLevel = ;
      for (int i = 0; i < Level; i++) sLevel = sLevel + "  ";
      ................
 
Похоже при переключении счетов в МТ
init и deinit не вызываются.

А наверное нужно бы?
 
Неправильнная сортировка - Полный текст скрипта:
//+------------------------------------------------------------------+
//|                                                      SortArr.mq4 |
//|                                             Copyright © 2005, AU |
//|                                           http://www.lan.kiev.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, AU"
#property link      "http://www.lan.kiev.ua"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//---- 
	double TmpArr[7]={4,1,6,3,9,12,3};
	ArraySort(TmpArr,MODE_DESCEND);//
	for (int i=7-1; i>=0; i--){Print(" TmpArr[",i,"]=",TmpArr[i]);}
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
AU 20.05.05 13:11

Неправильнная сортировка


Так MODE_DESCEND должен быть четвертый по счету параметр. Какого же ты его вторым лепишь? Вместо количества сортируемых элементов.
 
Если включить ручное подтверждение действий эксперта,
то при посылке и модификации (?) ордера появляется окно подтверждения.

При этом
1. в окне непонятно что пытался делать эксперт покупать или продавать.
2. нет кнопки отказа от действий, в этом случае непонятно зачем такое подтверждение нужно.

Пока писал этот пост, попробовал снять галку ручного подтверждения.
В результате МТ свалился с крешем.

Crash Details:
The instruction at "0x73dd1351" referenced memory at "0x00000004" ....

Сам креш отослать не успел, он тоже свалился пока я раздумывал.

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

Единственная вещь которая могла бы вызвать подозрение,
в индикаторах использована функция
// Устранение подвисания терминала при расчете индикаторов.
//  Функция Idle вставляется в цикл расчета индикатора.
int _hwnd = 0;
int Idle()
{
   if (_hwnd == 0) _hwnd = WindowHandle(Symbol(),Period());
   if (_hwnd != 0) SendMessageA(_hwnd,0,0,0);
}


Вызывалась в данном случае 1 раз на тик.

 
Если включить ручное подтверждение действий эксперта,
то при посылке и модификации (?) ордера появляется окно подтверждения.

при ручном подтверждении любая торговая операция: открытие, модификация, закрытие, удаление - будет сопровождаться окном подтверждения. чтобы отличить это окно от стандартного окна, в тиковом графике фоном написано "Expert"


При этом
1. в окне непонятно что пытался делать эксперт покупать или продавать.

смотрите заголовок окна - там написано buy или sell


2. нет кнопки отказа от действий, в этом случае непонятно зачем такое подтверждение нужно.

есть крестик в правом верхнем углу
 
Ясно.

Крестик есть, но действие его как бы неочевидно.
Было бы намного понятнее, если бы в режиме подтверждения на форме появлялась кнопка "Отказ".
 
И кстати,
надпись я конечно сразу не заметил, но не суть.
Наверное если эксперт дает команду "Купить",
то кнопочка "Sell" и пр. должны быть задизейблены.

Т.е. чтобы у юзера был выбор подтвердить/отказать,
и может быть поправить стопы/тейки.

Все ИМХО, но думаю юзерам так было бы удобнее.
 
Попытка запустить скрипт (ранее отрабатывался без проблем):
int start()
  {
//---- 
   int cb;
   for(cb=Bars-1;cb>=0;cb--)
   {
      if(TimeYear(Time[cb])>1989)
      {
         //пересечение маин вниз и спад маин
         if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+2)>
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+2)&&
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+1)<=
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+1)&&
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+1)<=
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+2))
/*            &&
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+1)<=
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+2))*/
         {
            Print(ObjectCreate("down"+cb,OBJ_ARROW,0,Time[cb],Open[cb]));
            Print(ObjectSet("down"+cb,OBJPROP_COLOR,Yellow));
            Print(ObjectSet("down"+cb,OBJPROP_WIDTH,2));
            Print(ObjectSet("down"+cb,OBJPROP_ARROWCODE,242));
         }
         //пересечение маин вверх и рост
         if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+2)<
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+2)&&
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+1)>=
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+1)&&
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+1)>=
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,cb+2))
/*            &&
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+1)<=
            iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,cb+2))*/
         {
            Print(ObjectCreate("down"+cb,OBJ_ARROW,0,Time[cb],Open[cb]));
            Print(ObjectSet("down"+cb,OBJPROP_COLOR,Yellow));
            Print(ObjectSet("down"+cb,OBJPROP_WIDTH,2));
            Print(ObjectSet("down"+cb,OBJPROP_ARROWCODE,241));
         }
      }
   }
//----
   return(0);
  }


привела к крешу:

There has been a critical error
Time        : 2005.05.22 16:19
Program     : Client Terminal
Version     : 4.00 (build: 169, May 10 2005)
Owner       : MetaTrader
OS          : Windows XP Professional 5.1 Service Pack 2 (Build 2600)
Processors  : 1, type 586, level 6
Memory      : 523764/172060 kb
Exception   : C0000005
Address     : 004521B5
Access Type : read
Access Addr : 0000003C

Registers   : EAX=00000000 CS=001b EIP=004521B5 EFLGS=00010246
            : EBX=00000000 SS=0023 ESP=013EFEE4 EBP=013EFF64
            : ECX=0000003C DS=0023 ESI=0044F2BE FS=003b
            : EDX=000000DA ES=0023 EDI=017BF1F8 GS=0000

Stack Trace : 00446E65 7C80B50B 00000000 00000000
            : 00000000 00000000 00000000 00000000
            : 00000000 00000000 00000000 00000000
            : 00000000 00000000 00000000 00000000
Modules     :
          1 : 00400000 00246000 D:\Forex\MetaTrader 4\terminal.exe
          2 : 20000000 002CD000 C:\WINDOWS\system32\xpsp2res.dll
          3 : 5B260000 00038000 C:\WINDOWS\system32\UxTheme.dll
          4 : 61EC0000 0000E000 C:\WINDOWS\system32\MFC42LOC.DLL
          5 : 698B0000 00058000 C:\WINDOWS\system32\hnetcfg.dll
          6 : 71A30000 00040000 C:\WINDOWS\system32\mswsock.dll
          7 : 71A70000 00008000 C:\WINDOWS\System32\wshtcpip.dll
          8 : 71A80000 00008000 C:\WINDOWS\system32\WS2HELP.dll
          9 : 71A90000 00017000 C:\WINDOWS\system32\WS2_32.dll
         10 : 72CD0000 00008000 C:\WINDOWS\system32\msacm32.drv
         11 : 72CE0000 00009000 C:\WINDOWS\system32\wdmaud.drv
         12 : 73D90000 000FE000 C:\WINDOWS\system32\MFC42.DLL
         13 : 746E0000 0004B000 C:\WINDOWS\system32\MSCTF.dll
         14 : 76350000 00005000 C:\WINDOWS\system32\MSIMG32.dll
         15 : 76380000 00049000 C:\WINDOWS\system32\comdlg32.dll
         16 : 76B20000 0002E000 C:\WINDOWS\system32\WINMM.dll
         17 : 76C20000 0002E000 C:\WINDOWS\system32\WINTRUST.dll
         18 : 76C80000 00028000 C:\WINDOWS\system32\IMAGEHLP.dll
         19 : 76F10000 00027000 C:\WINDOWS\system32\DNSAPI.dll
         20 : 76F50000 0002D000 C:\WINDOWS\system32\WLDAP32.dll
         21 : 76FA0000 00008000 C:\WINDOWS\System32\winrnr.dll
         22 : 76FB0000 00006000 C:\WINDOWS\system32\rasadhlp.dll
         23 : 77110000 0008C000 C:\WINDOWS\system32\OLEAUT32.dll
         24 : 773C0000 00102000 C:\WINDOWS\WinSxS\
              X86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\COMCTL32.dll
         25 : 774D0000 0013D000 C:\WINDOWS\system32\ole32.dll
         26 : 77A70000 00095000 C:\WINDOWS\system32\CRYPT32.dll
         27 : 77B10000 00012000 C:\WINDOWS\system32\MSASN1.dll
         28 : 77BC0000 00007000 C:\WINDOWS\system32\midimap.dll
         29 : 77BD0000 00015000 C:\WINDOWS\system32\MSACM32.dll
         30 : 77C00000 00058000 C:\WINDOWS\system32\msvcrt.dll
         31 : 77D30000 00090000 C:\WINDOWS\system32\USER32.dll
         32 : 77DC0000 000AC000 C:\WINDOWS\system32\ADVAPI32.dll
         33 : 77E70000 00091000 C:\WINDOWS\system32\RPCRT4.dll
         34 : 77F10000 00046000 C:\WINDOWS\system32\GDI32.dll
         35 : 77F60000 00076000 C:\WINDOWS\system32\SHLWAPI.dll
         36 : 7C800000 000F6000 C:\WINDOWS\system32\kernel32.dll
         37 : 7C900000 000B1000 C:\WINDOWS\system32\ntdll.dll
         38 : 7C9C0000 00818000 C:\WINDOWS\system32\SHELL32.dll

Call stack  :
0044F0E0:30D5 [004521B5] ?ExecuteStaticAsm@CExpertInterior
00446D40:0125 [00446E65] ?RunExpertInt@CExpertInterior
7C80B357:01B4 [7C80B50B] GetModuleFileNameA               [C:\WINDOWS\system32\kernel32.dll]


причем ошибка не стабильная, потому что на следующем запуске скрипта все опять-таки отработалось без проблем

 
причем ошибка не стабильная, потому что на следующем запуске скрипта все опять-таки отработалось без проблем

Спасибо - обязательно проверим. В понедельник выпустим билд 170 с рядом поправок в обработчике MQL4 кода.