Kashtan
Игорь

 
Уровень 19

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Советник для МТ5

Прошу написать советник для МТ5

Настройки:
1. Объём первого ордера
2. Цена первого ордера
3. Расстояние в пунктах от первого ордера до ТП
4. Количество ордеров
5. Шаг между ордерами
6. Коэфф. умножения

ТЗ
1. При запуске советника в соответствии с настройками ставится сетка лимитных ордеров на покупку. Предполагается, что уровень ТП остаётся прежним независимо от количества затронутых ордеров.
2. После того как все или часть активированных лимиток закроются по ТП, советник обновляет сетку в соответствии с первым пунктом одним из двух вариантов (в зависимости от того как легче программировать)
Вариант а) На место ранее затронутых отложек встают новые;
Вариант б) Незадействованные отложки (если такие остались) удаляются, и ставится новая сетка в начальном варианте.
То есть каждый раз до перезапуска с другими параметрами советник при закрытии общей позиции по ТП набранной из всех или части лимиток ранее установленной сетки должен строить аналогичную.
  • 0
  • Просмотров: 1920
  • 3 ноября 2021, 18:02
  • Kashtan
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
отремонтировать индикатор
Следующая запись в группе  
Канальный советник
03 ноября 2021
06 ноября 2021

Брокер для ваших роботов, 15 лет на рынке

Комментарии (12)

+
0
просто выставлять сетку когда все ордера закрылись, это еще можно.

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


а вот это точно не ко мне
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 3 ноября 2021, 18:13
+
0
Так я поэтому и предложил два варика) Значит исходя из того, что сделок открываемых не советникм не предполагается, наиболее просто по моему сделать так: если «что то» закрылось по ТП, советник удаляет существующие отложки в случае их наличия, и строит новую сетку!
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 3 ноября 2021, 18:31
+
0
ТЗ сводится к двум пунктам:
1. В соответствии с настройками сделать сетку.
2. Если есть ТП, то ставится новая сетка с предварительным удалением существующих отложек.
Редактирован: 3 ноября 2021, 18:35
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 3 ноября 2021, 18:34
+
0
на 10-е
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 4 ноября 2021, 07:54
комментарий был удален 2021-11-04 20:56:44 Kashtan

+
0
Ок, подождём!
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 4 ноября 2021, 20:57
+
0
Пока не начал делать, хорошо что опомнился по второму параметру) Лучше вместо цены установки первого ордера сделать расстояние в пунктах от текущей цены.
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 5 ноября 2021, 15:35
+
0
То есть при значении в 100П в момент установки если цена 1.45200, первый байлимит сетки встанет на 1.45100
Редактирован: 5 ноября 2021, 17:37
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 5 ноября 2021, 15:38
+
0
ТЗ сводится к двум пунктам:
1. В соответствии с настройками сделать сетку.
2. Если есть ТП, то ставится новая сетка с предварительным удалением существующих отложек.


вот я это все прописал:




//+------------------------------------------------------------------+
//|                                                        Limit.mq5 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade trade;

input double Lots       = 0.1;      // лот
input double KLot       = 2;        // увеличение лота
input double MaxLot     = 5;        // максимальный лот
input int StopLoss      = 0;        // лось
input int TakeProfit    = 300;      // язь
input int Count         = 3;        // число ордеров
input int Step          = 100;      // шаг
input int Type          = 2;        // 1-BuyLimit 2-SellLimit
input int Slip          = 5;        // реквот

int pos=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Take()
  {
   HistorySelect(0,TimeCurrent());

   ulong ticket=0;

   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         if(HistoryDealGetInteger(ticket,DEAL_REASON)==DEAL_REASON_TP)
            return(true);
        }
      break;
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      ulong ticket=OrderGetTicket(i);
      trade.OrderDelete(ticket);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(ENUM_ORDER_TYPE type)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
        {
         if(OrderGetInteger(ORDER_TYPE)==type)
            count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Лот                                                              |
//+------------------------------------------------------------------+
double Lot(ENUM_ORDER_TYPE type)
  {
   double lots=Lots;

   lots=NormalizeDouble(Lots*MathPow(KLot,CountOrders(type)),2);

   if(lots>MaxLot)
      lots=Lots;
   if(lots<0.1)
      lots=0.1;

   return(lots);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double pr=0,sl=0,tp=0;
   double Bid = SymbolInfoDouble(NULL,SYMBOL_BID);

   if(Take())
     {
      DelOrder();
     }

   if(OrdersTotal()<1 && PositionsTotal()<1)
     {
      if(Type==1)
         for(int i=1; i<=Count; i++)
           {
            pr=NormalizeDouble(Bid-Step*_Point*i,_Digits);

            if(StopLoss>0)
               sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);

            if(TakeProfit>0)
               tp=NormalizeDouble(Bid+TakeProfit*_Point,_Digits);

            trade.BuyLimit(Lot(ORDER_TYPE_BUY_LIMIT),pr,NULL,sl,tp,0,0,"");
           }

      if(Type==2)
         for(int i=1; i<=Count; i++)
           {
            pr=NormalizeDouble(Bid+Step*_Point*i,_Digits);

            if(StopLoss>0)
               sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits);

            if(TakeProfit>0)
               tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);

            trade.SellLimit(Lot(ORDER_TYPE_SELL_LIMIT),pr,NULL,sl,tp,0,0,"");
           }
     }

   Comment("\n Profit: ",AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_EQUITY),
           "\n Take: ",Take());
  }
//+------------------------------------------------------------------+



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

опишите дальнейший алгоритм действий.
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 8 ноября 2021, 22:40
+
0
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 9 ноября 2021, 17:24
+
0
Андрей извини заработался и сюда не заходил) Спасибо, проверю потом.
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 10 ноября 2021, 18:26
+
0
Уважаемый Каштан. Доброго. Интересно наблюдать за вашим фейерверком идей. Кажется мне, что вам не хватает терпения формализовать ТЗ. Перекрещусь. Но есть в ваших мыслях что-то от сушеного винограда (изюминка). Но из-за вашей спешки или лени (я вот лентяй неимоверный) Выхлоп около нулевой. В итоге можете разувериться в идее и спустить ее в унитаз. Извините за бестактность. Удачи.
avatar

  7  kvashnin007 Сообщений: 598 - Андрей

  • 16 марта 2024, 07:03

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий