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

calm pips.mq4

Похожие материалы по тегам

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Calm Pips — советник для MetaTrader 4, который использует сигналы индикатора RSI в сочетании с расчётом шага на основе ATR для управления серией ордеров. При достижении определённых условий по прибыли советник увеличивает лот в серии с заданным множителем и открывает дополнительные позиции.

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

Обработка рыночных и торговых событий реализована через стандартные обработчики OnTick, OnInit и OnDeinit. Торговые операции выполняются с использованием встроенных торговых API MetaTrader 4.

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

НастройкаОписание
DryUse Сухой режим — при включении отключает отправку новых ордеров
Lots Начальный лот для открытия первой позиции
LotExponent Множитель для расчёта увеличения лота в серии ордеров
StepPeriod Период индикатора ATR, используемый для расчёта шага
StepDel Делитель для расчёта шага на основе значения ATR
StepMin Минимальное допустимое значение шага
StepPlusOrder Номер ордера в серии, начиная с которого добавляется дополнительный шаг
StepPlusValue Дополнительное значение шага, добавляемое после порога StepPlusOrder
slippage Допустимое проскальзывание в пунктах (0 — автоматическое)
TakeProfit Средний тейк-профит, устанавливаемый для серии ордеров
RsiMinimum Нижний порог RSI — уровень перепроданности
RsiMaximum Верхний порог RSI — уровень перекупленности
MaxTrades Максимальное количество ордеров в серии
StartProfit Минимальная прибыль одного ордера для закрытия всей серии
Magic Магический номер для идентификации ордеров советника
tf Рабочий таймфрейм для анализа и торговли
SizeFont Размер шрифта на панели статистики графика
Получить полный код

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

#property version   "1.00"
#property strict

#define LOGO_XY 100

#define POINTS_NEW

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

#define LICENSE_NAME "b!9dcp6yw{:3_jmkis8+f9h2j:vb<%:/"
#define LICENSE_FILE "spmcb"

#define VALID_KEY "Советник активен"
#define EMPTY_KEY "Необходимо активировать советник."
#define INVALID_KEY "Неверная лицензия."
#define EXPERIED "Лицензия истекла "

/*
в панели
Statistics: Balance; Equity; Drawdown; Прирост сегодня, Прирост на
этой неделе, Прирост в этом месяце, Прирост в этом году (на
английский правильно сами переведите). Суммарный лот,
Количество открытых сделок.
*/
B DryUse=false; //Сушка
D Lots=0.06;//Начальный лот
D LotExponent=1.2; //Множитель лота
I StepPeriod=24;//Период автошага
I StepDel=2;//Делитель для автошага
I StepMin=25;//Минимальный шаг
I StepPlusOrder=3;//С указанного шага увеличивать шаг
I StepPlusValue=15;//Дополнительный шаг
I slippage=0;//Допустимое проскальзывание (0 - авто)
D TakeProfit=15;//Тейк профит серии
I RsiMinimum=30;//RSI Перепроданность
I RsiMaximum=70;//RSI Перекупленность
I MaxTrades=15;//Максимальное количество ордеров в серии
D StartProfit=1;//Минимальный профит для одного ордера

#ifndef LICENSE_DEMO
I Magic=20200908;//Идентификатор ордеров
#else
int Magic=20200908; //скроем
#endif

TF tf=PERIOD_CURRENT;//Рабочий период

C ColorText=clrWhite; //Цвет текста
C ColorBackground=clrBlack; //Цвет заднего фона
I SizeFont=12; //Размер шрифта

string cmt="";

class CMyOrders: public COrders
  {
public:

  };

