Марина
Марина личный блог
11 июля 2013, 13:14

Вопрос профессионалам MQL4. Почему не работает код?

#property copyright ""
#property link      ""
#property indicator_chart_window
int Orders;
//+------------------------------------------------------------------+
int start()
  {
   if (Orders>OrdersTotal()) AlertOrder();
   Orders=OrdersTotal();
   return(0);
  }
//+------------------------------------------------------------------+
void AlertOrder()
{
   string txt;
   double ocp;
   int i=OrdersHistoryTotal()-1;
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
   {                                    
      ocp=OrderClosePrice();
      if (ocp==OrderStopLoss()) txt=«SL»;
      if (ocp==OrderTakeProfit()) txt=«TP»;
      string lots=DoubleToStr(OrderLots(),2);
      SendNotification(«Ордер „+“(»+lots+")"+" закрыт по "+txt+" "+
      DoubleToStr(ocp,Digits)+" прибыль "+DoubleToStr(OrderProfit(),2));
     
}  }
//+------------------------------------------------------------------+
29 Комментариев
  • Тимофей Мартынов
    11 июля 2013, 13:56
    А чо каментов то нет?
  • dvoris
    11 июля 2013, 14:01
    кусок кода на главной, что-то новое)
  • huyax
    11 июля 2013, 14:11
    Orders всегда меньше или равно OrdersTotal()
  • ES1667
    11 июля 2013, 14:32
    А слипаж? Уровни OrderStopLoss и OrderTakeProfit не обязательно будут равны цене исполнения OrderClosePrice — СЛ и ТП это же стопы, а не лимитники, соответственно по маркету и исполняются. И, вообще, при такой схеме проверки могут быть коллизии. Я бы проверку делал через switch.
  • iRus
    11 июля 2013, 14:37
    из документации:
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
    {… }
    else {
    Print(GetLastError() );
    }

    да и в первый if-блок не мешает GetLastError пихнуть
    • ES1667
      11 июля 2013, 14:47
      huyax, iRus,
      да какая разница, что в обвязке наворочено, если сам алгоритм определения «а не стоп ли это сработал» — ущербный сам по себе?

      Да и идея сама — тоже ущербна. Правильно говорят — стопы придумали для дураков. Держать их в явном виде и показывать говнокухне (пусть даже и брокеру) — верх неосмотрительности. Держать их надо в следящем коде и крыть по маркету.
      • huyax
        11 июля 2013, 14:56
        ES1667, Тогда проскальзывания будут нефиговыми. Получишь не ту цену, которую хотел
        • ES1667
          11 июля 2013, 15:19
          huyax, извини, но чушь это.
          Кухня тебя и так обует и собъет твой стоп без слипажа и объяснений, а на бирже — уж на каком проводе сидишь. И, что значит «нефиговым»? В цифрах? Давай уж поконкретней будем, а?
          • karapuz
            11 июля 2013, 15:26
            ES1667, ну вот сегодня ночью все стопы по 6Е у всех везде сбили — и на глобексе, и в кухнях — везде — никакой разницы, что кухня, что биржа в этом плане нету)) а на некоторых площадках — например на фортс — всякие спайки идиотские еще и почаще, чем на ОТС бывают ))

            единственное что кухни бабло могут тупо не вернуть — это да, есть такое дело))
            • ES1667
              11 июля 2013, 15:35
              karapuz, ну это некорректно. Организованный движняк сравнивать со стоп-хантингом. Да и по вчерашнему дню — даже если предположить, что кухня тебя не фронтраннит, то потери твои будут на длину провода. Мой провод всегда был короче, чем время исполнения во всех кухнях, в которых я не торговал.
              • karapuz
                11 июля 2013, 15:37
                ES1667, да это и был стоп=хантинг, только чуть более масштабный… что касается времени (а точней качества) исполнения то в приличных ECN оно даже получше чем биржевое бывает… ))
                • ES1667
                  11 июля 2013, 15:56
                  karapuz, ага. А главный хантер — это Бен. Ну, бог с ними :)
                  Я про ECN ничего сказать не могу — с кухонного форекса сразу на Запад перебрался.

                  А по уму, кивания на скорость (я и себя имею ввиду) меня бесят аж веко дергается :) Вот смотри, я начал торговать в кухне, где исполнение было 2-5 сек, спайки, спреды, полный беспредел, вобщем, весь джентльменский набор. Щаз я сам на коротком проводе (не выдам :). Виртуалка в Чикаге — 10 мс. И еще что-то киваем на исполнение :) У меня полавтомат считает с точностью до 100 мксек. HFT-шники работают с десятками мксек. А мы — слипаж больше, слипаж меьше… Грустно все это… Торговать учиться надо :) Это я и себе в т.ч.
        • ES1667
          11 июля 2013, 15:32
          Макс, стоп! Где ты увидел мои «эмоции», где «психуешь»? Пруф фстудию.

          А приумерить — ты советуй… ну, своей поварешке ровнее щи наливать.

          «скрипт, который уведомляет меня о том, что сделка закрылась» — причем тут тогда ТП и ПЛ? Ты выложил один код, а имеешь ввиду и рассуждаешь совсем о другом…
            • ES1667
              11 июля 2013, 16:14
              Макс, да не парься ты. Показалось — так убедись в себе и выкати по полной. Я извинюсь, если что действительно не так.

              Поварешка — черпак. Все мимо миски норвовит хоть каплю, но пролить :)

              Я с торговал под двумя или тремя банками. Поверь — хлыщи еще те. В МТ все предусмотрено, чтобы обуть клиента.

              Политика держать стопы в ДЦ — порочна сама по себе, независимо от кода. Управляя ими самостоятельно ты можешь сам их и мониторить без этих костылей.

              А если ты опять меня не обманул и действительно речь ведешь ТОЛЬКО о ТП и СЛ, то вообще не связывайся с этим скриптом — смотри на знак OrderProfit и будет тебе щазтье :)
  • ELMARE
    11 июля 2013, 15:05
    #property copyright ""
    #property link ""
    #property indicator_chart_window
    int Orders=1;
    //+------------------------------------------------------------------+
    int start()
    {
    if (Orders>OrdersTotal()) AlertOrder();
    Orders=OrdersTotal();
    return(0);
    }
    //+------------------------------------------------------------------+
    void AlertOrder()
    {
    string txt;
    double ocp;
    int i=OrdersHistoryTotal()-1;
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
    {
    ocp=OrderClosePrice();
    if (ocp==OrderStopLoss()) txt=«SL»;
    if (ocp==OrderTakeProfit()) txt=«TP»;
    string lots=DoubleToStr(OrderLots(),2);
    string str=«Ордер » + DoubleToStr(OrderTicket(),0)+ " lots " + DoubleToStr(OrderLots(),2) + " закрыт по " + txt + " " +
    DoubleToStr(ocp,Digits) + " прибыль " + DoubleToStr(OrderProfit(),2);
    Comment(str);

    }
    }
    //+------------------------------------------------------------------+

    здесь для наглядности выводит в коммент можно отослать SendNotification
  • ES1667
    11 июля 2013, 15:20
    Чо за гад минусит от души всех подряд? Всех правлю, как могу.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн