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

 
Vitaly Muzichenko #:

Можно так, без применения библиотек

Спасибо!

 
MakarFX #:
Сейчас рынок закрыт,  TimeCurrent() не меняется. Проверь на крипте, она работает в выходные

Зачем делаете зависимо от тиков? Кнопка не должна от них зависеть.

 

Здравствуйте.

Кто встречал у какого-либо брокера архив котировок М1 для ndx(мт4).Хочу протестировать некоторые стратегии, больше 2 месяцев ни у кого нет.

Так понимаю, объёмы большие, поэтому брокеры не дают скачивать. Только основные пары.

Может у кого в папках осталась, на сервере? Хотя бы за 1 год.

 
Вопрос решён.
 
Здравствуйте! Решил написать сюда...может кто откликнется!!!  В CodeBase...давно это было...был выложен индикатор..ни названия не помню..ни автора. Суть в нем такая бала...в ручную устанавливаем горизонтальные линии..и он показывает сколько раз цена пересекла эту линию в одном и другом направлении..и показывал статистику по этой цене...Перелапатил два раза 66 страниц но так и не нашел...может кто помнит или есть у кого!!! Плиз нужен очень!!!
 
Sinax #:
Здравствуйте! Решил написать сюда...может кто откликнется!!!  В CodeBase...давно это было...был выложен индикатор..ни названия не помню..ни автора. Суть в нем такая бала...в ручную устанавливаем горизонтальные линии..и он показывает сколько раз цена пересекла эту линию в одном и другом направлении..и показывал статистику по этой цене...Перелапатил два раза 66 страниц но так и не нашел...может кто помнит или есть у кого!!! Плиз нужен очень!!!
Не это:
?

 
Sergey Gridnev #:
Не это:
?

Нет не он...тот для МТ4 был..Спасибо)))

 

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

Подскажите пожалуйста пишу код сеточного советника принцип закрытия сетки простой все ордера с профитом на все ордера с убытком плюс профит от цены безубыточности. 

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

Вот часть кода для открытия групповых ордеров: 

if (CountTrade() < MaxOrders)                                                           

       {

           int order_type = FindLastOrderType();

           if (order_type == OP_BUY)

           { 

              price = FindLastOrderPrice(OP_BUY);  

              if(Ask<= price - (NormalizeDouble(ATR/ DivisorVolatility/Point, 0)*Point))

              {

                  lastlot = NormalizeDouble(Lots()*MathPow( MultiplierParameter, OrdersTotal()), 2);

                  ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Групповой ордер", Magic, 0, Blue);

                  if (ticket < 1)

                      Print ("Ошибка ордера на покупку");

                  ModifyOrders(OP_BUY);

              }

           }

             if (order_type == OP_SELL)

           { 

              price = FindLastOrderPrice(OP_SELL);  

              if(Bid>= price + (NormalizeDouble(ATR/ DivisorVolatility/Point, 0)*Point))

              {

                  lastlot = NormalizeDouble(Lots()*MathPow( MultiplierParameter, OrdersTotal()), 2);

                  ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Групповой ордер", Magic, 0, Red);

                  if (ticket < 1)

                      Print ("Ошибка ордера на продажу!");

                  ModifyOrders(OP_SELL);

              }

           }

         }

Вот часть кода куда приходит команда на модификацию ордеров.  Здесь я скрестил модификацию ордеров по принципу "Все ордера с прибылью и все ордера с убытком" и "Усреднение мин и макс ордеров".  

//+----------------------------------------------------------------------------+

//| Модификация ордеров                           |

//+----------------------------------------------------------------------------+

void ModifyOrders(int otype)

