Новая версия MetaTrader 4 Client Terminal build 402 - страница 6

 
dmmikl86:
это связано с тем что стоимость пункта на разных парах разная...

По моему стоимость пункта учитывать лишнее в режиме отображения "прибыль в пунктах"

 
olyakish:

По моему стоимость пункта учитывать лишнее в режиме отображения "прибыль в пунктах"

это еще один вечный глюк МТ )
 

Глюки....

1) если удалить из "Обзора рынка" ненужные инструменты, а потом опять добавить какие-нибудь, получается интересная штука.

Щелкните правой кнопкой на инструменте, выберите "Окно графика" - для открытия графика.

Откроется график инструмента другого, не того который выбран!!

Чтобы эта ошибка произошла, нужно выбрать инструмент из только что заново добавленных. (см скрины pic1, pic2, pic3)

2) у меня на скрине видно, что инструмент USDCHF отмечен как выбранный в окне "Символы", хотя реально в "Обзоре рынка" его нет. (pic4)

Возможно первый глюк - следствие второго, т.к. сбилась нумерация инструментов в "Обзоре рынка".

Интернет у меня очень плохой, поэтому все скрины - в архиве.

Вот ссылка http://www.sendspace.com/file/tbav73

 
dimonsky:

Глюки....

1) если удалить из "Обзора рынка" ненужные инструменты, а потом опять добавить какие-нибудь, получается интересная штука.

Щелкните правой кнопкой на инструменте, выберите "Окно графика" - для открытия графика.

Откроется график инструмента другого, не того который выбран!!

Тоже такое заметил еще в 401-м билде.
 

Сегодня (вернее уже вчера) утром получил странный глюк в МТ4 - OrderSelect не нашёл ордер по номеру тикета в одном эксперте.

В эксперте выставляются два отложенных ордера BUY_STOP и SELL_STOP по разные стороны от текущей цены. Тикеты этих ордеров хранятся в t1 и t2. Код, в котором произошла ошибка и который приведён ниже, делает следующее: при открытии одного из этих отложенников второй удаляется и вместо него выставляется следующий отложенник с номером t3. Если при первоначальном выставлении t1 и t2 были ошибки, то ошибочного тикета не должно быть в списке ордеров. Именно это и проверяется с помощью if (OrderSelect ...) и в случае ошибки в лог пишется сообщение и делается выход из серии функцией restart().

Сегодня в 6:30 открылся t1. Ордер t2 тут же был удалён советником (удалён с рынка, но остался в истории - "canceled", я проверил). После этого был выставлен t3. Эти все события есть в логах МТ и советника. Далее проверка "OrderSelect(t2, SELECT_BY_TICKET)" возвращает ЛОЖЬ и серия обрывается с ошибкой "Unknown order t2". Странно, ведь t2 был выставлен и удалён без ошибок и остался в истории. Режим показа истории в МТ - "Вся история". Как OrderSelect смог его не найти?

Компьютер стоит отдельно, используется только для торговли, ни для чего больше. Никто кроме меня его не трогает. Загрузка процессора в среднем 10%. Памяти, места на винте и т.д. хватает с большим запасом.
Версия МТ4 - 402. Советник работает уже несколько месяцев в разных вариациях в реалтайме на демо в одном МТ параллельно на трёх разных парах (на трёх графиках). Никаких проблем с этой частью кода до сегодняшнего утра не было. И после этого днём и вечером по другим парам на этом же советнике тоже всё прошло гладко. То есть, ошибку воспроизвести по желанию не получится.

Вопрос: как такое могло произойти? Это глюк МТ или я что-то не учёл в коде?

В коде используются функции OrderDeleteX и OrderSendX - обёртки над стандартными OrderDelete и OrderSend, добавляющие проверку торгового потока на незанятость и фиксирующие в логе эксперта события типа "Deleting order ..." и "Sending order ..."
Расчёты цен я убрал для упрощения и бОльшей наглядности кода.

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


Номера ордеров по переменным:
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
 

Не могу найти ордер. Здесь видно по отчету ДЦ, что ордер 67930924 был открыт...

это закрытые сделки в истории счета, начиная с 08.06.11. как видим этого ордера здесь нет.

Значит он должен быть в открытых сделках. Картинка ниже, открытые сделки.

Но его здесь тоже нет. Интересно какой отчет завтра пришлет ДЦ, но я хочу услышать версию разработчиков ПО, как такое может быть.

И еще один момент, может это и не важно, но ни как не сохраняется дата, как не открою выбор периода всегда стоит май месяц.


 
voinG:

Не могу найти ордер. Здесь видно по отчету ДЦ, что ордер 67930924 был открыт...

это закрытые сделки в истории счета, начиная с 08.06.11. как видим этого ордера здесь нет.

Значит он должен быть в открытых сделках. Картинка ниже, открытые сделки.

Но его здесь тоже нет. Интересно какой отчет завтра пришлет ДЦ, но я хочу услышать версию разработчиков ПО, как такое может быть.

И еще один момент, может это и не важно, но ни как не сохраняется дата, как не открою выбор периода всегда стоит май месяц.



нашелся. открыл "вся история" и в этом варианте он виден.
 

В продолжение темы "OrderSelect не нашёл ордер по номеру тикета".

Сегодня утром в этом же эксперте на другой паре произошла такая же ошибка. Отложенный ордер t2=#119899844 был выставлен успешно, потом так же успешно удалён, после него был без ошибок выставлен отложенник t3=#119903758, и после этого t2 не был найден функцией OrderSelect.

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

До этого несколько месяцев эксперт работал в версии МТ4 229. Подобного не наблюдалось. На выходных, 4 дня назад, перешёл на версию 402. Не знаю, связаны ли ошибки с новой версией. Вернуться на старую уже нет возможности, так как Альпари, где торгует этот эксперт, изменил часовой пояс котировок, а эти изменения правильно отрабатывает только версия 402 (так утверждают в Альпари).

Вопросы остались открытыми:
Как такое могло произойти, почему OrderSelect не нашёл ордер в истории, при том, что история отображается вся, потерянный ордер в ней виден? Это глюк МТ или я что-то не учёл в коде?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
 
Описал ренату эту проблему со скрином, в 399 билде убрали, но в 401 и 402 опять появился этот глюк, пришлось вернуться к 399 билду
 

Есть библиотека DLL написанная на Дельфи7. В ней реализована всего одна функция - проверка наличия файла по указанному пути.

Вот ее код.

library FileGDV;

uses
  SysUtils,
  Classes;

//{$R *.res}

function FileExists(s:pchar):boolean; StdCall;
begin
   result:=sysutils.fileexists(s);
end;

exports FileExists;

begin
end.

Ничего сложного, ничего особенного. всего одна функция.

Вот код советника, который эту функцию юзает:

if (FileExists(s))
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
         
      }
      else
      {
         Alert("File not found   "+s);         
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
         s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
         FileWriteString(handleM,s,StringLen(s));
      } 

и вот код заголовочного файла

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


Теперь вопрос. Почему если в терминале один советник, то все пашет как часы, сутками напролет.

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

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error
Причина обращения: