Я и написал сразу же, что такое закрытие не рекомендуется. Используется недокументированная возможность. Но у любой открытой позиции время закрытие равно нулю, а цена закрытия будет равна текущей цене закрытия.
Кто-нибудь делал так, чтобы простой трейлинг-стоп двигал не уровень стопа, а отложенный ордер за ценой? Возможно такое сделать? Я чёт пытался-корячился, добился только того, что отложенник ёрзает за ценой туда-сюда, как больной...
Может возможно переделать функцию простейшего трейлинга, чтоб она ордерами занималась вместо стопов? Например этот:
//+----------------------------------------------------------------------------+//| Сопровождение позиции простым тралом |//| Параметры: |//| sy - наименование инструмента ("" - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void TrailingPositionsSimplTR(string sy="", int op=-1, int mn=-1) {
double p, pp;
int i, k=OrdersTotal();
if (sy=="" || sy=="0") sy=Symbol();
p=MarketInfo(sy, MODE_POINT);
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
pp=MarketInfo(sy, MODE_BID);
if (!ProfitTrailing || (pp-OrderOpenPrice())>TrailingStopBuy*p) {
if (OrderStopLoss()<pp-(TrailingStopBuy+TrailingStepSimplTR-1)*p) {
ModifyOrder(sy, -1, pp-TrailingStopBuy*p, 0, clModifyBuy);//
}
}
}
if (OrderType()==OP_SELL) {
pp=MarketInfo(sy, MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pp>TrailingStopSell*p) {
if (OrderStopLoss()>pp+(TrailingStopSell+TrailingStepSimplTR-1)*p || OrderStopLoss()==0) {
ModifyOrder(sy, -1, pp+TrailingStopSell*p, 0, clModifySell);
}
}
}
}
}
}
}
}
Print() округляет до 4-х знаков, для того что бы корректно вывести в консоль тип double (который возвращаетiOpen() с точностью в 5 знаков после запятой, в данном случае), нужно воспользоваться функцией DoubleToStr()
stringDoubleToStr( double value, int digits) Преобразование числового значения в текстовую строку, содержащую символьное представление числа в указанном формате точности.
Параметры:
value-Величина с плавающей точкой.
digits-Формат точности, число цифр после десятичной точки (громное спасибо.
artmedia70: Кто-нибудь делал так, чтобы простой трейлинг-стоп двигал не уровень стопа, а отложенный ордер за ценой? Возможно такое сделать? Я чёт пытался-корячился, добился только того, что отложенник ёрзает за ценой туда-сюда, как больной...
Может возможно переделать функцию простейшего трейлинга, чтоб она ордерами занималась вместо стопов? Например этот:
for (i =0;i<OrdersTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true&&OrderMagicNumber()==MAGICMA&&OrderSymbol()==Symbol())
{
if (MathAbs(funk-OrderOpenPrice())>Point)
{
if (OrderType()==OP_BUYSTOP||OrderType()==OP_BUYLIMIT&&MathAbs(Ask-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk+TakeProfiti*Point,Digits),0);
}
if (OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT&&MathAbs(Bid-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk-TakeProfiti*Point,Digits),0);
}
}
}
}
что-то типа этого, тут ордер тралиться по рассчитанному значению funk
А что с этом можно сделать?
перед открытием обнови данные, цену нормализуй
Я и написал сразу же, что такое закрытие не рекомендуется. Используется недокументированная возможность. Но у любой открытой позиции время закрытие равно нулю, а цена закрытия будет равна текущей цене закрытия.
после всех этих опытов это уже очевидно)
А что с этом можно сделать?
Смотрите внимательно на заданные вами цены при открытии позиции. Наверняка там... Ask с Bid`ом не перепутали?
так и есть. Спасибо.
так и есть. Спасибо.
Я чёт пытался-корячился, добился только того, что отложенник ёрзает за ценой туда-сюда, как больной...
Может возможно переделать функцию простейшего трейлинга, чтоб она ордерами занималась вместо стопов? Например этот:
Print() округляет до 4-х знаков, для того что бы корректно вывести в консоль тип double (который возвращает iOpen() с точностью в 5 знаков после запятой, в данном случае), нужно воспользоваться функцией DoubleToStr()
string DoubleToStr( double value, int digits)
Преобразование числового значения в текстовую строку, содержащую символьное представление числа в указанном формате точности.
Параметры:
value - Величина с плавающей точкой.
digits - Формат точности, число цифр после десятичной точки (громное спасибо.
спасибо большое .
Посмотри этот советник, там я это реализовал
http://www.rogersignals.com/ru/experts.php?a=Support_Resistance
Кто-нибудь делал так, чтобы простой трейлинг-стоп двигал не уровень стопа, а отложенный ордер за ценой? Возможно такое сделать?
Я чёт пытался-корячился, добился только того, что отложенник ёрзает за ценой туда-сюда, как больной...
Может возможно переделать функцию простейшего трейлинга, чтоб она ордерами занималась вместо стопов? Например этот:
Что то у вас все слишком сложно :))
Передаете в метод в качестве параметров меджик отложенника, и желаемый тралл.Вот мой код
Что то у вас все слишком сложно :))
Передаете в метод в качестве параметров меджик отложенника, и желаемый тралл.Вот мой код