class CMain: public CMainDefault
  {
protected:
   CMyOrders         m_main;
   CNewBar           m_bar;
   CDrawPos          m_pos;
   CChart            m_chart;
public:
   virtual int       OnInit()
     {
      // код доступен только после оплаты
   }

   virtual void      OnDeinit(const int reason)
     {
      HideTestIndicators(false);
      m_chart.Detach();
      m_main.OnDeinit();
      m_pos.OnDeinit();
     }

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

      bool bcheck=checkAccount(sLicense,LICENSE_NAME);
      m_pos.DrawStatus("status",sLicense,bcheck);

      if(AccountBalance()==0)
         return;

      /*Statistics: Balance; Equity; Drawdown; Прирост сегодня, Прирост на
      этой неделе, Прирост в этом месяце, Прирост в этом году (на
      английский правильно сами переведите). Суммарный лот,
      Количество открытых сделок.*/
      m_main.Update(); //получим кол-во ордеров в структуре orders
      double dday,dweek,dmonth,dyear;
      GetProfitAll(_Symbol,Magic,dday,dweek,dmonth,dyear);
      double dd=m_main.getProfit(ALL);
      int ix=5,iy=20;
      string sval=GetAccountCurrency();
      double dlots[2];
      m_main.get_lots(dlots);

      string stext=StringFormat("Баланс: %.2f %s\nЭквити: %.2f %s\nПросадка: %.2f %%\nBuy ордеров: %d\nSell ордеров: %d\nОбъем buy: %.2f\nОбъем sell: %.2f\n\nПрибыль:\nДень: %.2f %s\nНеделя: %.2f %s\nМесяц: %.2f %s\nГод: %.2f %s",
                                AccountBalance(),sval,AccountEquity(),sval,NormalizeDouble(dd*100/AccountBalance(),2),m_main.orders[OP_BUY],m_main.orders[OP_SELL],dlots[0],dlots[1],dday,sval,dweek,sval,dmonth,sval,dyear,sval);
      m_pos.Comment(0,"right",stext,ix,iy,100,CORNER_RIGHT_UPPER,ColorText,ColorBackground,SizeFont);

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

      if(StepDel<=0.0)
         return;

      m_bar.Refresh();

      m_main.OnTick();

      int op=-1;

      op=signal();

      double datrD1=ND1((iATR(_Symbol,PERIOD_D1,StepPeriod,1)/m_main.p)/StepDel);

      double datr=ND1((iATR(_Symbol,tf,StepPeriod,0)/m_main.p)/StepDel);

      double dstep=NormalizeDouble(datr/StepDel,1);

      if(dstep>datrD1)
         dstep=datrD1;
      if(dstep<StepMin)
         dstep=StepMin;

      if(StartProfit!=0.0 && (m_main.orders[OP_BUY]==0 || m_main.orders[OP_SELL]==0) && m_main.m_all==1)
        {
         double dprofit=m_main.getProfit(ALL);

         if(dprofit>=StartProfit)
           {
            m_main.OrderCloseAll(ALL);
            return;
           }
        }

      double abuy[][2],asell[][2];

      m_main.getLastOrderTicket(abuy,asell);
      int ib=ArrayRange(abuy,0);
      int is=ArrayRange(asell,0);
      long tt=0;

      double dRSI1=iRSI(_Symbol,tf,14,PRICE_CLOSE,1);
      double dRSI2=iRSI(_Symbol,tf,14,PRICE_CLOSE,2);

      if(ib>0 && ib<MaxTrades && m_bar.isNewBar() && dRSI2<=RsiMinimum && dRSI1>RsiMinimum)
        {
         ArraySort(abuy,WHOLE_ARRAY,0,MODE_ASCEND);//самый нижний это последний в массиве

         long tlast=(long)abuy[0][1];

         double dnextstep=dstep;

         if(ib>=StepPlusOrder)
           {
            dnextstep+=StepPlusValue*(ib-StepPlusOrder+1);
           }

         if(m_main.OrderSelect(tlast))
           {
            double dpt=m_main.OrderProfitPoint();

            if(dpt<=-dnextstep)
              {
               double dnextlot=NLot(MathPow(LotExponent,ib)*Lots);
               tt=m_main.OrderSend(OP_BUY,dnextlot,-1,0,0,cmt);
               DEBUG_OrderSend(tt);
               ib++;
              }
           }

        }

      if(ib>1)
        {
         bool bModify=(m_main.IsNewDay() || tt>0);
         m_ma

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

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

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

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

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

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

Стоимость полного кода
811₽ ≈ $9.91