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

cobra

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

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

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

О программе

cobra.mq4 — торговый советник для MetaTrader 4, использующий скользящую среднюю (SMA) на заданном таймфрейме для анализа рыночных условий. Советник открывает сделки BUY и SELL при пересечении цены с уровнем открытия бара относительно средней, с возможностью ограничения по времени торгов. При наличии открытых позиций система управляет выставлением дополнительных ордеров с шагом и множителем для тейк-профита, а также рассчитывает стоп-лосс с учётом риска по балансу.

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

Советник обрабатывает события OnTick, OnTimer и OnChartEvent, использует торговые функции для отправки ордеров и работает на платформе MetaTrader 4 с языком MQL4. Разработан DKeN (Alexandr Gavrilin), впоследствии передан Bot-Investing.

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

НастройкаОписание
TradeMode Режим торговли — Режим торговли: все направления, только длинные или только короткие позиции.
DinamicLot Динамический лот — Множитель динамического лота, определяющий размер позиции на основе свободного маржинального капитала при ненулевом значении.
Lots Лот — Начальный фиксированный размер лота для открытия сделок при отключённом динамическом лоте.
BalanceMode Режим баланса — Режим расчёта стоп-лосса и управления рисками: отключено, фиксированный баланс, защищённая сумма или процент от депозита.
Balance Баланс — Пороговое значение баланса, используемое для расчёта размера лота и защиты от убытков в зависимости от выбранного режима BalanceMode.
Greed Жадность — Множитель от шага между ордерами, используемый для расчёта расстояния до тейк-профита.
Step Шаг между ордерами — Шаг между ордерами в пунктах, используемый при выставлении дополнительных позиций и расчёте тейк-профита.
First Первый шаг от средней — Минимальное расстояние от средней цены открытия бара для выставления ордеров, измеряемое в пунктах.
TimeUse Использовать время — Логический переключатель, включающий или отключающий ограничение по времени торговли.
Time (TimeWork) Рабочее время — Текстовый параметр, задающий диапазоны рабочего времени в формате часов (например, 07:00-14:00), с возможностью указания нескольких диапазонов через запятую.
TF (tf) Таймфрейм средней — Таймфрейм, на котором рассчитывается скользящая средняя для анализа.
Period (ma_period) Период средней — Период скользящей средней, используемой для анализа ценовых данных.
Magic Магический номер — Магический номер, идентифицирующий ордера, отправленные данным советником.
Comment (scomment) Комментарий ордера — Комментарий, присваиваемый ордерам для их идентификации.
Panel show use (chartDisplay) Отображение панели — Логический переключатель, управляющий отображением информационной панели на графике.
Display place corner (chartDisplayPlace) Расположение панели — Угол графика, в котором размещается информационная панель.
Font Size (FontSize) Размер шрифта — Размер шрифта текста на информационной панели графика.
Получить полный код

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

#property version   "1.00"
#property strict
#define POINTS_NEW

#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Bcrypt.mqh>
#include <Charts\Chart.mqh>
#include <Controls\Picture.mqh>

#define VALID_KEY "Advisor activated."
#define EMPTY_KEY "Activate the key."
#define INVALID_KEY "Invalid key."
#define EXPERIED "Key expired."

#property icon  "\\Images\\haskybot\\icon.ico";
#resource "\\Images\\haskybot\\logo.bmp"
#resource "\\Images\\haskybot\\panel.bmp"
#define LOGO_RESOURCE "::Images\\haskybot\\logo.bmp"
#define PANEL_RESOURCE "::Images\\haskybot\\panel.bmp"

#define LOGO_W 520
#define LOGO_H 372

#define PANEL_W 359
#define PANEL_H 208

#define LICENSE_NAME "haskybot_key"

enum enum_balance_mode
  {
   balance_mode0, //Off.
   balance_mode1, //Conditional balance. A constant amount.
   balance_mode2, //Fixed balance. Protected amount.
   balance_mode3 //Percentage balance. Use % of the deposit.

  };

S KEY="***** ****** ***";

input ENUM_TRADEMODE TradeMode=TRADEMODE_ALL;

D DinamicLot = 0.0;
D Lots = 0.1;

input enum_balance_mode BalanceMode=balance_mode0;

D Balance = 0.0;

D Greed = 0.3;

I Step = 100;

I First = 60;

B TimeUse = false;
S TimeWork="07:00-14:00"; //Time

TF tf=PERIOD_H1; //TF