{

 double

   BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0, 

   SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0;


   int

   BuyPriceMaxTic = 0, BuyPriceMinTic = 0, SelPriceMaxTic = 0, SelPriceMinTic = 0;


   double

   op = 0, lt = 0, order_lots = 0;


   int

   tk = 0, b = 0, s = 0;

   price = 0;tp = 0;


   for(int i = OrdersTotal() - 1; i >= 0; i--)

      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

         if(OrderMagicNumber() == Magic)

            if(OrderSymbol() == Symbol() &&  OrderType() == otype)

              {

               op = NormalizeDouble(OrderOpenPrice(), Digits());

               lt = NormalizeDouble(OrderLots(), 2);

               tk = OrderTicket();

               if(otype == OP_BUY)

                 {

                  b++;

                  if(op > BuyPriceMax || BuyPriceMax == 0)

                    {

                     BuyPriceMax    = op;

                     BuyPriceMaxLot = lt;

                     BuyPriceMaxTic = tk;

                    }

                  if(op < BuyPriceMin || BuyPriceMin == 0)

                    {

                     BuyPriceMin    = op;

                     BuyPriceMinLot = lt;

                     BuyPriceMinTic = tk;

                    }

                 }

               

               if(otype == OP_SELL)

                 {

                  s++;

                  if(op > SelPriceMax || SelPriceMax == 0)

                    {

                     SelPriceMax    = op;

                     SelPriceMaxLot = lt;

                     SelPriceMaxTic = tk;

                    }

                  if(op < SelPriceMin || SelPriceMin == 0)

                    {

                     SelPriceMin    = op;

                     SelPriceMinLot = lt;

                     SelPriceMinTic = tk;

                    }

                 }

               if (otype == OP_BUY || otype == OP_SELL) 

                  {

                   price += OrderOpenPrice() * OrderLots();

                   order_lots += OrderLots();

                  }

              }

//*************************************************************//

double   AwerageBuyPrice = 0, AwerageSelPrice = 0, avg_price = 0;

      if(b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)

         AwerageBuyPrice = NormalizeDouble((BuyPriceMax*BuyPriceMaxLot + BuyPriceMin*BuyPriceMinLot)/

         (BuyPriceMaxLot + BuyPriceMinLot) + TakeProfitMinMaxOrder* Point(), Digits());

      if(s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)

         AwerageSelPrice = NormalizeDouble((SelPriceMax * SelPriceMaxLot + SelPriceMin * SelPriceMinLot)/ 

         (SelPriceMaxLot + SelPriceMinLot) - TakeProfitMinMaxOrder* Point(), Digits());

      if (Drawdown < DrawdownClosingMinMaxOrder) 

         avg_price = NormalizeDouble(price / order_lots, Digits);

//*************************************************************//

   for(int i = OrdersTotal() - 1; i >= 0; i--)

      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

         if(OrderMagicNumber() == Magic)

            if(OrderSymbol() == Symbol())

              {

               op  = NormalizeDouble(OrderOpenPrice(), Digits());

               tp = NormalizeDouble(OrderTakeProfit(), Digits());

               lt  = NormalizeDouble(OrderLots(), 2);

               tk  = OrderTicket();


                  if(otype == OP_BUY && b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)

                    {

                     if(tk == BuyPriceMaxTic || tk == BuyPriceMinTic)

                        if(Bid < AwerageBuyPrice && tp != AwerageBuyPrice)

                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageBuyPrice, 0, clrRed))

                              Print("OrderModify error #", GetLastError());


                     if(tk != BuyPriceMaxTic && tk != BuyPriceMinTic && tp != 0)

                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))

                           Print("OrderModify error #", GetLastError());

                    }

                  if(otype == OP_SELL && s >= 2  && Drawdown >= DrawdownClosingMinMaxOrder)

                    {

                     if(tk == SelPriceMaxTic || tk == SelPriceMinTic)

                        if(Ask > AwerageSelPrice && tp != AwerageSelPrice)

                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageSelPrice, 0, clrRed))

                              Print("OrderModify error #", GetLastError());


                     if(tk != SelPriceMaxTic && tk != SelPriceMinTic && tp != 0)

                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))

                           Print("OrderModify error #", GetLastError());

                    }

                 if (Drawdown < DrawdownClosingMinMaxOrder)    

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

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

                    {

                    if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))

                      Print("Ордера успешно модифицированы!");

                      else Print("Ошибка модификации ордеров!");

                    } 

             } 

}

Результат следующий модификация групповых ордеров до допустимого уровня просадки происходит штатно после  допустимого уровня просадки происходит усреднение и закрытие мин и макс происходит как задумано,

а вот дальше когда просадка уменьшилась новый тейкпрофит устанавливаться не в какую не хочет.

Вот журнал с кодами ошибок. 

Помогите устранить эту ошибку!!!

 
EVGENII SHELIPOV #:

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

Воспользуйся

 
MakarFX #:

Воспользуйся

А можно по подробнее?

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