MT4. Вопрос по написанию советника: не срабатывает условие завязанное на рыночной цене - страница 4

 
Vitalii Ananev:

Почитайте справку к функции OrderSend() в самом конце примечание.

 ....

Нельзя использовать расчетную либо ненормализованную цену. .... В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS).  

Цены должны быть нормализованы. Для тестера может и так сойдет, но для реала нет. 

Учтем.

Благодарю за подробности 

 
Vitalii Ananev:

Почитайте справку к функции OrderSend() в самом конце примечание.

 ....

Нельзя использовать расчетную либо ненормализованную цену. .... В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS).  

Цены должны быть нормализованы. Для тестера может и так сойдет, но для реала нет. 

Любые расчётные цены в торговом приказе должны быть нормализованы до Digits().

Что на демо/реале, что в тестере.

Иначе и в тестере будут ошибки.
 

Еще раз присмотрелся ... к графику тестера.

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

Например, по свече 1 открылась БАЙ-позиция.

затем на свече 2 открылась еще одна БАЙ.

на свече открывается еще одна БАЙ. 

ЛОИ у этих свечей растут.

НО, закрыты эти все 3 позиции почему-то будут при пробитии БИДом именно ЛОЯ 1-ой свечи. А должно закрываться все БАИ по уровню ЛОЯ последней свечи (т.е. в нашем примере 3-ей сделки). 

 

А так же, если по текущей свече была открыта сделка, то если в рамках этой же свечи БИД выбил вниз ЛОЙ предыдущей свечи, то сделка не закрывается. Что тоже не есть хорошо.

 

Интересно, что если я из кода убираю :

if(iTime(_Symbol,NULL,1) == prevtime) return(0); 

prevtime=iTime(_Symbol,NULL,1); 

 

, тогда все работает и закрывается как надо. НО возникает иная проблема: сделки открываются буквально на каждом тике )))))) 

 
Andrey Pereverzev:

Еще раз присмотрелся ... к графику тестера.

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

Например, по свече 1 открылась БАЙ-позиция.

затем на свече 2 открылась еще одна БАЙ.

на свече открывается еще одна БАЙ. 

ЛОИ у этих свечей растут.

НО, закрыты эти все 3 позиции почему-то будут при пробитии БИДом именно ЛОЯ 1-ой свечи. А должно закрываться все БАИ по уровню ЛОЯ последней свечи (т.е. в нашем примере 3-ей сделки). 

 

А так же, если по текущей свече была открыта сделка, то если в рамках этой же свечи БИД выбил вниз ЛОЙ предыдущей свечи, то сделка не закрывается. Что тоже не есть хорошо.

 

Интересно, что если я из кода убираю :

if(iTime(_Symbol,NULL,1) == prevtime) return(0); 

prevtime=iTime(_Symbol,NULL,1); 

 

, тогда все работает и закрывается как надо. НО возникает иная проблема: сделки открываются буквально на каждом тике )))))) 

Вы  if(iTime(_Symbol,NULL,1) == prevtime) return(0); 

prevtime=iTime(_Symbol,NULL,1);  

Оставьте только  для открытия новых позиций, а условия закрытия проверяйте на каждом тике, а не только когда появляется новая свеча.

Вот пример.

.....
datetime TM = 0;

void OnTick()
{
 .... 
 if (OrdersTotal()>=1)
 {
  Тут пишите условия закрытия сделок
 }
.....
if (TM != Time[0])
{
  TM = Time[0];
  тут напишите условия открытия сделок.
}

...
...

}

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

 
Vitalii Ananev:
Вы  if(iTime(_Symbol,NULL,1) == prevtime) return(0); 

prevtime=iTime(_Symbol,NULL,1);  

Оставьте только  для открытия новых позиций, а условия закрытия проверяйте на каждом тике, а не только когда появляется новая свеча.

Вот пример.

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

Супер, теперь на тестере по крайней мере все работает как надо.

Благодарен! 

Сейчас идею протестирую хотя бы на одном инструменте (поочередно), а потом буду усложнять всякими магиками ))) 

 

Как это понимать? ))))

2,5 года 

 
Andrey Pereverzev:

Как это понимать? ))))

 

Зеленая эквити (не зафиксированная прибыль/убыток), Синяя баланс счета.
 
Vitalii Ananev:
Зеленая эквити (не зафиксированная прибыль/убыток), Синяя баланс счета.

Да, но почему она фиксится только в конце емое ....

Сырой еще код получается 

 
Andrey Pereverzev:

Да, но почему она фиксится только в конце емое ....

Сырой еще код получается 

В конце теста все позиции принудительно закрываются, вам случайно попался удачный период тестирования на котором открылась огромная куча позиций и чудом в конце закрылась в плюс.
 
Vladimir Zubov:
В конце теста все позиции принудительно закрываются, вам случайно попался удачный период тестирования на котором открылась огромная куча позиций и чудом в конце закрылась в плюс.

Период в 2,5 года не может быть случайным ;)

Идею понял, что нужно код доработать. 

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