Вам нужно, чтобы позиция открылась при открытии бара. И закрылась при открытии след. бара?
У И.Кима есть функция, кот. возвращает число баров после открытия последней позиции.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает номер бара открытия последней позиции или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t; int i, k=OrdersTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) t=OrderOpenTime();
} }}}}} return(iBarShift(sy, tf, t, True));}
Функцию эту добавьте (скопируйте) в самый конец вашего кода, - вне ф-и Старт.
А в условия закрытия добавьте вместо
if( OrderOpenPrice()-Bid>=k*Point)
вот это (для вашего случая):
if ( NumberOfBarOpenLastPos(NULL, 0, OP_SELL, -1) ==1 )
atik:
if( iVolume(Symbol(),TF,0)<2) - наилучший и кратчайший вариант для входа
Слава, твой вариант, как и все граали, годится исключительно для тестера.
В реале на 1-м тике бара торговый приказ может не исполниться по ряду причин, а может и сразу 2-3 тика прийти. В этой ветке рассмотрены рабочие варианты.
Слава, твой вариант, как и все граали, годится исключительно для тестера.
В реале на 1-м тике бара торговый приказ может не исполниться по ряду причин, а может и сразу 2-3 тика прийти. В этой ветке рассмотрены рабочие варианты.
на реале я обычно ставлю 3й-4й тик. и всё отлично работает ( не было случаев сбоя )не зря же я написал < а не ==1
ну а по поводу граалей -так эксперт на машке и цене, (а не на тиковых объёмах ) отлично зарекомендовал себя и на реале ( ндд )
все таки работает ни так как я хотел, суть заключалась 1. открыть сделку при открытий нового бара. 2. закрываем сделку при +1 пункт или при цене закрытия этого же при этом на новом баре, которые образуется после закрытия предыдущего, все повторяется.
Как закрыть сделку по цене закрытия бара - я не знаю.
Вряд ли это у вас получится! Ведь мы программно узнаем, что бар закрыт только тогда, когда откроется следующий бар.
Могу вам порекомендовать поэкспериментировать с упомянутыми выше функциями И.Кима
NumberOfBarCloseLastPos - Возвращает номер бара закрытия последней позиции или -1.
NumberOfBarOpenLastPos - Возвращает номер бара открытия последней позиции или -1.
А разве это нужно?
Позиция и так закроется на след. баре после открытия, если будет выполнено условие OrderOpenPrice()-Bid>=k*Point
вот этого условия закрывается через один пункт, т.е. не ждет закрытия бара.
или что-то не так делаю?
Ну не знаю.
Вам нужно, чтобы позиция открылась при открытии бара. И закрылась при открытии след. бара?
У И.Кима есть функция, кот. возвращает число баров после открытия последней позиции.
Функцию эту добавьте (скопируйте) в самый конец вашего кода, - вне ф-и Старт.
А в условия закрытия добавьте вместо
if( OrderOpenPrice()-Bid>=k*Point)
вот это (для вашего случая):
if ( NumberOfBarOpenLastPos(NULL, 0, OP_SELL, -1) ==1 )
if( iVolume(Symbol(),TF,0)<2) - наилучший и кратчайший вариант для входа
Слава, твой вариант, как и все граали, годится исключительно для тестера.
В реале на 1-м тике бара торговый приказ может не исполниться по ряду причин, а может и сразу 2-3 тика прийти. В этой ветке рассмотрены рабочие варианты.
Слава, твой вариант, как и все граали, годится исключительно для тестера.
В реале на 1-м тике бара торговый приказ может не исполниться по ряду причин, а может и сразу 2-3 тика прийти. В этой ветке рассмотрены рабочие варианты.
на реале я обычно ставлю 3й-4й тик. и всё отлично работает ( не было случаев сбоя )не зря же я написал < а не ==1
ну а по поводу граалей -так эксперт на машке и цене, (а не на тиковых объёмах ) отлично зарекомендовал себя и на реале ( ндд )
Ну, п1. уже выполнен.
Чтобы закрыть сделку с заданным профитом - задайте Тейкпрофит в ф-и открытия позиций
string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Посмотрите, в любом советнике - как это делается.
Как закрыть сделку по цене закрытия бара - я не знаю.
Вряд ли это у вас получится! Ведь мы программно узнаем, что бар закрыт только тогда, когда откроется следующий бар.
Могу вам порекомендовать поэкспериментировать с упомянутыми выше функциями И.Кима
NumberOfBarCloseLastPos - Возвращает номер бара закрытия последней позиции или -1.
NumberOfBarOpenLastPos - Возвращает номер бара открытия последней позиции или -1.
в адресе https://www.mql5.com/ru/forum/131859
Возможно, и получится то, что вы хотите.