Ответить
19.12.2015, 15:48
Аватар для forextime
forextime forextime вне форума Активный участник
Регистрация: 07.02.2012 / Сообщений: 122
Поблагодарили 34 раз(а) / Репутация: 34

По умолчанию Помогите с дистанцией от последнего закрытого ордера

Суть такова, есть цена последнего закрытого ордера PriceCloseLastPos, есть условие закрытия серии ордеров.
Я не могу заставить слушаться моё условие (Bid-PriceCloseLastPos())<=distPp*Point или Bid+
Добиваюсь того, чтобы если текущая цена для закрытия по сигналу была меньше distPp=50 от цены последнего закрытия ордера(ов) то закрываем,
если больше то пропускаем и не закрываем (для разгрузки серии во флэте).

При сигнале бай, закрывает серию ордеров селл
__________________________________________________ __________
if(signal_buy==0 && sell_profit>0 && MathAbs(Bid-PriceCloseLastPos())<=distPp*Point) {
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==magic) {
if(OrderType()==1) CloseOrder(OrderTicket()); }
}



Описание : Возвращает цену закрытия последней закрытой позиций.
__________________________________________________ __________
double PriceCloseLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0;
int i, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderClosePrice();
}
}
}
}
}
}
}
return(r);
}

Последний раз редактировалось forextime; 19.12.2015 в 15:50.
20.12.2015, 01:18
Аватар для Abi
Abi Abi вне форума Элитный участник
Регистрация: 21.12.2010 / Адрес: Kz Казахстан / Сообщений: 970
Поблагодарили 1,697 раз(а) / Репутация: 1699
Первое: для поиска цены последнего ордера только селл и только по текущей паре попробуйте изменить на... MathAbs(Bid-PriceCloseLastPos(NULL,1,magic))<=distPp*Point)
а то сова будет искать последнюю цену закрытия любого ордера по любой паре и в реальной работе вернет цену которая вам не подходит вообще.
для поиска последнего бая: MathAbs(Bid-PriceCloseLastPos(NULL,0,magic))<=distPp*Point)

Второе: меня удивило ваше условие "При сигнале бай" if(signal_buy==0 обычно я при поступлении сигнала бай присваиваю так... signal_buy==1 , тут у вас нет ошибки?
Или вы такой оригинал, что любите обратную логику?
==================================================

Последний раз редактировалось Abi; 20.12.2015 в 01:24.
20.12.2015, 01:29
Аватар для forextime
forextime forextime вне форума Активный участник
Регистрация: 07.02.2012 / Сообщений: 122
Поблагодарили 34 раз(а) / Репутация: 34
Первое: для поиска цены последнего селл ордера по текущей паре попробуйте изменить на... MathAbs(Bid-PriceCloseLastPos(NULL,1,magic))<=distPp*Point)
а то сова будет искать последнюю цену закрытия ордера по любой паре и вернет цену которая вам не подходит вообще.
для поиска последнего бая MathAbs(Bid-PriceCloseLastPos(NULL,0,magic))<=distPp*Point)

Ок, спасибо, поправлю))

