Обсуждение статьи "Графический конструктор стратегий. Создание торговых роботов без программирования" - страница 5

 
Реter Konow:

1. Понял. С прокруткой, как и с ручкой перетаскивания окна. Нужно нажать раз и еще раз и держать. Тогда все работает.

5. Если окно ушло из области видимости, нужно воспользоваться главной полосой прокрутки. Тогда его можно вернуть в область видимости.

Спасибо за замечания!

1) Нужно просто нажать (1 раз не отпуская) и держать и тащить. Не раз, еще раз и еще раз :)

5) Схему можно перемещать и за нижнюю часть. Главный слой тоже можно двигать как карту, без полос прокрутки. Надо "взять" за пустое место и двигать.

Да, подсказки о резайзе и т.д я намерено не стал делать. Запоминается что и куда с первого раза, а они потом все время глаза мозолят, хотя уже и не нужны.

 
Andrey Barinov:

Спасибо за замечания!

1) Нужно просто нажать (1 раз не отпуская) и держать и тащить. Не раз, еще раз и еще раз :)

5) Схему можно перемещать и за нижнюю часть. Главный слой тоже можно двигать как карту, без полос прокрутки. Надо "взять" за пустое место и двигать.

Да, подсказки о резайзе и т.д я намерено не стал делать. Запоминается что и куда с первого раза, а они потом все время глаза мозолят, хотя уже и не нужны.

Понял. Спасибо. Действительно очень удобно. Только у меня все равно, с первого ухвата далеко тянуть не получается. Ни окно, ни прокрутку. Но если с повторным нажатием, тогда все работает.

Не знаю причину.

 
Лично мое субъективное мнение я против таких программ.  MQL - очень гибкий мощный язык. С помощью него можно реализовать абсолютно все, любые "извращенства" которые посетят голову трейдера. В программе же реализовано все в определенных рамках, который изначальна задал автор программы, да собрать можно робота, да возможно он будет работать. Но это я могу сделать и в MetaEditore и к тому же бесплатно. 
 
Даже не знаю что проще изучить MQL или этот конструктор... 
 
Ну так, побаловаться. Форекс не та сфера где такие приложеньки особо востребованы
 
Aleksey Vyazmikin:

Идея хорошая, выглядит интересно, но готовый советник уже какой то накрученный - требуется возможность построение с прокруткой вниз или в сторону.

Такой интерфейс нужен ME - записал в квадратик код и законнектил, удобно, особенно если можно иконки свои лепить и сохранять как заготовку - подумайте MQ.

Однако, нахожусь в замешательстве, в конце статьи, да и в самой статье, нет кода, а значит это реклама продукта. Что, теперь можно писать статьи о своём продукте, и они будут публиковаться, или же речь идет о закулисной договоренности для избранных?

Статьи о своем продукте давно возможно писать. Другое дело, MQ  могут не все статьи пропустить. А только те, которые посчитают достойными для публикации.

Автор статьи создал велилепный продукт. Но требует доработки. Желательно использование колеса мышки в правом и левом списках. Для прокрутки этих списков.

Чувствуется большой потенциал у этой разработки.


====

Что плохо. После удаления этой утилиты (советника) цветовая схема окна с графиком оказывается измененной. До установки утилиты цветовая схема была одна. После установки схема меняется. Это недостаток.

Необходимо сделать возвращение к цветовой схеме, которая была до установки утилиты, при удалении утилиты с графика. А лучше вообще цветовую схему не менять. Все манипуляции производить в дополнительном окне, сформированном поверх графика. У меня именно таким образом сделано при графическом создании паттернов. Поверх графика создается окно, в котором все рисуется. После удаления этого окна нет необходимости что-то исправлять на графике. Все, что создано в окне, сохраняется в файлах.

 
Andrey Barinov:

торговый класс выполнен в виде статического класса, и может быть использован отдельно от остального кода.

С интересом посмотрел торговый класс в сгенерированном исходнике (MQL5 >600Кб, EX5 > 250 Кб).

