wsb.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «wsb.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для MetaTrader 4, одновременно управляющий тремя независимыми торговыми системами. Каждая система использует сеточную стратегию усреднения позиций с возможностью реверса, трейлинг-стопом и настройкой направления торговли. Советник генерирует сигналы на покупку и продажу с помощью пользовательского индикатора и применяет управление рисками через контроль просадки, стоп по эквити и автоматическое закрытие по прибыли.
Настройки программы
| Настройка | Описание |
|---|---|
| Panel show use (chartDisplay) | Отображение панели — Включает или отключает информационную панель на графике |
| Display place corner (chartDisplayPlace) | Расположение панели — Угол экрана, в котором будет размещена панель |
| Font Size (FontSize) | Размер шрифта — Размер шрифта для текста в панели |
| Max orders count (MaxOrdersCount) | Максимум ордеров — Общее ограничение на количество ордеров по всем стратегиям |
| Lots (Lots) | Базовый лот — Начальный размер лота для открытия позиций |
| MM (MM) | Управление рисками — Включает расчёт размера лота на основе баланса или эквити |
| MM_Type | Тип расчёта лота — Базовая величина для расчёта лота при включённом управлении рисками |
| Divider (Divider) | Делитель — Делитель, используемый при расчёте размера лота |
| Lot exponent (LotExponent) | Приращение лота — Множитель увеличения лота при добавлении позиции в сетку |
| Max Lots (MaxLots) | Максимальный лот — Максимально допустимый размер лота для позиции |
| Use TF by Max Orders (SelectChange_TF_Finish) | Таймфрейм проверки максимума ордеров — Таймфрейм, на котором проверяется условие по количеству ордеров |
| Max Orders (Change_TF_max_order) | Порог максимума ордеров — Количество ордеров, при достижении которого меняется логика открытия |
| Continue trading (ContinueTrading) | Продолжать торговлю — Разрешает открытие новых позиций при достижении лимита ордеров |
| Count for open Reverse (BackOrder) | Количество реверс-ордеров — Число позиций для открытия реверсной сделки |
| Drawdown for first (Drawdoun1) | Первая просадка — Порог первой просадки, при превышении которого меняется логика торговли |
| Drawdown stop all (Drawdoun2) | Вторая просадка — Порог второй просадки, при превышении которого останавливается торговля |
| Use open average by ticks (UsrednitbSei4as) | Усреднение по тикам — Использовать тиковый подсчёт для открытия усредняющих позиций |
| TF start (SelectOpenOrdersNorm_TF) | Таймфрейм нормального подсчёта — Таймфрейм для базового подсчёта ордеров |
| Count 1 (max_orders_strategy_1) | Максимум ордеров стратегии 1 — Лимит ордеров для первой торговой системы |
| TF1 (SelectOpenOrdersDrawdount11_TF) | Таймфрейм подсчёта стратегии 1 — Таймфрейм для подсчёта ордеров первой стратегии |
| Count 2 (max_orders_strategy_2) | Максимум ордеров стратегии 2 — Лимит ордеров для второй торговой системы |
| TF2 (SelectOpenOrdersDrawdount12_TF) | Таймфрейм подсчёта стратегии 2 — Таймфрейм для подсчёта ордеров второй стратегии |
| Total Count (max_orders_para) | Общий максимум ордеров — Общее ограничение на количество ордеров по всем стратегиям |
| TF3 (SelectOpenOrdersDrawdount2_TF) | Таймфрейм общего подсчёта — Таймфрейм для общего подсчёта ордеров |
| Take profit (TakeProfit) | Тейк-профит — Уровень фиксации прибыли в пунктах |
| Use close by profit (ProfitClose) | Закрытие по прибыли — Включает автоматическое закрытие всех позиций при достижении прибыли |
| Minimal count orders (ProfitCloseMaxOrder) | Минимум ордеров для закрытия — Минимальное количество ордеров для срабатывания закрытия по прибыли |
| Profit in valute (ProfitCloseStrategyDollar) | Прибыль для закрытия — Порог прибыли в валюте счёта для автоматического закрытия всех позиций |
| Use equity stop (UseEquityStop) | Стоп по эквити — Включает автоматическое закрытие при достижении лимита просадки по эквити |
| Total equity risk (TotalEquityRisk) | Максимальный риск эквити — Допустимая просадка эквити в процентах перед закрытием всех позиций |
| Use open monday (OpenMondey) | Открывать в понедельник — Разрешает открытие позиций только в понедельник |
| Hour (OpenMondeyHour) | Час открытия понедельника — Час начала торговой сессии в понедельник |
| Use close friday (CloseFriday) | Закрывать в пятницу — Автоматически закрывает все позиции в пятницу |
| Hour (CloseFridayHour) | Час закрытия пятницы — Час автоматического закрытия всех позиций в пятницу |
| Continue trading (ContinueTrading_System1) | Продолжать торговлю С1 — Разрешает торговлю для первой стратегии |
| Ignore indicators and TF for open first (Sei4as_S1) | Без индикаторов С1 — Игнорировать индикаторы и таймфрейм при первом открытии первой стратегии |
| Close All Orders (ClouseS1) | Закрыть все С1 — Принудительно закрывает все ордера первой стратегии |
| Select direct (SelectTradeS1) | Направление С1 — Направление торговли для первой стратегии |
| TF (SelectSystem1_TF) | Таймфрейм С1 — Таймфрейм для получения сигналов первой стратегии |
| Max Orders (MaxTrades_Hilo) | Макс. сделок С1 — Максимальное количество сделок для первой стратегии |
| Use trailing stop (UseTrailingStop_Hilo) | Трейл-стоп С1 — Включает трейлинг-стоп для первой стратегии |
| Trailing start (TrailStart_Hilo) | Старт трейла С1 — Расстояние в пунктах для начала трейлинг-стопа первой стратегии |
| Trailing stop (TrailStop_Hilo) | Стоп трейла С1 — Расстояние в пунктах для трейлинг-стопа первой стратегии |
| Pip step (PipStep_S1) | Шаг в пипах С1 — Базовый шаг в пипах для первой стратегии |
| Pip step multiplier (PipStepX_S1) | Множитель шага С1 — Множитель увеличения шага для первой стратегии |
| Magic (MagicNumber_1) | Магический номер С1 — Идентификатор ордеров первой стратегии |
| Continue trading (ContinueTrading_System2) | Продолжать торговлю С2 — Разрешает торговлю для второй стратегии |
| Ignore indicators and TF for open first (Sei4as_S2) | Без индикаторов С2 — Игнорировать индикаторы и таймфрейм при первом открытии второй стратегии |
| Close All (ClouseS2) | Закрыть все С2 — Принудительно закрывает все ордера второй стратегии |
| Select direct (SelectTradeS2) | Направление С2 — Направление торговли для второй стратегии |
| TF (SelectSystem2_TF) | Таймфрейм С2 — Таймфрейм для получения сигналов второй стратегии |
| Max Orders Orders (MaxTrades_15) | Макс. сделок С2 — Максимальное количество сделок для второй стратегии |
| Use Trailing stop (UseTrailingStop_15) | Трейл-стоп С2 — Включает трейлинг-стоп для второй стратегии |
| Trailing start (TrailStart_15) | Старт трейла С2 — Расстояние в пунктах для начала трейлинг-стопа второй стратегии |
| Trailing stop (TrailStop_15) | Стоп трейла С2 — Расстояние в пунктах для трейлинг-стопа второй стратегии |
| Pip step (PipStep_S2) | Шаг в пипах С2 — Базовый шаг в пипах для второй стратегии |
| Pip step multiplier (PipStepX_S2) | Множитель шага С2 — Множитель увеличения шага для второй стратегии |
| Magic (MagicNumber_2) | Магический номер С2 — Идентификатор ордеров второй стратегии |
| Continue trading (ContinueTrading_System3) | Продолжать торговлю С3 — Разрешает торговлю для третьей стратегии |
| Ignore indicators and TF for open first (Sei4as_S3) | Без индикаторов С3 — Игнорировать индикаторы и таймфрейм при первом открытии третьей стратегии |
| Close All (ClouseS3) | Закрыть все С3 — Принудительно закрывает все ордера третьей стратегии |
| Select direct (SelectTradeS3) | Направление С3 — Направление торговли для третьей стратегии |
| TF (SelectSystem3_TF) | Таймфрейм С3 — Таймфрейм для получения сигналов третьей стратегии |
| Max Orders Orders (MaxTrades_16) | Макс. сделок С3 — Максимальное количество сделок для третьей стратегии |
| Use Trailing stop (UseTrailingStop_16) | Трейл-стоп С3 — Включает трейлинг-стоп для третьей стратегии |
| Trailing start (TrailStart_16) | Старт трейла С3 — Расстояние в пунктах для начала трейлинг-стопа третьей стратегии |
| Trailing stop (TrailStop_16) | Стоп трейла С3 — Расстояние в пунктах для трейлинг-стопа третьей стратегии |
| Pip step (PipStep_S3) | Шаг в пипах С3 — Базовый шаг в пипах для третьей стратегии |
| Pip step multiplier (PipStepX_S3) | Множитель шага С3 — Множитель увеличения шага для третьей стратегии |
| Magic (MagicNumber_3) | Магический номер С3 — Идентификатор ордеров третьей стратегии |
Поиск по коду файла
#property version "1.00"
#property strict
#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>
#include <sovetnikovNET\Draw.mqh>
#include <sovetnikovNET\Bcrypt.mqh>
#include <Charts\Chart.mqh>
#include <Controls\Picture.mqh>
#resource "\\Indicators\\FTLM-STLMxAMm.ex4"
#resource "\\Images\\wsb_reverse.bmp"
#resource "\\Images\\wsb_logo.bmp"
#define LOGO_RESOURCE "::Images\\wsb_logo.bmp"
#define PANEL_RESOURCE "::Images\\wsb_reverse.bmp"
#define LOGO_W 1280
#define LOGO_H 719
#define PANEL_W 400
#define PANEL_H 376
class CMyPos: public CDrawPos
{
public:
virtual void MovePosition(int ix,int iy,int iwidth,int iheight,ENUM_BASE_CORNER ecorner)
{
option_x=ix;
option_y=iy;
option_corner=ecorner;
if(option_corner==CORNER_LEFT_LOWER)
{
option_x=ix;
option_y=ChartHeight()-iheight-iy-2;
}
else
if(option_corner==CORNER_RIGHT_LOWER)
{
option_x=ChartWidth()-iwidth-ix-2;
option_y=ChartHeight()-iheight-iy+18;
}
else
if(option_corner==CORNER_RIGHT_UPPER)
{
option_x=ChartWidth()-iwidth-ix-2;
option_y=iy;
}
}
};
enum ENUM_MM_TYPE
{
MM_TYPE_BALANCE=1, //Balance
MM_TYPE_EQUITY=2, //Equity
};
enum ENUM_SELECT_TRADE
{
SELECT_TRADE_ALL=7,//Long & Short
SELECT_TRADE_LONG=8, //Only Long
SELECT_TRADE_SHORT=9 //Only Short
};
#define MAX_SYSTEMS 3
string sExpertName="Strategy";
BLOCK(1,"Main settings");//.
B chartDisplay=true; //Panel show use
input ENUM_BASE_CORNER chartDisplayPlace=CORNER_LEFT_UPPER; //Display place corner
I FontSize=12; //Font Size
I MaxOrdersCount=30; //Max orders count
D Lots=0.01; //Lots
B MM=true; //MM
input ENUM_MM_TYPE MM_Type=MM_TYPE_BALANCE;
D Divider=10; //Divider
D LotExponent=1.55; //Lot exponent
D MaxLots=100; //Max Lots
TF SelectChange_TF_Finish=PERIOD_D1; //Use TF by Max Orders
I Change_TF_max_order=10; //Max Orders
B ContinueTrading=true; //Continue trading
I BackOrder=2; //Count for open Reverse
double BackOrder_Exponent=0.5; //Reverse Lot exponent
D Drawdoun1=10; //Drawdown for first
D Drawdoun2=25; //Drawdown stop all
B UsrednitbSei4as=false;//Use open average by ticks
TF SelectOpenOrdersNorm_TF=PERIOD_M5;//TF start
I max_orders_strategy_1=6;//Count 1
TF SelectOpenOrdersDrawdount11_TF=PERIOD_H1;//TF1
I max_orders_strategy_2=8;//Count 2
TF SelectOpenOrdersDrawdount12_TF=PERIOD_H4;//TF2
I max_orders_para=10;//Total Count
TF SelectOpenOrdersDrawdount2_TF=PERIOD_D1;//TF3
D TakeProfit=13; //Take profit
B ProfitClose=false;//Use close by profit
I ProfitCloseMaxOrder=5;//Minimal count orders
D ProfitCloseStrategyDollar=25.0;//Profit in valute
B UseEquityStop=false; //Use equity stop
D TotalEquityRisk=20.0; //Total equity risk
SEP(2);//.
BLOCK(2,"Time settings");//.
B OpenMondey=false; //Use open monday
I OpenMondeyHour=0; //Hour
B CloseFriday=false; //Use close friday
I CloseFridayHour=17; //Hour
SEP(3);//.
BLOCK(3,"Strategy1 settings");//.
B ContinueTrading_System1=true; //Continue trading
B Sei4as_S1=false; //Ignore indicators and TF for open first
B ClouseS1=false; //Close All Orders
input ENUM_SELECT_TRADE SelectTradeS1=SELECT_TRADE_ALL; //Select direct
TF SelectSystem1_TF=PERIOD_M5; //TF
I MaxTrades_Hilo=8; //Max Orders
B UseTrailingStop_Hilo=false; //Use trailing stop
D TrailStart_Hilo=10.00000000; //Trailing start
D TrailStop_Hilo=5.00000000; //Trailing stop
D PipStep_S1=15; //Pip step
D PipStepX_S1=1.1; //Pip step multiplier
I MagicNumber_1=1000; //Magic
SEP(4);//.
BLOCK(4,"Strategy2 settings");//.
B ContinueTrading_System2=true; //Continue trading
B Sei4as_S2=false; //Ignore indicators and TF for open first
B ClouseS2=false; //Close All
input ENUM_SELECT_TRADE SelectTradeS2=SELECT_TRADE_ALL; //Select direct
TF SelectSystem2_TF=PERIOD_M15; //TF
I MaxTrades_15=8; //Max Orders Orders
B UseTrailingStop_15=false; //Use Trailing stop
D TrailStart_15=10.00000000; //Trailing start
D TrailStop_15=5.00000000;//Trailing stop
D PipStep_S2=20;//Pip step
D PipStepX_S2=1.1;//Pip step multiplier
I MagicNumber_2=2000;//Magic
SEP(5);//.
BLOCK(5,"Strategy3 settings");//.
B ContinueTrading_System3=true; //Continue trading
B Sei4as_S3=false; //Ignore indicators and TF for open first
B ClouseS3=false; //Close All
input ENUM_SELECT_TRADE SelectTradeS3=SELECT_TRADE_ALL; //Select direct
TF SelectSystem3_TF=PERIOD_M30; //TF
I MaxTrades_16=8; //Max Orders Orders
B UseTrailingStop_16=false; //Use Trailing stop
D TrailStart_16=10.00000000; //Trailing start
D TrailStop_16=5.00000000;//Trailing stop
D PipStep_S3=20;//Pip step
D PipStepX_S3=1.1;//Pip step multiplier
I MagicNumber_3=3000;//Magic
class CMyOrders: public COrders
{
public:
virtual bool CheckMagic(long iMagic)
{
return (iMagic==m_imagic || iMagic==m_imagic+1);
}
virtual int UpdateProfits(double &dprofits,double &dlots,int &icount,int &iback)
{
__COPYRIGHT__
m_all=0;
dprofits=0;
dlots=0;
icount=0;
iback=0;
ArrayInitialize(orders,0);
int itype=-1;
int itotal=PositionsTotal();
for(int i=itotal-1; i>=0; i--)
{
if(SelectByIndex(i,true))
{
m_all++;
itype=m_position.PositionType();
orders[itype]++;
dprofits+=m_position.Profit()+m_position.Swap()+m_position.Commission();
if(m_position.Magic()==m_imagic)
{
dlots+=m_position.Volume(); //считаем лот только стратегии без ордера reverse
icount++; //считаем основные ордера в сетке
}
if(m_position.Magic()==m_imagic+1)
{
iback++;
}
Position();
}
}
return m_all; //вернем кол-во ордеров в структуре
}
virtual ulong getOrderTicket(int itype=ALL,const int imode=MODE_TRADES,const datetime dttm=0,bool bHistoryOpenOrderTime=true)
{
__COPYRIGHT__
datetime dtm=0,dtm_open=0;
ulong iticket=0;
int icount=0;
int flag;
icount=PositionsTotal();
for(int i=icount-1; i>=0; i--)
{
if(!SelectByIndex(i,true))
continue;
if(m_position.Magic()==m_imagic+1)
continue; //пропустим бэк ордера
dtm_open=m_position.Time();
flag=toMyTypes(m_position.PositionType())&itype;
if(m_position.PositionType()==toDefType(flag,(int)itype) && dtm_open>=dttm && (m_position.Ticket()>iticket || iticket==-1))
{
dtm=dtm_open;
iticket=m_position.Ticket();
}
}
return iticket;
}
};
class CMyOptions: public COptions
{
public:
bool ContinueTrading_System[];
bool Sei4as[]; //Ignore indicators and TF for open first
bool Clouse[]; //Close All
ENUM_SELECT_TRADE SelectTrade[]; //Select direct
ENUM_TIMEFRAMES SelectSystem_TF[];
int MaxTrades[];
bool UseTrailingStop[];
double TrailStart[];
double TrailStop[];
double PipStep[];
double PipStepX[];
int MagicNumber[];
virtual void OnInit()
{
// код доступен только после оплаты
}
void Add_ContinueTrading_System(bool bContinueTrading_System)
{
Add(ContinueTrading_System,bContinueTrading_System);
}
void Add_Sei4as(bool bSei4as)
{
Add(Sei4as,bSei4as);
}
void Add_Clouse(bool bClouse)
{
Add(Clouse,bClouse);
}
void Add_SelectTrade(ENUM_SELECT_TRADE eSelectTrade)
{
Add(SelectTrade,eSelectTrade);
}
void Add_SelectSystem_TF(ENUM_TIMEFRAMES eSelectSystem_TF)
{
Add(SelectSystem_TF,eSelectSystem_TF);
}
void Add_MaxTrades(int iMaxTrades)
{
Add(MaxTrades,iMaxTrades);
}
void Add_UseTrailingStop(bool bUseTrailingStop)
{
Add(UseTrailingStop,bUseTrailingStop);
}
void Add_TrailStart(double dTrailStart)
{
Add(TrailStart,dTrailStart);
}
void Add_TrailStop(double dTrailStop)
{
Add(TrailStop,dTrailStop);
}
void Add_PipStep(double dPipStep)
{
Add(PipStep,dPipStep);
}
void Add_PipStepX(double dPipStepX)
{
Add(PipStepX,dPipStepX);
}
void Add_MagicNumber(int iMagicNumber)
{
Add(MagicNumber,iMagicNumber);
}
};
class CMain: public CMainDefault
{
protected:
CMyOrders m_main[MAX_SYSTEMS];
CNewBar m_bar[MAX_SYSTEMS],m_day,m_newday,m_checkbar[4];
CMyOptions m_options;
CTime m_time;
CChart m_chart;
bool bDrawPanel;
CPicture m_logo;
CDraw m_draw;
CMyPos m_pos;
CTimer m_timer;
public:
virtual int OnInit()
{
// код доступен только после оплаты
}
virtual void OnDeinit(const int reason)
{
m_timer.OnDeinit();
m_chart.Detach();
for(int i=0; i<MAX_SYSTEMS; i++)
m_main[i].OnDeinit();
HideTestIndicators(false);
m_pos.OnDeinit();
m_draw.OnDeinit();
}
virtual void OnTick()
{
// код доступен только после оплаты
}
bool bcheck=true;
static color clRoute=clrRed;
if(bcheck)
{
clRoute=clrLime;
}
else
{
if(clRoute==clrLime)
clRoute=clrRed;
}
if(bDrawPanel)
{
if(clRoute==clrRed)
clRoute=clrGold;
else
if(clRoute==clrGold)
clRoute=clrRed;
}
double dProfits[MAX_SYSTEMS],dLot[MAX_SYSTEMS];
int iCount[MAX_SYSTEMS],iBack[MAX_SYSTEMS];
ArrayInitialize(dProfits,0);
ArrayInitialize(dLot,0);
ArrayInitialize(iCount,0);
ArrayInitialize(iBack,0);
for(int i=0; i<MAX_SYSTEMS; i++)
{
m_main[i].OnTick();
m_main[i].UpdateProfits(dProfits[i],dLot[i],iCount[i],iBack[i]); //получим кол-во ордеров в структуре orders
}
int itotal=0;
double dsummProfits=0;
int imaxorders=0;
for(int i=0; i<MAX_SYSTEMS; i++)
{
itotal+=iCount[i];
dsummProfits+=dProfits[i];
if(iCount[i]>imaxorders)
imaxorders=iCount[i];//найдем максимальное кол-во ордеров у всех сеток
}
double dd=0;
if(AccountBalance()>0)
dd=NormalizeDouble((AccountEquity()-AccountBalance())*100/AccountBalance(),3);
TESTER_EVENT_TIMER(m_timer);
if(!bcheck && itotal==0)
Показано первые 50% кода (символов: 22358)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.