Второе: меня удивило ваше условие: if(signal_buy==0 обычно я при поступлении сигнала бай присваиваю так... signal_buy==1 , тут у вас нет ошибки? Или вы такой оригинал, что любите обратную логику?
При новом сигнале бай ордера селл ордера будут закрываться
Всегда придерживался Signal_buy==0, Signal_sell==1

Функция преобразования типа ордера
Описание:
Преобразование числа, содержащего числовое представление типа ордера в строку
Параметры:
int Type - тип ордера (0-BUY, 1-SELL, 2-BUYLIMIT, 3-SELLLIMIT, 4-BUYSTOP, 5-SELLSTOP

>>> Возвращаемые значения:
В случае успешного исполнения функции возвращает строку с типом переменной. В обратном случае возвращает "NONE".

string TypeToStr(int Type) {
switch(Type) {
case 0: return("BUY");
case 1: return("SELL");
case 2: return("BUYLIMIT");
case 3: return("SELLLIMIT");
case 4: return("BUYSTOP");
case 5: return("SELLSTOP");
}
return("NONE");
}


Последний раз редактировалось forextime; 20.12.2015 в 01:33.
20.12.2015, 04:56
Аватар для Abi
Abi Abi вне форума Элитный участник
Регистрация: 21.12.2010 / Адрес: Kz Казахстан / Сообщений: 970
Поблагодарили 1,697 раз(а) / Репутация: 1699
Всегда придерживался Signal_buy==0, Signal_sell==1
в таком случае надо писать: Signal==0, Signall==1
прибавки buy и sell здесь не несут никакого смысла, а только путают, по цифровому значению понятно какой ордер открывать.
Учитесь сразу писать логически правильно, потом другим читать легче будет...
==================================================
20.12.2015, 12:08
Аватар для forextime
forextime forextime вне форума Активный участник
Регистрация: 07.02.2012 / Сообщений: 122
Поблагодарили 34 раз(а) / Репутация: 34
в таком случае надо писать: Signal==0, Signall==1
прибавки buy и sell здесь не несут никакого смысла, а только путают, по цифровому значению понятно какой ордер открывать.
Учитесь сразу писать логически правильно, потом другим читать легче будет...
Приму к сведению.
Я знаю, что прибавки buy и sell не несут никакого смысла.
Это я для себя помечаю, чтобы не запутаться, т.к. в советнике использую так же Signal_close, Signal_dop, Signal_lok...
21.12.2015, 03:27
Аватар для Abi
Abi Abi вне форума Элитный участник
Регистрация: 21.12.2010 / Адрес: Kz Казахстан / Сообщений: 970
Поблагодарили 1,697 раз(а) / Репутация: 1699
так и не написали - помогло али нет?
==================================================
21.12.2015, 10:19
Аватар для forextime
forextime forextime вне форума Активный участник
Регистрация: 07.02.2012 / Сообщений: 122
Поблагодарили 34 раз(а) / Репутация: 34
так и не написали - помогло али нет?
Signal== это вряд ли делу поможет))
Тут надо разбираться в дистанции.
Попробовал написать по хитрому для закрытия серии и работает только если >=, а мне надо <=, т.е. до дистанции 50
MathAbs((PriceCloseLastPos()-distPp*Point)>=(Bid+distPp*Point))

Причём для бай уже не работает условие
MathAbs((PriceCloseLastPos()+distPp*Point)>=(Ask-distPp*Point))
29.12.2015, 12:51
Аватар для bondv
bondv bondv вне форума Программист
Регистрация: 28.05.2009 / Сообщений: 656
Поблагодарили 1,024 раз(а) / Репутация: 1026
Signal== это вряд ли делу поможет))
Тут надо разбираться в дистанции.
Попробовал написать по хитрому для закрытия серии и работает только если >=, а мне надо <=, т.е. до дистанции 50
MathAbs((PriceCloseLastPos()-distPp*Point)>=(Bid+distPp*Point))

Причём для бай уже не работает условие
MathAbs((PriceCloseLastPos()+distPp*Point)>=(Ask-distPp*Point))
Здесь все в корне не правильно.
В первом посте было правильно для buy: MathAbs(Bid-PriceCloseLastPos())<=distPp*Point)
А для sell будет MathAbs(Ask-PriceCloseLastPos())<=distPp*Point)
Только это будет правильно работать, если Вы торгуете только на одном символе. Корректнее было бы, все-таки задавать аргументы в функции PriceCloseLastPos().
Помогу реализовать Ваши идеи для MT4, MT5
Спасибо можно "сказать" сюда: Яндекс - 4100144612271, WMZ - Z396265059022, WMR - R248495080679
29.12.2015, 15:31
Аватар для forextime
forextime forextime вне форума Активный участник
Регистрация: 07.02.2012 / Сообщений: 122
Поблагодарили 34 раз(а) / Репутация: 34
Здесь все в корне не правильно.
В первом посте было правильно для buy: MathAbs(Bid-PriceCloseLastPos())<=distPp*Point)
А для sell будет MathAbs(Ask-PriceCloseLastPos())<=distPp*Point)
Спасибо, с этим я уже разобрался))
Только это будет правильно работать, если Вы торгуете только на одном символе. Корректнее было бы, все-таки задавать аргументы в функции PriceCloseLastPos().
Здесь я тоже поправил: PriceCloseLastPos(Symbol(),-1,magic)
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 10:35. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO