shustrobotpro.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «shustrobotpro.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для платформы MetaTrader 4, реализующий три сеточные торговые стратегии (GridA, GridB, GridC). Каждая стратегия использует собственный технический индикатор для формирования сигналов и управляет сеткой позиций с независимыми параметрами усреднения и фиксации прибыли. Программа включает систему проверки лицензии, привязанную к номеру торгового счёта и сроку действия ключа. Отображается информационная панель с данными по аккаунту, просадке, балансу, марже и результатам каждой из трёх стратегий за текущий и предыдущий день. Реализованы механизмы управления рисками: остановка торговли при достижении заданного уровня маржи, ограничение общей просадки по эквити, а также ручной режим «сушки» для отключения открытия новых позиций. Торговые объёмы рассчитываются автоматически с учётом заданных ограничений.
Настройки программы
| Настройка | Описание |
|---|---|
| Стратегия GridA (GridA) | Стратегия GridA — Включает или отключает работу первой сеточной стратегии |
| Стратегия GridB (GridB) | Стратегия GridB — Включает или отключает работу второй сеточной стратегии |
| Стратегия GridC (GridC) | Стратегия GridC — Включает или отключает работу третьей сеточной стратегии |
| Мэджик номер GridA (MagicGridA) | Мэджик номер GridA — Уникальный идентификатор ордеров первой стратегии |
| Мэджик номер GridB (MagicGridB) | Мэджик номер GridB — Уникальный идентификатор ордеров второй стратегии |
| Мэджик номер GridC (MagicGridC) | Мэджик номер GridC — Уникальный идентификатор ордеров третьей стратегии |
| StopTradeAfterTP (StopTradeAfterTP) | Остановка после ТейкПрофита — Останавливать торговлю по стратегии после достижения тейкпрофита |
| Остановка торговли по уровню маржи,% (MinStopEquityLev) | Остановка торговли по уровню маржи,% — Процентный уровень маржи, при достижении которого торговля прекращается |
| UseEquityStop (UseEquityStop) | Использовать остановку по эквити — Включает аварийное закрытие всех позиций при превышении допустимой просадки |
| TotalEquityRisk (TotalEquityRisk) | Порог общей просадки по эквити — Максимально допустимая просадка по эквити в процентах перед закрытием всех позиций |
| Максимальный объем ордера (MaxLots) | Максимальный объем ордера — Ограничение максимального размера лота для открытых ордеров |
| АвтоММ (AutoMM) | АвтоММ — Параметр автоматического расчёта размера лота на основе баланса счёта |
| BaseLotLevel (BaseOrderLevel) | Базовый уровень лота — Базовый уровень для расчёта размера лота при усреднении |
| LotExponent (LotExponent) | Показатель лота — Множитель для расчёта размера лота при увеличении количества ордеров в сетке |
| ТейкПрофит GridA (TakeProfitA) | ТейкПрофит GridA — Уровень фиксации прибыли для первой стратегии |
| ТейкПрофит GridB (TakeProfitB) | ТейкПрофит GridB — Уровень фиксации прибыли для второй стратегии |
| ТейкПрофит GridC (TakeProfitC) | ТейкПрофит GridC — Уровень фиксации прибыли для третьей стратегии |
| Шаг усреднения GridA (Step_GridA) | Шаг усреднения GridA — Базовый шаг добавления следующего ордера в сетке первой стратегии |
| Шаг усреднения GridB (Step_GridB) | Шаг усреднения GridB — Базовый шаг добавления следующего ордера в сетке второй стратегии |
| Шаг усреднения GridC (Step_GridC) | Шаг усреднения GridC — Базовый шаг добавления следующего ордера в сетке третьей стратегии |
| Максимум ордеров GridA (MaxTrades_GridA) | Максимум ордеров GridA — Максимальное количество ордеров в сетке первой стратегии |
| Максимум ордеров GridB (MaxTrades_GridB) | Максимум ордеров GridB — Максимальное количество ордеров в сетке второй стратегии |
| Максимум ордеров GridC (MaxTrades_GridC) | Максимум ордеров GridC — Максимальное количество ордеров в сетке третьей стратегии |
| DistanceExponent (DistanceExponent) | Показатель расстояния — Множитель для расчёта расстояния между ордерами при увеличении их количества |
| BaseDistanceLevel (BaseDistanceOrder) | Базовый уровень расстояния — Количество ордеров, после которого расстояние между ними пересчитывается по формуле |
| TF для усреднения ордеров (tf) | TF для усреднения ордеров — Таймфрейм, на котором анализируются сигналы и усредняются ордера |
| Отображение инфо панели (chartDisplay) | Отображение инфо панели — Включает или отключает отображение информационной панели на графике |
| Угол расположения панели (panelCorner) | Угол расположения панели — Угол экрана, в котором будет размещена информационная панель |
| Размер текста (fontSize) | Размер текста — Размер шрифта текста в информационной панели |
| Показать логотип (showLogo) | Показать логотип — Включает или отключает отображение логотипа на графике |
Поиск по коду файла
#property version "1.00"
#property strict
#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Button.mqh>
#define VALID_KEY "Советник активирован."
#define EMPTY_KEY "Активируйте советник."
#define INVALID_KEY "Неверная лицензия."
#define EXPERIED "Время лицензии истекло."
#define LOGO_RESOURCE "::Images\\automoney\\logo.bmp"
#define PANEL_RESOURCE "::Images\\automoney\\panel.bmp"
#define LOGO_W 520
#define LOGO_H 533
#define PANEL_W 386
#define PANEL_H 195
#resource "\\Images\\automoney\\logo.bmp"
#resource "\\Images\\automoney\\panel.bmp"
#define LICENSE_NAME "automoney"
#define MAX_SYSTEMS 3
string sStrategy[MAX_SYSTEMS]= {"GridA","GridB","GridC"};
BLOCK(0,"----------- ОБЩИЕ НАСТРОЙКИ -----------");//.
B GridA=true;//Стратегия GridA
B GridB=true;//Стратегия GridB
B GridC=true;//Стратегия GridC
I MagicGridA=5551;//Мэджик номер GridA
I MagicGridB=5552;//Мэджик номер GridB
I MagicGridC=5553;//Мэджик номер GridC
B StopTradeAfterTP=false;//StopTradeAfterTP
D MinStopEquityLev=750;//Остановка торговли по уровню маржи,%
B UseEquityStop=false;//UseEquityStop
D TotalEquityRisk=20.0;//TotalEquityRisk
BLOCK(1,"----------- НАСТРОЙКИ ЛОТНОСТИ -----------");//.
D MaxLots=100.0;//Максимальный объем ордера
D AutoMM=8.0; //АвтоММ
I BaseOrderLevel=1;//BaseLotLevel
D LotExponent=1.525;//LotExponent
BLOCK(2,"----------- НАСТРОЙКИ ТЕЙКПРОФИТА -----------");//.
D TakeProfitA=17;//ТейкПрофит GridA
D TakeProfitB=17;//ТейкПрофит GridB
D TakeProfitC=17;//ТейкПрофит GridC
BLOCK(3,"----------- НАСТРОЙКИ СЕТКИ -----------");//.
D Step_GridA=18;//Шаг усреднения GridA
D Step_GridB=24;//Шаг усреднения GridB
D Step_GridC=18;//Шаг усреднения GridC
I MaxTrades_GridA=15;//Максимум ордеров GridA
I MaxTrades_GridB=15;//Максимум ордеров GridB
I MaxTrades_GridC=15;//Максимум ордеров GridC
D DistanceExponent=1.22;//DistanceExponent
I BaseDistanceOrder=5;//BaseDistanceLevel
TF tf=PERIOD_CURRENT;//TF для усреднения ордеров
BLOCK(4,"----------- НАСТРОЙКИ ИНФО ПАНЕЛИ -----------");//.
B chartDisplay=true;//Отображение инфо панели
input ENUM_BASE_CORNER panelCorner=CORNER_RIGHT_UPPER; //Угол расположения панели
I fontSize=13; //Размер текста
B showLogo=true;//Показать логотип
class CMyOptions: public COptions
{
public:
/*
B Grid=true;
I MagicGrid
D TakeProfit
I BaseOrderLevel
D LotExponent
D Step_Grid
I MaxTrades_Grid
D DistanceExponent
I BaseDistanceOrder
B StopTradeAfterTP
*/
bool Grid[];
int MagicGrid[];
double TakeProfit[];
int BaseOrderLevel[];
double LotExponent[];
double Step_Grid[];
int MaxTrades_Grid[];
double DistanceExponent[];
int BaseDistanceOrder[];
bool StopTradeAfterTP[];
virtual void OnInit()
{
// код доступен только после оплаты
}
void Add_Grid(bool bGrid)
{
Add(Grid,bGrid);
}
void Add_MagicGrid(int iMagicGrid)
{
Add(MagicGrid,iMagicGrid);
}
void Add_TakeProfit(double dTakeProfit)
{
Add(TakeProfit,dTakeProfit);
}
void Add_BaseOrderLevel(int iBaseOrderLevel)
{
Add(BaseOrderLevel,iBaseOrderLevel);
}
void Add_LotExponent(double dLotExponent)
{
Add(LotExponent,dLotExponent);
}
void Add_Step_Grid(double dStep_Grid)
{
Add(Step_Grid,dStep_Grid);
}
void Add_MaxTrades_Grid(int iMaxTrades_Grid)
{
Add(MaxTrades_Grid,iMaxTrades_Grid);
}
void Add_DistanceExponent(double dDistanceExponent)
{
Add(DistanceExponent,dDistanceExponent);
}
void Add_BaseDistanceOrder(int iBaseDistanceOrder)
{
Add(BaseDistanceOrder,iBaseDistanceOrder);
}
void Add_StopTradeAfterTP(bool bStopTradeAfterTP)
{
Add(StopTradeAfterTP,bStopTradeAfterTP);
}
};
class CMyOrders: public COrders
{
public:
};
class CMain: public CMainDefault
{
protected:
CMyOptions m_options;
CMyOrders m_main[MAX_SYSTEMS];
CNewBar m_bar;
CTimer m_timer;
CDrawPos m_panel;
SNButton m_dry;
bool bDrawPanel;
bool bDrawLogo;
public:
virtual int OnInit()
{
// код доступен только после оплаты
}
virtual void OnDeinit(const int reason)
{
m_timer.OnDeinit();
m_panel.OnDeinit();
m_dry.OnDeinit();
for(int i=0; i<MAX_SYSTEMS; i++)
{
m_main[i].OnDeinit();
}
HideTestIndicators(false);
}
void DrawPanel()
{
double dd=0;
double dBalance=AccountBalance();
if(dBalance>0)
dd=NormalizeDouble((AccountEquity()-dBalance)*100/dBalance,2);
m_panel.Text("name",StringFormat("Аккаунт %s",AccountName()));
m_panel.Text("account",StringFormat("Счет № %ld",AccountNumber()));
color ccolor=clrOrange;
if(dd<=-30)
ccolor=clrRed;
m_panel.Color("dd",ccolor);
m_panel.Text("dd",StringFormat("Просадка %.2f%%",dd));
m_panel.Text("balance",StringFormat("Баланс %.2f",dBalance));
m_panel.Text("equity",StringFormat("Эквити %.2f",AccountEquity()));
double dMarginLevel=AccountLevel();
ccolor=clrOrange;
if(MinStopEquityLev>0 && dMarginLevel<MinStopEquityLev && dMarginLevel!=0)
ccolor=clrRed;
m_panel.Color("margin",ccolor);
m_panel.Text("margin",StringFormat("Маржа %.2f%%",dMarginLevel));
int idir[MAX_SYSTEMS]= {-1,-1,-1},icount[MAX_SYSTEMS]= {0};
double dlots[MAX_SYSTEMS]= {0},dprofit[MAX_SYSTEMS]= {0};
double dalltotal=0,dalllast=0,dtotal=0,dlast=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS))
continue;
if(OrderSymbol()!=_Symbol)
continue;
if(OrderMagicNumber()==MagicGridA)
{
icount[0]++;
idir[0]=OrderType();
dlots[0]+=OrderLots();
dprofit[0]+=MacroProfit;
}
if(OrderMagicNumber()==MagicGridB)
{
icount[1]++;
idir[1]=OrderType();
dlots[1]+=OrderLots();
dprofit[1]+=MacroProfit;
}
if(OrderMagicNumber()==MagicGridC)
{
icount[2]++;
idir[2]=OrderType();
dlots[2]+=OrderLots();
dprofit[2]+=MacroProfit;
}
}
datetime tmDay=iTime(_Symbol,PERIOD_D1,0);
datetime tmLast=iTime(_Symbol,PERIOD_D1,1);
for(int i=0; i<OrdersHistoryTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
continue;
if(OrderType()>=2)
continue;
if(OrderCloseTime()>=tmDay && ::OrderCloseTime()<=tmDay+86400)
{
dalltotal+=MacroProfit;
if(OrderSymbol()==_Symbol)
dtotal+=MacroProfit;
}
if(OrderCloseTime()>=tmLast && OrderCloseTime()<tmDay)
{
dalllast+=MacroProfit;
if(OrderSymbol()==_Symbol)
dlast+=MacroProfit;
}
}
m_panel.Text("alltoday",StringFormat("Общий сегодня %.2f",dalltotal));
m_panel.Text("alllast",StringFormat("Общий вчера %.2f",dalllast));
m_panel.Text("today",StringFormat("Сегодня %.2f",dtotal));
m_panel.Text("last",StringFormat("Вчера %.2f",dlast));
string sdir[MAX_SYSTEMS]= {"","",""};
for(int i=0; i<MAX_SYSTEMS; i++)
{
if(idir[i]==OP_BUY)
sdir[i]="buy";
if(idir[i]==OP_SELL)
sdir[i]="sell";
}
if(icount[0]>0)
Показано первые 50% кода (символов: 15085)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.