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

Trader's Assistant 2

trader's assistant 2.mq5

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

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 общих тегов
Вы автор или правообладатель?

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

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

О программе

Trader's Assistant 2 — торговый советник для MetaTrader 5, реализующий две независимые стратегии на основе технических индикаторов Stochastic и RSI. Каждая стратегия работает с собственными параметрами лота, коэффициента усреднения, направления торговли и уровней тейк-профита. Советник открывает рыночные ордера при получении сигналов от индикаторов или при нажатии пользовательских кнопок BUY/SELL на графике.

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

В настройках задаётся таймфрейм работы, допустимое проскальзывание, магические номера для идентификации ордеров и комментарии. Советник использует классы торгового API MetaTrader 5 для управления позициями и ордерами.

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

НастройкаОписание
period_work Таймфрейм, на котором работает торговая система.
strategy1 Включение или выключение стратегии 1.
Lot Размер лота первого ордера в стратегии 1.
mult Коэффициент увеличения лота при усреднении в стратегии 1.
dist Направление торговли стратегии 1: только Buy, только Sell или оба направления.
step Шаг в пунктах для открытия усредняющих ордеров в стратегии 1.
tpFirst Тейк-профит первого ордера стратегии 1 в пунктах.
tpFromNull Тейк-профит сетевых ордеров стратегии 1 от уровня безубытка в пунктах.
comm1 Текстовый комментарий, присваиваемый ордерам стратегии 1.
strategy2 Включение или выключение стратегии 2.
Lot2 Размер лота первого ордера в стратегии 2.
mult2 Коэффициент увеличения лота при усреднении в стратегии 2.
dist2 Направление торговли стратегии 2: только Buy, только Sell или оба направления.
step2 Шаг в пунктах для открытия усредняющих ордеров в стратегии 2.
tpFirst2 Тейк-профит первого ордера стратегии 2 в пунктах.
tpFromNull2 Тейк-профит сетевых ордеров стратегии 2 от уровня безубытка в пунктах.
comm2 Текстовый комментарий, присваиваемый ордерам стратегии 2.
Slipage Допустимое проскальзывание в пунктах при совершении торговых операций.
Magic Магический номер для идентификации ордеров стратегии 1.
comm Переключатель отображения комментариев на графике.
Получить полный код

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

#property version   "1.00"

#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
#include<Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>

CPositionInfo  m_position;                   // trade position object
CSymbolInfo    m_symbol;                     // symbol info object
CHistoryOrderInfo m_history;                 //свойства ордеров из истории

COrderInfo order_info;
CTrade  trade;
CTrade  trade2;
enum dista
  {
   onlyBuy = 0,  //Только Buy
   onlySell = 1, //Только Sell
   BuySell = 2   //Buy & Sell

  };

input ENUM_TIMEFRAMES period_work = PERIOD_M30;   //Таймфрейм торговой системы

input group "Стратегия 1"
input bool strategy1 = true;//Стратегия 1 (вкл/откл)
input double Lot = 0.01;//Лот первого ордера
input double mult = 1.4;//Коэффициент усреднения
input dista dist = 2;//Направление торговли
input int step = 200;//Шаг усреднения
input int tpFirst = 100;//Тейк профит первого ордера
input int tpFromNull = 100;//Тейк профит сетки (от безубытка)
input string comm1 = "Стратегия 1";//Комментарий к ордерам

int              levelUp = 80;    //Верхний уровень Stochastic
int              levelDw = 20;    //Нижний уровень Stochastic
int              Kperiod = 5;     //K-период (количество баров для расчетов)
int              Dperiod = 3;     //D-период (период первичного сглаживания)
int              slowing = 3;     //Окончательное сглаживание
ENUM_MA_METHOD   ma_method = MODE_SMA; //Тип сглаживания
ENUM_STO_PRICE   price_field = STO_LOWHIGH;//Способ расчета стохастика

input group "Стратегия 2"
input bool strategy2 = true;//Стратегия 2 (вкл/откл)
input double Lot2 = 0.1;//Лот первого ордера
input double mult2 = 1.4;//Коэффициент усреднения
input dista dist2 = 2;//Направление торговли
input int step2 = 200;//Шаг усреднения
input int tpFirst2 = 200;//Тейк профит первого ордера
input int tpFromNull2 = 200;//Тейк профит сетки (от безубытка)
input string comm2 = "Стратегия 2";//Комментарий к ордерам

int                 ma_period = 14;  //Период усреднения RSI
ENUM_APPLIED_PRICE  applied_price = PRICE_CLOSE;//Тип цены RSI
int              levelUpRSI = 70;    //Верхний уровень RSI
int              levelDwRSI = 30;    //Нижний уровень RSI

input group "Magic and slipage"
input int Slipage = 30;//Проскальзывание
input int Magic = 98541074;
input bool comm = true;//Отображать коммент

string           InpName="But";            // Имя кнопки
ENUM_BASE_CORNER InpCorner=CORNER_RIGHT_UPPER; // Угол графика для привязки
string           InpFont="Arial";             // Шрифт
int              InpFontSize=12;              // Размер шрифта
color            InpColor=clrBlack;           // Цвет текста
color            InpBackColor=C'236,233,216'; // Цвет фона
color            InpBorderColor=clrNONE;      // Цвет границы
bool             InpState=false;              // Нажата/Отжата
bool             InpBack=false;               // Объект на заднем плане
bool             InpSelection=false;          // Выделить для перемещений
bool             InpHidden=true;              // Скрыт в списке объектов
long             InpZOrder=0;                 // Приоритет на нажатие мышью

int handleStoch, handleRSI;
double stochBuffer[], rsiBuffer[];
int LotDigitsPair = 0;

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

void OnDeinit(const int reason)
  {

   ObjectsDeleteAll(0,InpName);
   Comment("");
  }

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

bool f_ButtonPressured(string na)//Функция определяет находится ли указанная кнопка в нажатом состоянии. na - имя кнопки
  {

   bool bol_Y = ObjectGetInteger(0, na, OBJPROP_STATE, true);
   if(bol_Y)
      return(true);

   return(false);
  }

bool ButtonCreate(const long              chart_ID=0,               // ID графика
                  const string            name="Button",            // имя кнопки
                  const int               sub_window=0,             // номер подокна
                  const int               x=0,                      // координата по оси X
                  const int               y=0,                      // координата по оси Y
                  const int               width=50,                 // ширина кнопки
                  const int               height=18,                // высота кнопки
                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
                  const string            text="Button",            // текст
                  const string            font="Arial",             // шрифт
                  const int               font_size=10,             // размер шрифта
                  const color             clr=clrBlack,             // цвет текста
                  const color             back_clr=C'236,233,216',  // цвет фона
                  const color             border_clr=clrNONE,       // цвет границы
                  const bool              state=false,              // нажата/отжата
                  const bool              back=false,               // на заднем плане
                  const bool              selection=false,          // выделить для перемещений
                  const bool              hidden=true,              // скрыт в списке объектов
                  const long              z_order=0)                // приоритет на нажатие мышью
  {

   ResetLastError();

   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": не удалось создать кнопку! Код ошибки = ",GetLastError());
      return(false);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

   return(true);
  }

double ParamOpenLastPos(ENUM_ORDER_TYPE type,string simb, int mag, int param)
  {
   int count=0,pr=0;
   double p=0;
   datetime t=0;
   datetime time = -1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(order_info.SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         if((order_info.Symbol()== simb || simb =="") && order_info.Magic()==mag && (order_info.OrderType() ==type || type < 0))
           {
            if(t < order_info.TimeSetup())
              {
               if(param == 1)
                  p = order_info.PriceOpen();
               if(param == 2)
                  p = order_info.VolumeInitial();
               if(param == 3)
                  time = order_info.TimeSetup();
               t=order_info.TimeSetup();
              }
           }
        }
     }
   if(param == 3)
      return(iBarShift(_Symbol,PERIOD_CURRENT,time));

   return(p);
  }

bool DeleteOrders(ENUM_ORDER_TYPE type, string simbol, int magic)
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(order_info.SelectByIndex(i))
        {
         if((order_info.Symbol()==simbol || simbol =="") && order_info.Magic()==magic)
           {
            if(order_info.OrderType() ==type || type < 0)
              {
               if(trade.OrderDelete(order_info.Ticket()))
                  return(true);
              }
           }
        }
     }
   return(false);
  }

int CalculateOrders(ENUM_ORDER_TYPE type, string simbol, int magic)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(order_info.SelectByIndex(i))
        {
         if((order_info.Symbol()==simbol || simbol =="") && order_info.Magic()==magic)
           {
            if(order_info.OrderType() ==type || type < 0)
               count++;
           }
        }
     }
   return(count);
  }

void rynochnieOrderaRSI(double rsi1, double rsi2, bool buy, bool sell)
  {
   double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);

   if(buy)
     {
      if(dist == 0 || dist == 2)
      

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

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

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

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

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

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

Стоимость полного кода
1 694,20₽ ≈ $20.71