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

 

Хм, так это было бы хорошо?

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

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

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

}}

На самом деле я заменил Time[1] на Time[0], потому что Time[1] пропускал еще 1 бар, поэтому Time[0] фактически представляет Open[0]. Если кто-то знает что-то лучше/мягче, чем это, пожалуйста, скажите!

 
Proximus:

Хм, так это будет хорошо?

На самом деле я заменил Time[1] на Time[0], потому что Time[1] пропускал еще 1 бар, так что Time[0] фактически представляет Open[0]. Если кто-то знает что-то лучше/мягче, чем это, пожалуйста, скажите!

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

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

 
deVries:

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

Если нет, то при повторении функции start() она снова проверит if() перед orderclose() и, поскольку условия все еще будут истинными для продолжения, она попытается закрыть его снова. Я не могу попытаться закрыть его 2 раза в одном и том же цикле start(), нужно подождать еще один тик, нет?
 
Proximus:
Если не удалось, то при повторении функции start() она снова проверит if() перед orderclose() и, поскольку условия все еще будут истинными для продолжения, она попытается закрыть его снова. Я не могу попытаться закрыть его 2 раза в одном и том же цикле start(), нужно подождать еще один тик, нет?
Разве вы не хотите знать, что это не удалось? и если это не удалось, почему это не удалось? и какие значения соответствующих переменных были в то время, которые могли заставить его потерпеть неудачу? если вы знаете все это, вы можете исправить его, чтобы он не потерпел неудачу в следующий раз. ...
 
Proximus:

Хм, так это было бы хорошо?

На самом деле я заменил Time[1] на Time[0], потому что Time[1] пропускал еще 1 бар, поэтому Time[0] фактически представляет Open[0]. Если кто-то знает что-то лучше/мягче, чем это, пожалуйста, скажите!

Нет, это всегда будет закрываться независимо от того, является тик тиком следующего бара или нет, для любого бара, следующего за баром, когда была открыта сделка, и в любое время в течение этого бара Time[0] всегда будет больше, чем OrderOpenTime().

Если вы хотите закрыть как можно ближе к закрытию бара, тогда вам нужно определить, является ли текущий тик первым тиком нового бара ... ... тогда вы также должны убедиться, что ваше закрытие работает, потому что у вас будет только один шанс на бар.
 
Proximus:
Ну, если не удалось, то когда функция start() повторится, она снова проверит if() перед orderclose() и, поскольку условия все еще будут истинными, чтобы продолжить, она попытается закрыть его снова. Я не могу попытаться закрыть его 2 раза в том же цикле start(), нужно подождать еще один тик, нет?


Вы начали, что он должен закрыть последний тик бара.

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

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

Вы также пропустили другие изменения, которые я предлагал

какой смысл в обновлении после закрытия ордера?

и знаете ли вы, почему проскальзывание вместо TAKEPROFITPIPS?

это зависит от возврата ошибки, вы можете попробовать закрыть ее 2 раза в одном цикле

если tradecontext слишком занят, и у вас есть больше сделок внутри цикла, чтобы закрыть n большая вероятность, что они также не удастся.

 
RaptorUK:
Нет, ордер будет закрываться всегда, независимо от того, является ли тик тиком следующего бара или нет, для любого бара, следующего за баром, когда была открыта сделка, и в любое время в течение этого бара Time[0] всегда будет больше, чем OrderOpenTime().

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

Разве start() не повторяется после каждого тика? Я ошибаюсь?

В общем, представьте себе это:

OrderOpenTime() = 12:12:01 (12 Ч 12 МИН 1 СЕК)

Ордер открывается, пакет функции Orderclose() находится после моего пакета OrderSend() в основном коде, поэтому сразу после открытия ордера мой пакет OrderClose() будет проверять, выполнились ли условия для закрытия ордера или нет. Допустим, выполнились, теперь пора закрыть ордер:

Time[0] - это цена открытия данного бара, по логике вещей она должна быть меньше, чем время открытия ордера, потому что ордер не может быть открыт до открытия того же бара.Это: 12:12:00

Итак, во что бы то ни стало:

if(Time[0]>OrderOpenTime())

вернет значение true, так что ордер будет закрыт. Если он не сможет закрыть его по какой-либо причине, например, из-за проскальзывания или так далее, не проблема, start() повторится.

И при следующем повторении Time[0] будет на 100% больше времени открытия ордера, потому что это логично, так что если первое закрытие не сработает, другое OrderClose() будет происходить каждый раз после этого, когда start() будет повторяться, и так как я думаю, что start() повторяется каждый тик, то я не думаю, что есть лучший способ закрыть ордер быстрее, надеюсь, я объяснил это ясно :)

 
deVries:


Вы начали, что он должен закрыть последний тик бара

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

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

Вы также пропустили другие изменения, которые я предлагал

какой смысл в обновлении после закрытия ордера?

и знаете ли вы, почему проскальзывание вместо TAKEPROFITPIPS?

это зависит от возврата ошибки, вы можете попробовать закрыть ее 2 раза в одном цикле

если tradecontext слишком занят и у вас есть больше сделок внутри цикла, чтобы закрыть n велика вероятность, что они также потерпят неудачу.

Я использую TAKEPROFITPIPS, потому что это моя переменная для TAKEPROFIT, и поскольку я допускаю максимальное проскальзывание, равное уровню моего TP, потому что логично, что у вас не должно быть больше проскальзывания, чем ваш TP, если вы закрываете ордера с помощью OrderClose(), потому что в этом случае TAKEPROFIT закроет его вместо вас более эффективно, чем OrderClose().
 
Proximus:

Разве start() не повторяется после каждого тика? Я ошибаюсь?

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

Проксимус:

В любом случае, представьте следующее:

OrderOpenTime() = 12:12:01 (12 Ч 12 МИН 1 СЕК).

Ордер открывается, пакет функции Orderclose() находится после моего пакета OrderSend() в основном коде, поэтому сразу после открытия ордера мой пакет OrderClose() будет проверять, выполнились ли условия для закрытия ордера или нет. Допустим, выполнились, теперь пришло время закрыть ордер:

Time[0] - это цена открытия данного бара, по логике вещей она должна быть меньше, чем время открытия ордера, потому что ордер не может быть открыт до открытия того же бара. Это: 12:12:00.

Значит, по всем правилам:

возвращает значение true, поэтому срабатывает закрытие ордера. Если он не может закрыть его по какой-либо причине, например, проскальзывание или т.п., не проблема, start() повторяется.

И при следующем повторении Time[0] будет 100% больше времени открытия ордера, потому что это логично, так что если первое закрытие не сработает, другое OrderClose() будет происходить каждый раз после этого, когда start() будет повторяться, и так как я думаю, что start() повторяется каждый тик, то я не думаю, что есть лучший способ закрыть ордер быстрее, надеюсь, я объяснил это ясно :)

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

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

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