Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1640

 
EVGENII SHELIPOV #:

Всем доброго времени суток!!!

Пишу код для советника для Трейлинг-Стоп групповых ордеров от средней цены сетки ордеров.

Ошибок в журнале нет но и трал не работает. Вот код прошу подсказать где ошибка. Спасибо!!!

Не там трал стоит!

Надо примерно так:

если цена безубытка+профит-трал!= ТейкПрофит запустить трал

А это откуда данные берет?

//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

OrderOpenPrice

Возвращает цену открытия выбранного ордера.

double  OrderOpenPrice();

Примечание:

Ордер должен быть предварительно выбран с помощью функции OrderSelect().

 
MakarFX #:

Спасибо.)

 
MakarFX #:

Не там трал стоит!

Надо примерно так:

если цена безубытка+профит-трал!= ТейкПрофит запустить трал

Макар доброго времени суток!!!!

Насколько я понял речь идет об  этой строчке. В данном случаи ордера на покупку:

if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)

Макар если можно объясните более детально

 
MakarFX #:

Не там трал стоит!

Надо примерно так:

если цена безубытка+профит-трал!= ТейкПрофит запустить трал

А это откуда данные берет?

Макар Вы сегодня говорите загадками 

Мажет быть другой вопрос почему без проверки производим расчёт цены безубытка????  

 
MakarFX #:

Не там трал стоит!

Надо примерно так:

если цена безубытка+профит-трал!= ТейкПрофит запустить трал

А это откуда данные берет?

OrderOpenPrice

Возвращает цену открытия выбранного ордера.

double  OrderOpenPrice();

Примечание:

Ордер должен быть предварительно выбран с помощью функции OrderSelect().

Да я про это подумал а Вы уже написали 

 
EVGENII SHELIPOV #:

Макар доброго времени суток!!!!

Насколько я понял речь идет об  этой строчке. В данном случаи ордера на покупку:

Макар если можно объясните более детально

У тебя есть группа ордеров, ты определяешь точку безубытка и создаешь линию, а это лучше сделать отдельной функцией!

    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }

Далее у тебя есть значение прибыли в пунктах, которое ты хочешь получить и добавляешь/отнимаешь к/от avg_price

    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);

А далее отдельная функция трала

для покупок: если БИД > avg_price = OrderModify()

для продаж: если АСК < avg_price = OrderModify()


К сожалению в твоем коде я вижу не логичные действия (субъективно)

 
EVGENII SHELIPOV #:

Да я про это подумал а Вы уже написали 

Раздели функции тебе будет легче ориентироваться

Вот пример OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      CloseOrder();
     }
   sl  = MathMax(Stoploss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   SL  = NormalizeDouble(sl*Point(),Digits);
   tp  = MathMax(Takeprofit, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   TP  = NormalizeDouble(tp*Point(),Digits);
   //---
   if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))
     {
      if(TradeSignal()>=0)
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL("lab_Торговля",0,0,0,clrRed,"Торговля запрещена"); return;} 
   else
     {DrawLABEL("lab_Торговля",0,0,0,clrLime,"Торговля разрешена");}
  }
//+------------------------------------------------------------------+

Как видишь здесь только обращения к функциям

 
MakarFX #:

Раздели функции тебе будет легче ориентироваться

Вот пример OnTick()

Как видишь здесь только обращения к функциям

Макар спасибо соберу мысли в кулак и буду думать в эту сторону

 
EVGENII SHELIPOV #:

Макар спасибо соберу мысли в кулак и буду думать в эту сторону

Обращайся)
 
Вопрос: Как вывести ордер из под опеки советника? Может уже есть какие-то скрины или функции самогО мт4, о коих я не в курсе. Просветите пожалуйста. На уровне пользователя, плз: изучать mql 3, 4, 5 и т. д. нет ни желания ни возможности.
Причина обращения: