wsb 3.2.1.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «wsb 3.2.1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торговый советник для платформы MetaTrader 4, реализующий мультисистемную стратегию управления ордерами. Советник использует три независимых торговых системы с различными таймфреймами и параметрами, каждая из которых ведёт собственную сетку ордеров с уникальными магическими числами.
Советник обрабатывает рыночные события через обработчик OnTick, управляет торговыми операциями с использованием встроенных функций MetaTrader, а также отображает информационную панель с данными о состоянии позиций, прибыли и настройках стратегий. Доступны функции управления рисками, включая стоп по эквити, трейлинг-стоп и ограничения по времени торгов.
Встроенная система проверки лицензии через ключ активации обеспечивает защиту продукта. Советник поддерживает управление лотами на основе баланса или эквити, а также позволяет задавать параметры продолжения торговли и максимальное количество ордеров.
Настройки программы
| Настройка | Описание |
|---|---|
| SelectTrade | Режим торговли: разрешение на открытие длинных, коротких или всех позиций |
| MaxOrdersCount | Общее максимальное количество ордеров по всем стратегиям на одном символе |
| chartDisplay | Включает или отключает отображение информационной панели на графике |
| chartDisplayPlace | Угол графика для размещения информационной панели |
| FontSize | Размер шрифта на информационной панели советника |
| MM | Включает или отключает систему управления размером лота на основе баланса или эквити |
| Divider | Делитель для расчёта размера лота на основе баланса или эквити при включённом управлении |
| Lots | Начальный размер лота для открытия ордеров |
| LotExponent | Множитель для увеличения размера лота при открытии последующих ордеров в сетке |
| MaxLots | Максимально допустимый размер лота при управлении размером позиции |
| ContinueTrading | Разрешает продолжение торговли при достижении максимального количества ордеров |
| Drawdoun1 | Максимальный допустимый уровень просадки в процентах для продолжения торговли |
| TakeProfit | Общий уровень тейк-профита для всех стратегий, задаваемый в пунктах буфера |
| UseEquityStop | Включает автоматическое закрытие всех ордеров при достижении лимита убытка по эквити |
| TotalEquityRisk | Процент эквити, при превышении которого срабатывает стоп по эквити |
| CloseFriday | Включает автоматическое закрытие всех ордеров в пятницу в заданном часе |
| CloseFridayHour | Час закрытия ордеров в пятницу (от 0 до 23) |
| OpenMondey | Включает ограничение открытия новых ордеров по времени в понедельник |
| OpenMondeyHour | Час начала торговли в понедельник (от 0 до 23) |
| ContinueTrading_System1 | Разрешает продолжение торговли для первой стратегии при достижении лимита ордеров |
| SelectSystem1_TF | Таймфрейм для первой торговой стратегии |
| MaxTrades_Hilo | Максимальное количество ордеров для первой стратегии |
| UseTrailingStop_Hilo | Включает или отключает трейлинг-стоп для первой стратегии |
| TrailStart_Hilo | Расстояние в пунктах для активации трейлинг-стопа первой стратегии |
| TrailStop_Hilo | Расстояние в пунктах от цены для фиксации трейлинг-стопа первой стратегии |
| PipStep_S1 | Шаг пипсов для расчёта точки буфера первой стратегии |
| PipStepX_S1 | Множитель шага пипсов для расчёта точки буфера первой стратегии |
| MagicNumber_1 | Магическое число для идентификации ордеров первой стратегии |
| ContinueTrading_System2 | Разрешает продолжение торговли для второй стратегии при достижении лимита ордеров |
| SelectSystem2_TF | Таймфрейм для второй торговой стратегии |
| MaxTrades_15 | Максимальное количество ордеров для второй стратегии |
| UseTrailingStop_15 | Включает или отключает трейлинг-стоп для второй стратегии |
| TrailStart_15 | Расстояние в пунктах для активации трейлинг-стопа второй стратегии |
| TrailStop_15 | Расстояние в пунктах от цены для фиксации трейлинг-стопа второй стратегии |
| PipStep_S2 | Шаг пипсов для расчёта точки буфера второй стратегии |
| PipStepX_S2 | Множитель шага пипсов для расчёта точки буфера второй стратегии |
| MagicNumber_2 | Магическое число для идентификации ордеров второй стратегии |
| ContinueTrading_System3 | Разрешает продолжение торговли для третьей стратегии при достижении лимита ордеров |
| SelectSystem3_TF | Таймфрейм для третьей торговой стратегии |
| MaxTrades_16 | Максимальное количество ордеров для третьей стратегии |
| UseTrailingStop_16 | Включает или отключает трейлинг-стоп для третьей стратегии |
| TrailStart_16 | Расстояние в пунктах для активации трейлинг-стопа третьей стратегии |
| TrailStop_16 | Расстояние в пунктах от цены для фиксации трейлинг-стопа третьей стратегии |
| PipStep_S3 | Шаг пипсов для расчёта точки буфера третьей стратегии |
| PipStepX_S3 | Множитель шага пипсов для расчёта точки буфера третьей стратегии |
| MagicNumber_3 | Магическое число для идентификации ордеров третьей стратегии |
Поиск по коду файла
#property strict
#property version "3.21"
/*
отличие этой версии от последующих
ТР ставиться общий ля всех сеток однонаправленных. для селл единый и для бай единый от их точек бу.
Profit-FX основан на этом
Так же сигнал берется со свечек текущих, а не рабочего тф.
*/
#ifdef __MQL5__
#include <sovetnikovGUI\mql4.mqh>
#endif
#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Bcrypt.mqh>
#include <Charts\Chart.mqh>
enum ENUM_MM_TYPE
{
MM_TYPE_BALANCE=1, //Balance
MM_TYPE_EQUITY=2, //Equity
};
#define LICENSE_OFF
#define VALID_KEY "Advisor activated."
#define EMPTY_KEY "Activate the key."
#define INVALID_KEY "Invalid key."
#define EXPERIED "Key expired."
#define LICENSE_NAME "3pr@2e~mh*zrx*5z}o~v7982?neqnok2"
#resource "\\Images\\wsb_reverse.bmp"
#define PANEL_RESOURCE "::Images\\wsb_reverse.bmp"
#define PANEL_W 400
#define PANEL_H 376
#define MAX_SYSTEMS 3
string sExpertName="Strategy";
BLOCK(1,"Main settings");//.
S KEY="***** ***"; //Key
input ENUM_TRADEMODE SelectTrade=TRADEMODE_ALL;//Trade Mode
I MaxOrdersCount=30; //Max orders count
B chartDisplay=true; //Panel show use
input ENUM_BASE_CORNER chartDisplayPlace=CORNER_LEFT_UPPER; //Display place corner
I FontSize=12; //Font Size
B MM=true; //MM
ENUM_MM_TYPE MM_Type=MM_TYPE_BALANCE;
D Divider=10; //Divider
D Lots=0.01; //Lots
D LotExponent=1.55; //Lot exponent
D MaxLots=100; //Max Lot
B ContinueTrading=true; //Continue trading
D Drawdoun1=40; //Drowdown
bool UsrednitbSei4as=false;//Use open average by ticks
D TakeProfit=50; //Take profit
B UseEquityStop=false; //Use equity stop
D TotalEquityRisk=20.0; //Total equity risk
SEP(2);//.
BLOCK(2,"Time settings");//.
B CloseFriday=false; //Use close friday
I CloseFridayHour=17; //Hour
B OpenMondey=false; //Use open monday
I OpenMondeyHour=0; //Hour
SEP(3);//.
BLOCK(3,"Strategy1 settings");//.
B ContinueTrading_System1=true; //Continue trading
TF SelectSystem1_TF=PERIOD_CURRENT; //TF
I MaxTrades_Hilo=15; //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; //Pip step multiplier
I MagicNumber_1=1000; //Magic
SEP(4);//.
BLOCK(4,"Strategy2 settings");//.
B ContinueTrading_System2=true; //Continue trading
TF SelectSystem2_TF=PERIOD_H1; //TF
I MaxTrades_15=15; //Max 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=30;//Pip step
D PipStepX_S2=1;//Pip step multiplier
I MagicNumber_2=2000;//Magic
SEP(5);//.
BLOCK(5,"Strategy3 settings");//.
B ContinueTrading_System3=true; //Continue trading
TF SelectSystem3_TF=PERIOD_M1; //TF
I MaxTrades_16=15; //Max 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=45;//Pip step
D PipStepX_S3=1;//Pip step multiplier
I MagicNumber_3=3000;//Magic
class CFullOrders: public COrders
{
public:
virtual bool CheckMagic(long iMagic)
{
return (iMagic==MagicNumber_1 || iMagic==MagicNumber_2 || iMagic==MagicNumber_3);
}
};
class CMyOrders: public COrders
{
public:
virtual bool CheckMagic(long iMagic)
{
return (iMagic==m_imagic);
}
#ifdef __MQL5__
virtual int UpdateProfits(double &dprofits,double &dlots,int &icount,int &iback)
{
SetExpertMagicNumber(m_imagic);//обновим меджик
__COPYRIGHT__
ArrayResize(m_orders,0);
m_all=0;
ArrayInitialize(orders,0);
int isize=0;
int itotal=::PositionsTotal();
m_total=itotal; //запомним для проверок кол-ва лимита ордеров
long iticket=0;
SNOrderInfo atmp;
for(int i=0; i<itotal; i++)
{
if(!(iticket=(long)::PositionGetTicket(i)))
continue; //если не выбирает, пропускаем
if(::OrderSelect(iticket))
continue;
atmp.getOrderByTicket(iticket,true);
if(CheckSymbol(atmp.OrderSymbol))
{
if(COrders::CheckMagic(atmp.OrderMagicNumber,atmp.OrderComment))
{
isize=ArraySize(m_orders);
if(ArrayResize(m_orders,isize+1)!=-1)
{
m_orders[isize]=atmp;
}
dprofits+=m_orders[isize].Profit;
dlots+=m_orders[isize].OrderLots; //считаем лот только стратегии без ордера бэк
orders[(int)atmp.OrderType]++; //увеличим счетчик
m_all++;
}
}
}
itotal=::OrdersTotal();
m_total+=itotal; //запомним для проверок кол-ва лимита ордеров
for(int i=0; i<itotal; i++)
{
if(!(iticket=(long)::OrderGetTicket(i)))
continue; //если не выбирает, пропускаем
atmp.getOrderByTicket(iticket,false);//перебираем только ордера
if(CheckSymbol(atmp.OrderSymbol))
{
if(COrders::CheckMagic(atmp.OrderMagicNumber,atmp.OrderComment))
{
isize=ArraySize(m_orders);
if(ArrayResize(m_orders,isize+1)!=-1)
{
m_orders[isize]=atmp;
}
if(m_orders[isize].OrderMagicNumber==m_imagic)
{
dlots+=m_orders[isize].OrderLots; //считаем лот только стратегии без ордера reverse
icount++; //считаем основные ордера в сетке
}
if(m_orders[isize].OrderMagicNumber==m_imagic+1)
{
iback++;
}
orders[(int)::OrderGetInteger(ORDER_TYPE)]++; //увеличим счетчик отложка
m_all++;
}
}
}
return m_all; //вернем кол-во ордеров в структуре
}
#else
virtual int UpdateProfits(double &dprofits,double &dlots,int &icount,int &iback)
{
__COPYRIGHT__
ArrayResize(m_orders,0);
m_all=0;
ArrayInitialize(orders,0);
int isize=0;
int itotal=::OrdersTotal();
dprofits=0;
dlots=0;
m_total=itotal; //запомним для проверок кол-ва лимита ордеров
for(int i=0; i<itotal; i++)
{
if(!::OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
continue; //если не выбирает, пропускаем
if(CheckSymbol(::OrderSymbol()))
{
if((!options_bSupportMaxLot && CheckMagic(::OrderMagicNumber(),::OrderComment())) || options_bSupportMaxLot)
{
isize=ArraySize(m_orders); //кол-во оредров в структуре
if(ArrayResize(m_orders,isize+1)!=-1)
{
if(m_orders[isize].getOrderByTicket(::OrderTicket())) //загрузим информацию по ордеру (грузим все ордера)
{
dprofits+=m_orders[isize].Profit;
if(m_orders[isize].OrderMagicNumber==m_imagic)
{
dlots+=m_orders[isize].OrderLots; //считаем лот только стратегии без ордера reverse
icount++; //считаем основные ордера в сетке
}
if(m_orders[isize].OrderMagicNumber==m_imagic+1)
{
iback++;
}
orders[m_orders[isize].OrderType]++; //увеличим счетчик
m_all++;
}
}
}
}
}
return m_all; //вернем кол-во ордеров в структуре
}
virtual long getOrderTicket(int itype=ALL,const int imode=MODE_TRADES,const datetime dttm=0,bool bHistoryOpenOrderTime=true)
{
__COPYRIGHT__
datetime dtm=0,dtm_open=0;
long iticket=-1;
int icount=0;
int flag;
icount=ArraySize(m_orders);
for(int i=icount-1; i>=0; i--)
{
if(m_orders[i].OrderCloseTime>0)
continue;
if(m_orders[i].OrderMagicNumber==m_imagic+1)
continue; //пропустим бэк ордера
dtm_open=m_orders[i].OrderOpenTime;
flag=toMyTypes(m_orders[i].OrderType)&itype;
if(m_orders[i].OrderType==toDefType(flag,(int)itype) && dtm_open>=dttm && (m_orders[i].OrderTicket>iticket || iticket==-1))
{
dtm=dtm_open;
iticket=m_orders[i].OrderTicket;
}
}
return iticket;
}
#endif
};
class CMyOptions: public COptions
{
public:
bool ContinueTrading_System[];
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_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];
CFullOrders m_full;
CNewBar m_bar[MAX_SYSTEMS],m_newday;
CMyOptions m_options;
CTime m_time;
CChart m_chart;
bool bDrawPanel;
CDraw m_draw;
CDrawPos 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 OnTiПоказано первые 50% кода (символов: 20650)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.