Исходный код · ID 3487
genibot.mq4
Вы автор или правообладатель?
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «genibot.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Поиск по коду файла
#property version "1.00"
#property strict
#define POINTS_NEW
#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 "Advisor activated."
#define EMPTY_KEY "Activate the key."
#define INVALID_KEY "Invalid key."
#define EXPERIED "Key expired."
#define LICENSE_NAME "genibot_key"
#define LICENSE_OFF
#resource "\\Indicators\\FTLM-STLMxAMm.ex4"
#resource "\\Images\\genibot\\panel.bmp"
#resource "\\Images\\genibot\\logo.bmp"
#resource "\\Images\\genibot\\logo2.bmp"
#define PANEL_RESOURCE "::Images\\genibot\\panel.bmp"
#define LOGO_RESOURCE "::Images\\genibot\\logo.bmp"
#define LOGO2_RESOURCE "::Images\\genibot\\logo2.bmp"
#define LOGO2_W 909
#define LOGO2_H 550
#define LOGO_W 700
#define LOGO_H 424
#define PANEL_W 400
#define PANEL_H 376
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_RIGHT_UPPER; //Display place corner
I FontSize=12; //Font Size
input ENUM_SELECT_TRADE SelectTrade=SELECT_TRADE_ALL; //Trade Mode
D Lots=0.01; //Lots
B MM=false; //MM
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=0; //Use reverse
D BackOrder_Exponent=0.5; //Reverse Lot exponent
B Stabilization=false; //Stabilization
D Stabilization_DD=5; //Drawdown for stabilization
D Stabilization_Procent=50; //Profit % for stabilization
TF SelectOpenOrdersNorm_TF=PERIOD_H1;//TF norma
D Drawdoun=5; //Drawdown1
TF SelectOpenOrdersDrawdount11_TF=PERIOD_H4;//TF1
D Drawdoun2=10; //Drawdown2
TF SelectOpenOrdersDrawdount12_TF=PERIOD_D1;//TF2
D TakeProfit=125; //Take profit
B ProfitClose=true;//Use close by profit
I ProfitCloseMaxOrder=10;//Minimal count orders
D ProfitCloseStrategyDollar=5.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=true; //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
TF SelectSystem1_TF=PERIOD_M15; //TF
I MaxTrades_Hilo=15; //Max Orders
B UseTrailingStop_Hilo=false; //Use trailing stop
D TrailStart_Hilo=100.00000000; //Trailing start
D TrailStop_Hilo=50.00000000; //Trailing stop
D PipStep_Hilo=250; //Pip step
D PipStepX_Hilo=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 Orders
B UseTrailingStop_15=false; //Use Trailing stop
D TrailStart_15=100.00000000; //Trailing start
D TrailStop_15=50.00000000;//Trailing stop
D PipStep_15=195;//Pip step
D PipStepX_15=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_H4; //TF
I MaxTrades_16=15; //Max Orders Orders
B UseTrailingStop_16=false; //Use Trailing stop
D TrailStart_16=100.00000000; //Trailing start
D TrailStop_16=50.00000000;//Trailing stop
D PipStep_16=150;//Pip step
D PipStepX_16=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__
ArrayResize(m_orders,0);
m_all=0;
ArrayInitialize(orders,0);
int isize=0;
int itotal=::OrdersTotal();
dprofits=0;
dlots=0;
icount=0;
iback=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 double get_Average(int itype,int &idirect,double dProfit=0)
{
double dprofit[2]= {0,0},
m_lots[2]= {0,0},
icount[2]= {0,0};
idirect=0;
double dask=SymbolInfoDouble(m_name,SYMBOL_ASK);
double dbid=SymbolInfoDouble(m_name,SYMBOL_BID);
int flag;
for(int i=ArraySize(m_orders)-1; i>=0; i--)
{
if(m_orders[i].OrderCloseTime>0)
continue;
if(CheckMagic(m_orders[i].OrderMagicNumber,m_orders[i].OrderComment) && CheckSymbol(m_orders[i].OrderSymbol))
{
flag=toMyTypes(m_orders[i].OrderType)&itype;
if(m_orders[i].OrderType==OP_BUY && toDefType(flag,itype)==OP_BUY)
{
m_lots[0]+=m_orders[i].OrderLots;
dprofit[0]+=NormalizeDouble(m_orders[i].Profit,2);
icount[0]++;
}
if(m_orders[i].OrderType==OP_SELL && toDefType(flag,itype)==OP_SELL)
{
m_lots[1]+=m_orders[i].OrderLots;
dprofit[1]+=NormalizeDouble(m_orders[i].Profit,2);
icount[1]++;
}
}
}
if(NormalizeDouble(m_lots[0],2)-NormalizeDouble(m_lots[1],2)==0.0)
return (0);
if(NormalizeDouble(m_lots[0],2)>NormalizeDouble(m_lots[1],2))
idirect=1;
if(NormalizeDouble(m_lots[0],2)<NormalizeDouble(m_lots[1],2))
idirect=-1;
double PriceLevel=0;
double TickValue=NormalizeDouble(SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE),3);
if(TickValue==0.0)
return 0;
double _dpoint=SymbolInfoDouble(m_name,SYMBOL_POINT);
if(_dpoint==0.0)
return 0;
double sp=ND1((dask-dbid)/p);
int idigits=(int)SymbolInfoInteger(m_name,SYMBOL_DIGITS);
if((m_lots[0]-m_lots[1])>0)
PriceLevel=nd(dbid-((dprofit[0]+dprofit[1]+dProfit)/(TickValue*(m_lots[0]-m_lots[1]))*_dpoint),m_name);
if((m_lots[1]-m_lots[0])>0)
PriceLevel=nd(dbid+((dprofit[0]+dprofit[1]+dProfit)/(TickValue*(m_lots[1]-m_lots[0]))*_dpoint),m_name);
return NormalizeDouble(PriceLevel,idigits);
}
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;
}
};
class CMyOptions: public COptions
{
public:
bool ContinueTrading_System[];
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_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 CFullOrders: public COrders
{
public:
virtual bool CheckMagic(long iMagic)
{
return (iMagic==MagicNumber_1 || iMagic==MagicNumber_2 || iMagic==MagicNumber_3);
}
};
class CMain: public CMainDefault
{
protected:
CMyOrders m_main[MAX_SYSTEMS];
CNewBar m_bar[MAX_SYSTEMS],m_day,m_newday,m_checkbar[3];
CMyOptions m_options;
CTime m_time;
CChart m_chart;
bool bDrawPanel;
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();
}
virtual void OnTick()
{
// код доступен только после оплаты
}
string sLicense=VALID_KEY;
bool bcheck=checkAccount(sLicense,LICENSE_NAME);
if(bDrawPanel)
{
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(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)
return; //обязательно компилировать и накладывать MQL5 защиту!!!
if(!IsWork())
return; //отключена торговля?
m_newday.Refresh(); //новый день
m_day.Refresh();
for(int i=0; i<3; i++)
m_checkbar[i].Refresh();
if(ProfitClose)
{
if(itotal>=ProfitCloseMaxOrder)
{
if(dsummProfits>=ProfitCloseStrategyDollar)
{
for(int i=0; i<MAX_SYSTEMS; i++)
m_main[i].OrderCloseAll(ALL); //закроем все стратегии по прибыли
return;//вернемся к следующему тику для нового анализа
}
}
}
if(UseEquityStop && itotal>0)
{
if(dd<=-TotalEquityRisk)
{
for(int i=0; i<MAX_SYSTEMS; i++)
m_main[i].OrderCloseAll(ALL); //закроем все стратегии по убытку
return;//вернемся к следующему тику для нового анализа
}
}
for(int i=0; i<MAX_SYSTEMS; i++)
{
m_bar[i].Refresh();
if(CloseFriday && DayOfWeek()==FRIDAY)
{
string stime=StringFormat("%02d:00-24:00",CloseFridayHour);
if(m_time.time_checking(stime)) //время в пт{
{
m_main[i].OrderCloseAll(ALL);
continue; //пропускаем так как закрываются ордера
}
}
if(Stabilization)
fnStabilization();
if(iCount[i]==0 && ContinueTrading &&
(dd>-Drawdoun || Drawdoun==0))
{
if(m_options.ContinueTrading_System[i])
{
bool btime=true;
if(OpenMondey && DayOfWeek()==MONDAY)
{
string stime=StringFormat("%02d:00-24:00",OpenMondeyHour);
btime=m_time.time_checking(stime); //время в пн
}
if(btime)
{
int iop=signal(i,imaxorders);
bool bTrade=false;
if(iop==OP_BUY && (m_options.selecttrade[i]==SELECT_TRADE_ALL || m_options.selecttrade[i]==SELECT_TRADE_LONG))
{
bTrade=true;
}
Показано первые 50% кода (символов: 26750)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.
Стоимость полного кода: 2 675 ₽ (≈ $31.59 USDT)