← К каталогу
Исходный код · ID 3474

Ultra Magnat Clone

ultra magnat clone.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Это торговый советник для MetaTrader 4, написанный на MQL4. Он работает на одном символе и использует две независимые стратегии, каждая со своим набором параметров и магическим номером. Советник обрабатывает событие OnTick, а также имеет пустые обработчики OnTimer и OnChartEvent.

В основе лежит сигнальная логика, которая проверяет состояние рынка на новом баре. При появлении сигнала открывается рыночная позиция с заданным лотом и тейк-профитом. Далее советник может усреднять позиции: при неблагоприятном движении цены на заданное расстояние добавляется новая позиция с увеличенным лотом, а тейк-профит пересчитывается для всей серии. Точные условия и формулы не раскрываются.

Советник использует внешние include-файлы из библиотеки sovetnikovNET для работы с ордерами и временем. Настройки позволяют включать или отключать каждую стратегию, задавать часы торговли, начальный лот, множитель лота, тейк-профит, расстояние для усреднения и магические номера. Также задаются таймфрейм и комментарий к ордерам.

Настройки программы

НастройкаОписание
StartHour1 Час начала 1 — Час начала торговли для первой стратегии.
LastHour1 Час окончания 1 — Час окончания торговли для первой стратегии.
StartHour2 Час начала 2 — Час начала торговли для второй стратегии.
LastHour2 Час окончания 2 — Час окончания торговли для второй стратегии.
UseStrategy1 Использовать стратегию 1 — Включает или отключает первую стратегию.
UseStrategy2 Использовать стратегию 2 — Включает или отключает вторую стратегию.
Lots1 Начальный лот 1 — Начальный лот для первой стратегии.
Lots2 Начальный лот 2 — Начальный лот для второй стратегии.
LotExponent1 Множитель лота 1 — Множитель лота для первой стратегии при добавлении позиций.
LotExponent2 Множитель лота 2 — Множитель лота для второй стратегии при добавлении позиций.
TakeProfit1 Тейк-профит 1 — Уровень тейк-профита в пунктах для первой стратегии.
TakeProfit2 Тейк-профит 2 — Уровень тейк-профита в пунктах для второй стратегии.
Distance1 Расстояние усреднения 1 — Расстояние в пунктах для первой стратегии, при котором добавляется новая позиция при усреднении.
Distance2 Расстояние усреднения 2 — Расстояние в пунктах для второй стратегии, при котором добавляется новая позиция при усреднении.
MagicNumber1 Магический номер 1 — Уникальный идентификатор ордеров первой стратегии.
MagicNumber2 Магический номер 2 — Уникальный идентификатор ордеров второй стратегии.
tf Таймфрейм — Таймфрейм, на котором анализируется новый бар.
cmt Комментарий к ордерам — Комментарий, добавляемый к торговым ордерам.
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property strict

#define POINTS_NEW

#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>

enum enum_hour
  {
   t0000=0,//00:00
   t0100=1,//01:00
   t0200=2,//02:00
   t0300=3,//03:00
   t0400=4,//04:00
   t0500=5,//05:00
   t0600=6,//06:00
   t0700=7,//07:00
   t0800=8,//08:00
   t0900=9,//09:00
   t1000=10,//10:00
   t1100=11,//11:00
   t1200=12,//12:00
   t1300=13,//13:00
   t1400=14,//14:00
   t1500=15,//15:00
   t1600=16,//16:00
   t1700=17,//17:00
   t1800=18,//18:00
   t1900=19,//19:00
   t2000=20,//20:00
   t2100=21,//21:00
   t2200=22,//22:00
   t2300=23,//23:00
  };

GROUP(1,"Strategy_Parameters");//-----------------
input enum_hour StartHour1=t0700;
input enum_hour LastHour1=t1700;
input enum_hour StartHour2=t0000;
input enum_hour LastHour2=t2300;
B UseStrategy1=true;
B UseStrategy2=true;
GROUP(2,"Trade_Parameters");//-----------------
D Lots1=0.01;
D Lots2=0.01;
D LotExponent1=1.2;
D LotExponent2=1.2;
I TakeProfit1=50;
I TakeProfit2=150;
I Distance1=50;
I Distance2=50;
I MagicNumber1=111;
I MagicNumber2=222;

TF tf=PERIOD_CURRENT;
S cmt="Ultra Magnat Clone";

int slippage=0;

CGlobal m_global;

class CMyOrders: public COrders
  {
public:
   virtual bool      OnInitIndicators()
     {
      return true;
     }

   virtual bool      OnDeinitIndicators()
     {
      return true;
     }

   virtual int       Signal()
     {

      int ibar=iBAR(m_name,tf,1);

      if(ibar==1)
         return OP_BUY;
      if(ibar==-1)
         return OP_SELL;

      return -1;
     }

   virtual void              AverageOrders(bool isNew,double dTakeProfit, double dMinStep,double dMnLot,double dLots)
     {
      ulong ibuy=0,isell=0;
      getLastOrderTicket(ibuy,isell);

      double dlong=0,dshort=0;
      get_Average(dlong,dshort);

      if(dlong>0) m_drawvirtual.DrawHLine(0,"bu_buy",0,Time[1],dlong,1,STYLE_SOLID,clrGreen,false,false,"BU BUY",false);
      else m_drawvirtual.Delete(0,"bu_buy");

      if(dshort>0) m_drawvirtual.DrawHLine(0,"bu_sell",0,Time[1],dshort,1,STYLE_SOLID,clrGreen,false,false,"BU SELL",false);
      else m_drawvirtual.Delete(0,"bu_sell");

      if(ibuy>0)
        {
         if(this.OrderSelect(ibuy,true))
           {
            double dstep=this.OrderStep();
            double dlot=this.OrderLots();

            if(isNew && dstep<=-dMinStep && dMinStep>0)
              {
               double dnextlot=NLot(dlot*dMnLot);
               ulong t=OrderSend(OP_BUY,dnextlot,-1,0,0,NULL,true);
               DEBUG_OrderSend3(t);

              }
            SetAll_AverageTakeProfit(OP_BUY,dTakeProfit,0,true,false);

           }
        }

      if(isell>0)
        {
         if(this.OrderSelect(isell,true))
           {
            double dstep=this.OrderStep();
            double dlot=this.OrderLots();

            if(isNew && dstep<=-dMinStep && dMinStep>0)
              {

               double dnextlot=NLot(dlot*dMnLot);
               ulong t=OrderSend(OP_SELL,dnextlot,-1,0,0,NULL,true);
               DEBUG_OrderSend3(t);

              }
            SetAll_AverageTakeProfit(OP_SELL,dTakeProfit,0,true,false);

           }
        }
     }
  };

class CMain: public CMainDe

Показано первые 50% кода (символов: 4429)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
442,90₽ ≈ $5.41