I ma_period = 144;//Period

I Magic = 5000;
S scomment=""; //Comment

B chartDisplay=true; //Panel show use
input ENUM_BASE_CORNER chartDisplayPlace=CORNER_RIGHT_UPPER; //Display place corner
I FontSize=12; //Font Size

int slippage=0;

class CMyOrders: public COrders
  {
public:

  };

class CMain: public CMainDefault
  {
protected:
   CMyOrders         m_main;
   CNewBar           m_bar;
   CTime             m_time;
   CTimer            m_timer;
   double            m_ma;

   bool              bDrawPanel;
   CPicture          m_logo;
   CDraw             m_draw;
   CDrawPos          m_pos;
   CChart            m_chart;

public:
   virtual int       OnInit()
     {
      // код доступен только после оплаты
   }

   virtual void      OnDeinit(const int reason)
     {
      m_timer.OnDeinit();
      m_chart.Detach();

      m_pos.OnDeinit();
      m_main.OnDeinit();
      m_draw.OnDeinit();
     }

   virtual void      OnTick()
     {
      // код доступен только после оплаты
   }

      string sLicense=VALID_KEY;

      bool bcheck=checkAccount(sLicense,LICENSE_NAME);

      static color clRoute=clrRed;
      if(bcheck)
        {
         clRoute=clrLime;
        }
      else
        {
         if(clRoute==clrLime)
            clRoute=clrRed;
        }

      m_draw.DrawLabel(0,"m_status",sLicense,clRoute,CORNER_LEFT_LOWER,5,20,12);

      if(clRoute==clrRed)
         clRoute=clrGold;
      else
         if(clRoute==clrGold)
            clRoute=clrRed;

      int itotal=m_main.getCount();

      if(!bcheck && itotal==0)
         return; //обязательно компилировать и накладывать MQL5 защиту!!!

      TESTER_EVENT_TIMER(m_timer);

      if(!IsWork())
         return; //отключена торговля

      m_bar.Refresh();

      m_main.OnTick();
      m_main.Update(); //получим кол-во ордеров в структуре orders

      if(m_main.m_all>0)
        {

         long t=m_main.getOrderTicket(BUY|SELL);
         long tnext=0;
         double dtake=0;

         if(m_main.OrderSelect(t))
           {

            double dpt=m_main.OrderStep();
            int itype=m_main.OrderType();
            dtake=m_main.OrderTakeProfit();
            double LotMultiplicator=Lots;

            if(itype==OP_BUY){
               LotMultiplicator=m_main.LoadParam("buylot",Lots);
            }

            if(itype==OP_SELL){
               LotMultiplicator=m_main.LoadParam("selllot",Lots);
            }

            if(dpt<=-Step && Step>0 && LotMultiplicator>0)
              {
               double dstop=m_main.OrderStopLoss();
               double dnextlot=NLot(m_main.OrderLots()+LotMultiplicator);
               tnext=m_main.OrderSend(itype,dnextlot,-1,dstop,0,scomment,0,clrNONE,false);
              }

            if(m_main.IsNewDay() || tnext>0 || dtake==0)
               m_main.SetAll_AverageTakeProfit(itype,Step*Greed,true);

           }

        }

      bool bTime=true;
      if(TimeUse)
         bTime=m_time.time_checking(TimeWork);

      if(m_main.m_all==0 && bTime)
        {

         if(m_bar.isNewBar() || m_ma==0.0)
            m_ma=iMA(_Symbol,tf,ma_period,0,MODE_SMA,PRICE_CLOSE,1);

         if(m_ma>0)
           {
            double dopen=iOpen(_Symbol,tf,0);
            if(Ask>=dopen+First*m_main.p && dopen+First*m_main.p>m_ma && (TradeMode==TRADEMODE_ALL || TradeMode==TRADEMODE_SHORT))
              {
               double dstoploss=0;
               double dtakeprofit=ND1(Step*Greed);

               double dlot=GetLot(dstoploss);
               if(dlot>0){
                  m_main.OrderSend(OP_SELL,dlot,-1,dstoploss,dtakeprofit,scomment,0,clrRed);
                  m_main.SaveParam("selllot",dlot);
               }   
              }
            if(Bid<=dopen-First*m_main.p && dopen-First*m_main.p<m_ma && (TradeMode==TRADEMODE_ALL || TradeMode==TRADEMODE_LONG)

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

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

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

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

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

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

Стоимость полного кода
1 092₽ ≈ $13.35