Помогите мне навести порядок в конце бара! - страница 3

 
RaptorUK:

Да, start() вызывается для каждого тика, если он все еще не выполняется....

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

У меня нет других решений. Если бы они были, я бы их сделал.


SDC:

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

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

Проблема, большая проблема:

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

Я использовал этот код, чтобы закрыть эту неприятную сделку в самом конце свечи, но проблема в том, что в бэктестинге он работает как волшебство, но когда я попробовал его на реальном демо-счете, это было очень глупо. Он начал закрывать позиции сразу после их открытия. Я не понимаю, почему, поскольку Time[0] должно быть временем открытия текущего бара, и как это может быть больше, чем текущее время, когда сделка была поставлена после открытия свечи? Это просто нонсенс.

Но все же это так, поэтому, чтобы исключить любую ошибку, я использовал только:

if( Time[0]>OrderOpenTime()  )

This в if, чтобы исключить другие помехи, но да, проблема в этом тесте:

Time[0]>OrderOpenTime() 

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

 
Proximus:

Проблема, большая проблема:

Я использовал этот код, чтобы закрыть эту неприятную сделку в самом конце свечи, но проблема в том, что в бэктестинге он работает как волшебство, но когда я попробовал его на реальном демо-счете, это было очень глупо. Он начал закрывать позиции сразу после их открытия. Я не понимаю, почему, поскольку Time[0] должно быть временем открытия текущего бара, и как это может быть больше, чем текущее время, когда сделка была поставлена после открытия свечи? Это просто нонсенс.

Это произошло, так что найдите причину ... например, если ваш OrderSelect() не сработал (вы проверяете, сработал он или нет?), то OrderType() вернет неправильное значение или правильное, просто случайно, OrederOpenTime() вернет неправильное значение ... возможно, ноль, а ноль меньше Time[0] ... Вы выводили значение для OrderOpenTime(), когда пытались понять, что идет не так? почему нет?
.
Есть веские причины, по которым я продолжаю размещать эту ссылку ... Что такое возвращаемые значения функции? Как их использовать? Почему вы постоянно игнорируете хорошие советы?

 
Proximus:

У меня нет других решений. Если бы у меня были, я бы сделал эти.

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

Должна ли это быть именно цена закрытия? Как насчет того, чтобы попробовать что-то вроде ... засечь разницу между приходом тиков во время формирования бара ... если они приходят быстро, например 1 в секунду, возьмите цену, если она приходит менее чем через 5 секунд после закрытия бара, если тики приходят медленно, например 1 в минуту, возьмите цену, если тик приходит в последние 30 секунд бара, если ни один тик не приходит в течение этого времени, возьмите цену открытия последующего бара.

 
SDC:

Должна ли это быть именно цена закрытия? Как насчет того, чтобы попробовать что-то вроде ... засечь разницу между прибытием тиков во время формирования бара ... если они прибывают быстро, например, 1 в секунду, возьмите цену, если она прибывает менее чем через 5 секунд от времени закрытия бара, если тики прибывают медленно, например, 1 в минуту, возьмите цену, если тик прибывает в последние 30 секунд бара, если ни один тик не прибывает в течение этого времени, возьмите цену открытия последующего бара.


Это не обязательно должно быть точно Close[1], так как в предыдущих сообщениях мы исключили, что невозможно точно попасть на этот уровень. Но второе лучшее / ближайшее к этому тоже подойдет. Не могли бы вы написать вашу идею в коде, чтобы увидеть, что это такое.
 

Volume[0]==1 ;// новый бар = закрытию последнего бара.

или.

bool NewBar()

{

static datetime lastbar;

datetime curbar = Time[0];

if(lastbar!=curbar)

{

lastbar=curbar;

return (true);

}

else

{

return (false);

}

}


if (Signal=="BUY" && NewBar())

 
Спасибо за помощь, я решил проблему, дело было в том, что у меня было открыто много графиков одновременно, но все они имели одинаковый магический номер, теперь они генерируются случайным образом, так что все в порядке.
 

Здравствуйте,

Есть ли способ закрыть открытую позицию за 5 минут до окончания бара на таймфрейме H4? спасибо.

 
jonjon:

Здравствуйте,

Есть ли способ закрыть открытую позицию за 5 минут до окончания бара на таймфрейме H4? спасибо.



да, есть
 
Mehmet: Volume[0]==1 ;// новый бар = закрытию последнего бара.
  1. Если вы пропустите самый первый тик бара, ваш код не сработает и пропустит весь бар. ВСЕГДА используйте время.
  2. Не вставляйте код
    Воспроизвести видео
    Пожалуйста, отредактируйте ваше сообщение.
    Для больших объемов кода, прикрепите его.
Причина обращения: