Пригоден ли советник для реала? - страница 30

 
FOReignEXchange:

Перейду обязательно, как время придёт.

Удачи вам
 
dentraf:

Удачи вам

Спасибо!
 
FOReignEXchange:

Идея торговать на беспорядочным рынке с высокой волатильностью. Все основные валютные пары такими являются сейчас. Волатильность высокая, логика и никакие системы не работают. Хаос какой-то. ....
Да ладно. Всё работает как и раньше.
 

После сегодняшней волатильности сравнил результаты тестера с реальными результатами. К сожалению выявились значительные рассхождения на таком рынке.

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

Во-первых: В журнале пишет это

22:23:30 '882613': delete pending order #26344474 buy stop 4.00 EURUSD at 1.3787 sl: 1.3773 tp: 1.3799
22:23:30 '882613': deleting of pending order #26344474 buy stop 4.00 EURUSD at 1.3787 sl: 1.3773 tp: 1.3799 failed [Invalid parameters]

22:37:27 '882613': delete pending order #26347980 sell stop 4.00 EURUSD at 1.3668 sl: 1.3682 tp: 1.3656
22:37:27 '882613': deleting of pending order #26347980 sell stop 4.00 EURUSD at 1.3668 sl: 1.3682 tp: 1.3656 failed [Invalid parameters]
22:37:27 '882613': delete pending order #26347980 sell stop 4.00 EURUSD at 1.3668 sl: 1.3682 tp: 1.3656
22:37:28 '882613': deleting of pending order #26347980 sell 4.00 EURUSD at 1.3668 sl: 1.3682 tp: 1.3656 failed [Invalid parameters]

Вот эти два ордера не удалились и они обе принесли убыток. Второй ордер пытался удалиться дважды. Не пойму почему они не удаляются. Весь день всё нормально работает, а здесь нет, даже если перед функцией удаления ставить RefreshRates().

И во-вторых:

Мне кажется это баг. Такое впечатление, что у терминала не хватает памяти или мозгов. Он забывает что мы выбираем ордер. Вот примерно такие куски не работают.

if (//Тут условие//)
   {
   if (OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)
     {
     if (OrderType()==OP_BUYSTOP && Ask>(OrderOpenPrice()-4*Point)) 
        {
        i=0;
        while (i<10)
              {
              if (i>0) Sleep(500);      
              RefreshRates(); OrderDelete(ticket_buy); 
              err=GetLastError();
              if (err==0)
                 {
                 ticket_buy=0; return;
                 }
              i++;
              }
        }
     }
   }

Все условия выполняются, проверял с помощью коментов. На этапе проверки типа ордера всё застревает. Дальше не идёт. то есть дело не доходит до функции удаления. Хотя должен, так как все условия соблюдаются, проверял с помощью комментов. Не первый раз замечаю такую особенность языка, что когда выбираешь ордер и потом вписываешь в условие какие-либо параметры выбранного ордера, то иногда это условие не может правильно прочитаться. Чем больше параметров ордера в условии, тем чаще условие не выполняется. В данном случае параметры ордера это OrderType() и OrderOpenPrice(). Думаю многие замечали такую странность. Как от неё избавляться? Или проблемма в другом может? Забыл сказать, ошибок в журнале не выдаёт в этом случае, просто не выполняется условие, хотя должно.

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

Не судите строго за такой не грамотный код, я самоучка.

Почему именно удаление ордеров происходит с такими проблеммами? Ордера ставятся ровно в пункт как надо и всю прибыль робот собирает. Но вот из-за того-что не получается удалять не нужные ордера всё портится! Если избавится от этих проблемм, то всё будет работать как надо!

 
FOReignEXchange:

Судя по логу, код тупо не успел.

Т.е. удаление происходило уже в момент срабатывания ордера.

 
TheXpert:

Судя по логу, код тупо не успел.

Т.е. удаление происходило уже в момент срабатывания ордера.


А отложки устанавливаются же ровно в пукнт и не упускаются. Почему именно с удалением проблеммы? Тем более во втором случае он же два раза пытался удалить.
 
FOReignEXchange:
А отложки устанавливаются же ровно в пукнт и не упускаются. Почему именно с удалением проблеммы? Тем более во втором случае он же два раза пытался удалить.

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

А для выставления стоплевелы есть, а для удаления только фриз-левелы, и то если есть.

 
TheXpert:

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

А для выставления стоплевелы есть, а для удаления только фриз-левелы, и то если есть.


С первым случаем всё понятно. Спасибо большое! А со вторым случаем не знаком? Он более важен так как чаще происходит и чаще приносит убыток. По условиям всё нормально. Причём дело не в скорости рынка и запас времени на удаление очень много. Просто не выполняется условие, хотя должно.
 
FOReignEXchange:

А со вторым случаем не знаком?... Просто не выполняется условие, хотя должно.

Возможно это условие иногда не срабатывает, а именно, его правая часть

if (OrderType()==OP_BUYSTOP && Ask>(OrderOpenPrice()-4*Point))

Нормализуй Ask перед сравнением.

 
OnGoing:

Возможно это условие иногда не срабатывает

Нормализуй Ask перед сравнением.


Так чтоли?

NormalizeDouble(Ask,Digits)>(OrderOpenPrice()-4*Point))