немного переделал блок трала, но ничего не помогло. вот весь код блока:
//=======================================TrallingStop=======================================+ for ( int v = OrdersTotal() - 1; v >= 0; v -- ){ if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ //+=================================================================================+ ///+================================Обычный трал ====================================+ if (TralSimple){ if(OrderType() == OP_SELL){ ticket = OrderTicket(); double pr1=0, pr2=0,hl=Low[0],lvls; pr1 = ObjectGet(ticket,OBJPROP_PRICE1); pr2 = ObjectGet(ticket,OBJPROP_PRICE2); if (Low[0]<hl) hl=Low[0]; lvls = hl-pr2+pr1; if((OrderOpenPrice()-Ask) > (Point*TrailingStop)){ if((OrderStopLoss() > (lvls)) || (OrderStopLoss()==0)){ OrderModify(OrderTicket(),OrderOpenPrice(),lvls,OrderTakeProfit(),0,Red); } } } //+=================================================================================+ if(OrderType() == OP_BUY){ ticket = OrderTicket(); double pb1=0, pb2=0, hh=High[0],lvlb; pb1 = ObjectGet(ticket,OBJPROP_PRICE1); pb2 = ObjectGet(ticket,OBJPROP_PRICE2); if (High[0]>hh) hh=High[0]; lvlb = hh-pb2+pb1; if((Bid-OrderOpenPrice()) > (Point*TrailingStop)){ if(OrderStopLoss() < lvlb || (OrderStopLoss()==0)){ OrderModify(OrderTicket(),OrderOpenPrice(),lvlb,OrderTakeProfit(),0,Blue); } } } }
Ну что, никто с таким не сталкивался?
ObjectGet(ticket,OBJPROP_PRICE1)
Откуда ticket сюда берётся?
Вот тебе и ответ...
Может конечно и не правильно. Подскажите тогда как мне взять/выбрать тикет обрабатываемой позиции?
berezhnuy:
Может конечно и не правильно. Подскажите тогда как мне взять/выбрать тикет обрабатываемой позиции?
Может конечно и не правильно. Подскажите тогда как мне взять/выбрать тикет обрабатываемой позиции?
Я был не внимателен. Есть там всё что надо.
Попробуй перевести ticket из int в string
ObjectGet((string)ticket, OBJPROP_PRICE1);
Да и при создании объектов в качестве имени используешь переменную int
соответственно надо ещё посмотреть с каким именем линии создаются.
Вот как было:
Да и у меня тикет интом задается
int ticket=0,type,total;
Подправил как вы посоветовали, все отлично заработало. Благодарю за помощь.
Странно что не даёт ошибок при компиляции. Ну раз создаёт, пусть создаёт. Со временем придёшь к решению использовать переменные соответствующего типа.
Тогда пересчитай что получится в этой строке
lvls = hl-pr2+pr1;
Если для ордеров Buy может и пойдёт то что посчитается, то для ордеров Sell получится отрицательное число.
Так там же данные разные для Buy и для Sell. Ну а вообще да (hl1-pr2) в основном отрицательное значение имеет. Ну это простое расширение фибы 100%. разница точки 1 и 3 прибавляется к точке 2.
А ты проверял что получаешь на выходе от такой фибы? Хотя я второй раз не прав, где мне померещились скобки? Спрашиваю потому, что считать не охота.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени суток! Помогите разобрать. Желательно кодом или примером. Суть проблемы следующая:
Советник открывает некую позицию при наличие сигнала.
После открытия ордера создается графический объект, в качестве имени использую тикет, в качестве цен интересующие меня цены.
Трейлинг осуществил следующим образом:
Смысл такой реализации следующий: для ТС важны 2 контрольные точки при открытии и трейлинг должен осуществляться относительно данных этих 2х точек. Не судите строго мою реализацию.
Все работает как нужно. Но если есть одна позиция и открывается вторая, то трал забывает про ту которая открыта ранее...
Как мне решить эту проблемму.