WallStreetBot
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «wallstreetbot reverse.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
WallStreetBot Reverse — это торговый советник для MetaTrader 4, использующий одновременно три скальпинговые стратегии на основе трендового индикатора FTLM-STLM. Каждая стратегия работает на своём таймфрейме и имеет собственные параметры торговли.
Советник применяет принцип усреднения ордеров с возможностью открытия реверсивных позиций. Встроена система управления лотами, включая расчёт от депозита или эквити, а также ограничения по максимальному количеству ордеров и просадке.
Программа содержит информационную панель на графике, отображающую состояние позиций, прибыль и сигналы стратегий. Также реализованы защита по эквити, закрытие по достижении целевой прибыли, таймфреймные фильтры и ограничения по торговым сессиям (пятница/понедельник).
Настройки программы
| Настройка | Описание |
|---|---|
| t1 | Текстовый параметр-разделитель для группы настроек. |
| Lots | Начальный размер лота для торговли. |
| LotExponent | Множитель экспоненты для расчёта размера лота при усреднении. |
| MaxLots | Максимально допустимый размер лота. |
| MM | Логический переключатель, включающий автоматический расчёт размера лота на основе баланса или эквити. |
| MM_Type | Тип менеджмента лота: расчёт от депозита или от эквити. |
| MaxOrdersCount | Максимальное общее количество открытых ордеров по всем стратегиям. |
| SelectChange_TF_Finish | Таймфрейм, при достижении максимального количества открытых ордеров на котором происходит смена ТФ для новых сигналов. |
| Change_TF_max_order | Максимальное количество открытых ордеров, при достижении которого происходит смена таймфрейма для новых сигналов. |
| ContinueTrading | Логический переключатель, разрешающий продолжение торговли (функция «сушка») при определённой просадке. |
| Drawdoun1 | Процент просадки, при превышении которого запрещается открытие первых ордеров. |
| Drawdoun2 | Процент просадки, при превышении которого запрещается открытие всех усредняющих ордеров. |
| ReversOrder | Количество ордеров в сетке, при котором разрешается открытие реверсивного ордера. |
| UsrednitbSei4as | Логический переключатель, разрешающий открытие усредняющих ордеров без подтверждения таймфреймом принятия решения. |
| SelectOpenOrdersNorm_TF | Таймфрейм для проверки новых баров при открытии первого ордера. |
| max_orders_strategy_1 | Количество ордеров первого уровня усреднения для первой стратегии. |
| SelectOpenOrdersDrawdount11_TF | Таймфрейм для проверки новых баров при первом уровне усреднения первой стратегии. |
| max_orders_strategy_2 | Количество ордеров второго уровня усреднения для первой стратегии. |
| SelectOpenOrdersDrawdount12_TF | Таймфрейм для проверки новых баров при втором уровне усреднения первой стратегии. |
| max_orders_para | Максимальное количество ордеров, разрешённое для открытия по данной валютной паре. |
| SelectOpenOrdersDrawdount2_TF | Таймфрейм для проверки новых баров при достижении максимального количества ордеров по валютной паре. |
| Divider | Делитель, используемый при расчёте размера лота на основе баланса счёта. |
| BackgroundColor | Стиль оформления графика (чёрный или жёлтый). |
| chartDisplay | Логический переключатель, показывающий или скрывающий информационную панель на графике. |
| chartDisplayPlace | Положение информационной панели на графике (угол). |
| FontSize | Размер шрифта текста на информационной панели графика. |
| TakeProfit | Общий уровень тейк-профита в пунктах от средней цены открытых ордеров. |
| ProfitClose | Логический переключатель, включающий функцию закрытия всех ордеров всех стратегий при достижении общей прибыли. |
| ProfitCloseMaxOrder | Максимальное количество ордеров, при котором активируется функция закрытия по прибыли. |
| ProfitCloseStrategyDollar | Сумма прибыли в долларах, при достижении которой происходит закрытие всех ордеров. |
| UseEquityStop | Логический переключатель, включающий стоп-эквити — автоматическое закрытие всех ордеров при достижении заданной просадки. |
| TotalEquityRisk | Процент эквити-риска — порог просадки для срабатывания стопа по эквити. |
| t2 | Текстовый параметр-разделитель для группы настроек. |
| CloseFriday | Логический переключатель, включающий автоматическое закрытие всех ордеров в пятницу. |
| CloseFridayHour | Час, начиная с которого в пятницу происходит закрытие ордеров. |
| OpenMondey | Логический переключатель, разрешающий открытие ордеров в понедельник. |
| OpenMondeyHour | Час, начиная с которого в понедельник разрешено открытие ордеров. |
| t3 | Текстовый параметр-разделитель для группы настроек. |
| ContinueTrading_System1 | Логический переключатель, разрешающий торговлю для первой стратегии. |
| Sei4as_S1 | Логический переключатель — при включении первая стратегия открывает первый ордер без ожидания сигнала индикатора и подтверждения таймфрейма. |
| ClouseS1 | Логический переключатель — при включении принудительно закрывает все ордера сетки первой стратегии. |
| SelectTradeS1 | Направление торговли первой стратегии: Long, Short или оба. |
| SelectSystem1_TF | Таймфрейм для первого сигнала и усреднений первой стратегии. |
| MaxTrades_Hilo | Максимальное количество ордеров для первой стратегии. |
| UseTrailingStop_Hilo | Логический переключатель, включающий трейлинг-стоп для первой стратегии. |
| TrailStart_Hilo | Расстояние в пунктах для активации трейлинг-стопа первой стратегии. |
| TrailStop_Hilo | Расстояние в пунктах для фиксации трейлинг-стопа первой стратегии. |
| PipStep_S1 | Шаг лота в пунктах для усреднения первой стратегии. |
| PipStepX_S1 | Множитель шага лота (в пунктах) для расчёта следующего ордера первой стратегии. |
| MagicNumber_1 | Магический номер для идентификации ордеров первой стратегии. |
| t4 | Текстовый параметр-разделитель для группы настроек. |
| ContinueTrading_System2 | Логический переключатель, разрешающий торговлю для второй стратегии. |
| Sei4as_S2 | Логический переключатель — при включении вторая стратегия открывает первый ордер без ожидания сигнала индикатора и подтверждения таймфрейма. |
| ClouseS2 | Логический переключатель — при включении принудительно закрывает все ордера сетки второй стратегии. |
| SelectTradeS2 | Направление торговли второй стратегии: Long, Short или оба. |
| SelectSystem2_TF | Таймфрейм для первого сигнала и усреднений второй стратегии. |
| MaxTrades_15 | Максимальное количество ордеров для второй стратегии. |
| UseTrailingStop_15 | Логический переключатель, включающий трейлинг-стоп для второй стратегии. |
| TrailStart_15 | Расстояние в пунктах для активации трейлинг-стопа второй стратегии. |
| TrailStop_15 | Расстояние в пунктах для фиксации трейлинг-стопа второй стратегии. |
| PipStep_S2 | Шаг лота в пунктах для усреднения второй стратегии. |
| PipStepX_S2 | Множитель шага лота (в пунктах) для расчёта следующего ордера второй стратегии. |
| MagicNumber_2 | Магический номер для идентификации ордеров второй стратегии. |
| t5 | Текстовый параметр-разделитель для группы настроек. |
| ContinueTrading_System3 | Логический переключатель, разрешающий торговлю для третьей стратегии. |
| Sei4as_S3 | Логический переключатель — при включении третья стратегия открывает первый ордер без ожидания сигнала индикатора и подтверждения таймфрейма. |
| ClouseS3 | Логический переключатель — при включении принудительно закрывает все ордера сетки третьей стратегии. |
| SelectTradeS3 | Направление торговли третьей стратегии: Long, Short или оба. |
| SelectSystem3_TF | Таймфрейм для первого сигнала и усреднений третьей стратегии. |
| MaxTrades_16 | Максимальное количество ордеров для третьей стратегии. |
| UseTrailingStop_16 | Логический переключатель, включающий трейлинг-стоп для третьей стратегии. |
| TrailStart_16 | Расстояние в пунктах для активации трейлинг-стопа третьей стратегии. |
| TrailStop_16 | Расстояние в пунктах для фиксации трейлинг-стопа третьей стратегии. |
| PipStep_S3 | Шаг лота в пунктах для усреднения третьей стратегии. |
| PipStepX_S3 | Множитель шага лота (в пунктах) для расчёта следующего ордера третьей стратегии. |
| MagicNumber_3 | Магический номер для идентификации ордеров третьей стратегии. |
Поиск по коду файла
#property description "Официальная версия робота в торговле использует одновременно три стратегии,"
#property description "основанные на трендовом индикаторе FTLM-STLM"
#property description "Благодаря использованию трех разных скальпинговых стратегий основанных на принципе"
#property description "усреднения ордеров, советник успешно торгует и приносит прибыль."
#property description "Каждый ордер тщательно анализируется индикатором FTLM-STLM, после чего определяются точки"
#property description "входа каждой из трех стратегий для достижения максимального эффекта.";
#property strict
#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Button.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Bcrypt.mqh>
#include <Charts\Chart.mqh>
#include <Controls\Picture.mqh>
#define VALID_KEY "Робот активирован!"
#define EMPTY_KEY "Робот не активирован! Обратитесь к вышестоящему партнеру!"
#define INVALID_KEY "Неправильный ключ."
#define EXPERIED "Время работы закончилось."
#define LICENSE_EXT "wsbreverse"
#define LICENSE_NAME "$b|@kvksf16|}2@mf6euo#6@?1{0ovvi"
#resource "\\Indicators\\FTLM-STLMxAMm.ex4"
#define LOGO_W 696
#define LOGO_H 912
#define PANEL_W 373
#define PANEL_H 385
#define TEXT_COLOR C'204,146,3'
#define LINE_COLOR C'0,135,193'
enum ENUM_MM_TYPE
{
MM_TYPE_BALANCE=1, //Расчет лота от депозита
MM_TYPE_EQUITY=2, //Расчет лота от эквити
};
enum ENUM_SELECT_TRADE
{
SELECT_TRADE_ALL=7,//Long & Short
SELECT_TRADE_LONG=8, //Only Long
SELECT_TRADE_SHORT=9 //Only Short
};
enum enum_color_style
{
COLOR_STYLE_BLACK=1,//Черный
COLOR_STYLE_YELLOW=2 //Жёлтый
};
#define MAX_SYSTEMS 3
string sExpertName="Стратегия";
S t1="*";
D Lots=0.01; //Lots
D LotExponent=1.55; //LotExponent
D MaxLots=100; //MaxLots
B MM=true; //MM
input ENUM_MM_TYPE MM_Type=MM_TYPE_BALANCE;
I MaxOrdersCount=30;
TF SelectChange_TF_Finish=PERIOD_D1; //ТФ при макс.кол.откр.ордеров
I Change_TF_max_order=10; //Макс.кол.откр.ордеров для смены ТФ
B ContinueTrading=true; //ContinueTrading (сушка)
D Drawdoun1=10; //Просадка для запрета первых ордеров
D Drawdoun2=25; //Просадка для запрета всех ордеров
I ReversOrder=2; //Кол-во ордеров для открытия реверсов
double BackOrder_Exponent=0.5; //множитель реверса
B UsrednitbSei4as=false;//Откр. усредняющих без ТФ прин. реш.
TF SelectOpenOrdersNorm_TF=PERIOD_M5;//TF старт
I max_orders_strategy_1=6;//Кол-во 1
TF SelectOpenOrdersDrawdount11_TF=PERIOD_H1;//TF1
I max_orders_strategy_2=8;//Кол-во 2
TF SelectOpenOrdersDrawdount12_TF=PERIOD_H4;//TF2
I max_orders_para=10;//Кол-во ордеров валютной пары
TF SelectOpenOrdersDrawdount2_TF=PERIOD_D1;//TF3
D Divider=10; //Divider
input enum_color_style BackgroundColor=COLOR_STYLE_BLACK;//Стиль графика
B chartDisplay=true; //Показывать инфо-панель
input ENUM_BASE_CORNER chartDisplayPlace=CORNER_LEFT_UPPER; //Положение инфо-панели
I FontSize=8; //Размер шрифта
D TakeProfit=13; //TakeProfit
B ProfitClose=false;//Включение функции закрытия всех ордеров всех стратегий по общей прибыли
I ProfitCloseMaxOrder=5;//Макс. кол-о ордеров при которых будет включаться функция
D ProfitCloseStrategyDollar=25.0;//Прибыль при достижении которой будут закрываться все ордера
B UseEquityStop=false; //UseEquityStop
D TotalEquityRisk=20.0; //TotalEquityRisk
SEP(2);//.
S t2="Временные настройки";
B CloseFriday=false; //CloseFriday
I CloseFridayHour=17; //CloseFridayHour
B OpenMondey=false; //OpenMondey
I OpenMondeyHour=0; //OpenMondeyHour
SEP(3);//.
S t3="Настройки для стратегии №1";
B ContinueTrading_System1=true;
B Sei4as_S1=false; //Откр. первый сейчас без инд. и ТФ прин. реш.
B ClouseS1=false; //Закрыть сетку ордеров
input ENUM_SELECT_TRADE SelectTradeS1=SELECT_TRADE_ALL; //Направление торговли
TF SelectSystem1_TF=PERIOD_M5; //ТаймФрейм
I MaxTrades_Hilo=8;
B UseTrailingStop_Hilo=false;
D TrailStart_Hilo=10.00000000;
D TrailStop_Hilo=5.00000000;
D PipStep_S1=15;
D PipStepX_S1=1.1;
I MagicNumber_1=1000;
SEP(4);//.
S t4="Настройки для стратегии №2";
B ContinueTrading_System2=true;
B Sei4as_S2=false; //Откр. первый сейчас без инд. и ТФ прин. реш.
B ClouseS2=false; //Закрыть сетку ордеров
input ENUM_SELECT_TRADE SelectTradeS2=SELECT_TRADE_ALL; //Направление торговли
TF SelectSystem2_TF=PERIOD_M15; //ТаймФрейм
I MaxTrades_15=8;
B UseTrailingStop_15=false;
D TrailStart_15=10.00000000;
D TrailStop_15=5.00000000;
D PipStep_S2=20;
D PipStepX_S2=1.1;
I MagicNumber_2=2000;
SEP(5);//.
S t5="Настройки для стратегии №3";
B ContinueTrading_System3=true;
B Sei4as_S3=false; //Откр. первый сейчас без инд. и ТФ прин. реш.
B ClouseS3=false; //Закрыть сетку ордеров
input ENUM_SELECT_TRADE SelectTradeS3=SELECT_TRADE_ALL; //Направление торговли
TF SelectSystem3_TF=PERIOD_M30; //ТфамФрейм
I MaxTrades_16=8;
B UseTrailingStop_16=false;
D TrailStart_16=10.00000000;
D TrailStop_16=5.00000000;
D PipStep_S3=20;
D PipStepX_S3=1.1;
I MagicNumber_3=3000;
class CMyOrders: public COrders
{
public:
virtual bool CheckMagic(long iMagic)
{
return (iMagic==m_imagic || iMagic==m_imagic+1);
}
/* virtual bool Check(string symbol,long iMagic)
{
if((m_name==NULL || symbol==m_name) && (iMagic==m_imagic || iMagic==m_imagic+1))
return true;
return false;
}
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.Swap();
if(m_position.Magic()==m_imagic)
{
dlots+=m_position.Volume(); //считаем лот только стратегии без ордера reverse
icount++; //считаем основные ордера в сетке
}
if(m_position.Magic()==m_imagic+1)
{
iback++;
}
}
}
return m_all; //вернем кол-во ордеров в структуре
}
*/
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;
if(imode==MODE_TRADES)
{
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; //пропустим бэк ордера
if(!CheckMagic(m_orders[i].OrderMagicNumber,m_orders[i].OrderComment) || !CheckSymbol(m_orders[i].OrderSymbol))
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;
}
/*
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 CMyDrawPos: public CDrawPos
{
public:
virtual void DrawStatus(string sname,string sLicense,bool bbcheck)
{
static color clRoute=clrRed;
if(bbcheck)
{
clRoute=clrLime;
}
else
{
if(clRoute==clrLime)
clRoute=clrRed;
}
if((IsTesting() && IsVisualMode()) || (!IsTesting() && !IsOptimization()))
{
DrawLabel(0,sname,sLicense,clRoute,CORNER_LEFT_LOWER,5,20,10,"Arial Black");
if(clRoute==clrRed)
clRoute=TEXT_COLOR;
else
if(clRoute==TEXT_COLOR)
clRoute=clrRed;
}
}
};
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;
CMyDrawPos m_pos,m_pos2;
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_pos2.OnDeinit();
}
virtual void OnTick()
{
// код доступен только после оплаты
}
string sLicense=VALID_KEY;
bool bcheck=checkAccount(sLicense,LICENSE_NAME);
m_pos.DrawStatus("status",sLicense,bcheck);
double dProfits[MAX_SYSTEMS],dLot[MAX_SYSTEMS];
int iCount[MAX_SYSTEMS],iBack[MAX_SYSTEMS];
ArrayInitialize(dProfits,0);
ArrayInitialize(dLot,0);
ArrayInitialize(iCount,0);
ArrayInitialize(iПоказано первые 50% кода (символов: 27580)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.