class cTrade final
  {
   //====================
private:
   //====================
   //===============
   //===============
   void              cTrade(void){}
   virtual void     ~cTrade(void){}
   //===============
   //===============
   static void       AddCurrentTrades(const cTradesFilter &filter,long &tickets[]);
   static void       AddCurrentOrders(const cPendingOrdersFilter &filter,long &tickets[]);
   static void       AddHistoryTrades(const cTradesFilter &filter,long &tickets[]);
   static void       AddHistoryOrders(const cPendingOrdersFilter &filter,long &tickets[]);
   //===============
   //===============
   static double     CheckLot(const string symbol,const double lots);
   static bool       CheckPlaced(const string symbol,const eTradeType type,const long magic);
   static bool       CheckMargin(const string symbol,const double volume,const eTradeType type,const double price);
   static bool       CheckOrderPrice(const string symbol,const ePendingOrderType type,const double price);
   static bool       CheckStops(const string symbol,const eTradeType type,const bool istrade,const double entrylevel,
                                const double stoploss,const double takeprofit);
   //===============
   //===============
   static int        GetMatch(const cTradeInfo &trades[],const int forindex,const long &matched[]);
   static void       TradesCloseBy(const long &tickets[],const bool slippageenabled,const long slippage,const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       ModifyTrade(const long ticket,const double newsl,const double newtp);
   static void       ModifyPendingOrder(const long ticket,const double newprice,const double newsl,const double newtp,const datetime newexpiration);
   //===============
   //===============
   static void       CloseBy(const long ticket1,const long ticket2,const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       BreakEven(const long ticket,const long belevel,const long beprofit);
   static void       TrailingStop(const long ticket,const long tslstart,const long tsldistance,const bool tsllevelenabled,const double tsllevel);
   //===============
   //===============
   static void       CalculateSLandTP(const string symbol,const eTradeType type,const double entrylevel,const double lots,
                                      const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                      const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                      const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                      double &sllevel,double &tplevel);
   //===============
   //===============
   static bool       CanTrade(void);
   //===============
   //===============
   //====================
public:
   //====================
   //===============
   //===============
   static long       ProfitPointsGet(const eTradeType type,const double openprice,const double closeprice,const string symbol);
   static double     CommissionGet(const long positionID);
   //===============
   //===============
   static void       GetFilteredTradesTickets(const cTradesFilter &filter,long &tickets[]);
   static void       GetFilteredPendingOrdersTickets(const cPendingOrdersFilter &filter,long &tickets[]);
   //===============
   //===============
   static double     GetLot(const string symbol,const long slpoints,const double moneyrisk);
   //===============
   //===============
   static void       OpenTrade(const string symbol,const eTradeType type,const double lots,const long magic,const string comment,
                               const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                               const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                               const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                               const bool slippageenabled,const long slippage,
                               const ENUM_ORDER_TYPE_FILLING filling);
   static void       PlacePendingOrder(const string symbol,const double price,const ePendingOrderType type,const double lots,
                                       const long magic,const string comment,
                                       const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                       const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                       const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                       const bool expirationenabled,const datetime expiration,
                                       const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       ModifyTrade(const long ticket,const bool tightenstopsonly,
                                 const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                 const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                 const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice);
   static void       ModifyTrades(const long &tickets[],const bool tightenstopsonly,
                                  const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                  const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                  const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice);
   //===============
   //===============
   static void       ModifyPendingOrder(const long ticket,const bool priceenabled,const double price,const bool tightenstopsonly,
                                        const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                        const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                        const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                        const bool expirationenabled,const datetime expiration);
   static void       ModifyPendingOrders(const long &tickets[],const bool priceenabled,const double price,const bool tightenstopsonly,
                                         const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                         const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                         const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                         const bool expirationenabled,const datetime expiration);
   //===============
   //===============
   static void       CloseTrade(const long ticket,
                                const bool slippageenabled,const long slippage,
                                const ENUM_ORDER_TYPE_FILLING filling);
   static void       CloseTrades(const long &tickets[],const bool closeby,
                                 const bool slippageenabled,const long slippage,
                                 const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       DeletePendingOrder(const long ticket);
   static void       DeletePendingOrders(const long &tickets[]);
   //===============
   //===============
   static void       BreakEven(const long &tickets[],const long belevel,const long beprofit);
   static void       TrailingStop(const long &tickets[],const long tslstart,const long tsldistance,const bool tsllevelenabled,const double tsllevel);
   //===============
   //===============
  };


Какая цель у этой строки?

static bool cTrade::CheckPlaced(const string symbol,const eTradeType type,const long magic)
  {
//===============
   const int ordersnumber=::OrdersTotal();
//===============

//===============
   for(int i=0;i<ordersnumber && !::IsStopped();i++)
     {
      //===============
      const long ticket=(long)::OrderGetTicket(i);
      //===============

      if(::OrderGetInteger(ORDER_POSITION_ID)>0)continue;
      //===============

Живой ордер с ненулевым ID - частично исполненный?


Не смог найти в коде вычисления Filling.

 
fxsaber:

С интересом посмотрел торговый класс в сгенерированном исходнике (MQL5 >600Кб, EX5 > 250 Кб).


Какая цель у этой строки?

Живой ордер с ненулевым ID - частично исполненный?


Не смог найти в коде вычисления Filling.

#1. Это по мотивам: #9

#2. Мне так и не удалось найти рабочего варианта вычисления filling, который бы работал на всех брокерах. Поэтому по старинке, предлагаю пользователю самостоятельно это дело контролировать, задавая в параметрах соответствующих элементов.

 
Eugeni Neumoin:

Статьи о своем продукте давно возможно писать. Другое дело, MQ  могут не все статьи пропустить. А только те, которые посчитают достойными для публикации.

Автор статьи создал велилепный продукт. Но требует доработки. Желательно использование колеса мышки в правом и левом списках. Для прокрутки этих списков.

Чувствуется большой потенциал у этой разработки.


====

Что плохо. После удаления этой утилиты (советника) цветовая схема окна с графиком оказывается измененной. До установки утилиты цветовая схема была одна. После установки схема меняется. Это недостаток.

Необходимо сделать возвращение к цветовой схеме, которая была до установки утилиты, при удалении утилиты с графика. А лучше вообще цветовую схему не менять. Все манипуляции производить в дополнительном окне, сформированном поверх графика. У меня именно таким образом сделано при графическом создании паттернов. Поверх графика создается окно, в котором все рисуется. После удаления этого окна нет необходимости что-то исправлять на графике. Все, что создано в окне, сохраняется в файлах.

Спасибо за комментарии!

В Вашем индикаторе панель занимает не все место графика, поэтому и схема чарта не меняется. У меня же панель на весь доступный размер, и если не менять схему графика то там будут неприятные артефакты. 

Подумаю над тем, чтобы возвращать все в исходное состояние при удалении утилиты с чарта.

Прокрутку колесиком добавлю в будущих версиях. Спасибо!

 
Andrey Barinov:

#1. Это по мотивам: #9

Спасибо, запамятовал.

#2. Мне так и не удалось найти рабочего варианта вычисления filling, который бы работал на всех брокерах. Поэтому по старинке, предлагаю пользователю самостоятельно это дело контролировать, задавая в параметрах соответствующих элементов.

Могли бы скинуть в ЛС название демо-сервера, где выложенный GetFilling не пашет?

Причина обращения: