genibot.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «genibot.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Genibot — это торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Программа реализует графический панель интерфейс, отображающий ключевые торговые показатели: баланс, эквити, просадку, прибыль по стратегиям и таймфреймальные сигналы.
Советник использует три независимые торговые системы, каждая из которых работает на своём таймфрейме и имеет собственные параметры объёма, стоп-лосса и тейк-профита. Системы поддерживают усреднение позиций с нарастающим шагом лота, а также обратные ордера.
В советнике реализованы дополнительные механизмы управления рисками: стоп по эквити, закрытие по достижении целевой прибыли, трейлинг-стоп, а также механизм стабилизации с формированием «копилки» для частичного закрытия убыточных позиций. Торговля может ограничиваться по времени — открытием в определённый час понедельника и закрытием в определённый час пятницы.
Программа включает проверку лицензионного ключа, привязанного к торговому счёту, и использует внешний индикатор FTLM-STLMxAMm.ex4 для генерации торговых сигналов. Автор — Gavrilin Alexander V. (DKeN), сайт sovetnikov.net.
Настройки программы
| Настройка | Описание |
|---|---|
| Panel show use (chartDisplay) | Показ панели — Включает отображение графической панели на графике |
| Display place corner (chartDisplayPlace) | Угол панели — Угол графика для размещения панели |
| Font Size (FontSize) | Размер шрифта — Размер шрифта текста на панели |
| Trade Mode (SelectTrade) | Режим торговли — Режим торговли: длинные, короткие или оба направления |
| Lots (Lots) | Объём лота — Начальный объём лота для открытия позиции |
| MM (MM) | Управление лотом — Включает автоматическое управление размером лота на основе баланса или эквити |
| 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) | Продолжение торговли — Разрешает продолжение торговли при наличии убытка в пределах заданной просадки |
| Use reverse (BackOrder) | Обратный ордер — Включает использование обратных ордеров |
| Reverse Lot exponent (BackOrder_Exponent) | Экспонента обратного лота — Экспонента для расчёта лота обратного ордера |
| Stabilization (Stabilization) | Стабилизация — Включает механизм стабилизации с формированием копилки для частичного закрытия убыточных позиций |
| Drawdown for stabilization (Stabilization_DD) | Просадка для стабилизации — Уровень просадки для активации стабилизации |
| Profit % for stabilization (Stabilization_Procent) | Процент прибыли для стабилизации — Процент прибыли для начисления в копилку при стабилизации |
| TF norma (SelectOpenOrdersNorm_TF) | Нормальный таймфрейм — Нормальный таймфрейм для проверки открытых ордеров |
| Drawdown1 (Drawdoun) | Просадка 1 — Первый уровень просадки для управления торговлей |
| TF1 (SelectOpenOrdersDrawdount11_TF) | Таймфрейм просадки 1 — Таймфрейм для проверки первого уровня просадки |
| Drawdown2 (Drawdoun2) | Просадка 2 — Второй уровень просадки для управления торговлей |
| TF2 (SelectOpenOrdersDrawdount12_TF) | Таймфрейм просадки 2 — Таймфрейм для проверки второго уровня просадки |
| 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) — Разрешает продолжение торговли для первой стратегии |
| 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_Hilo) | Шаг пипов (Стратегия 1) — Шаг пипов для усреднения первой стратегии |
| Pip step multiplier (PipStepX_Hilo) | Множитель шага пипов (Стратегия 1) — Множитель шага пипов для первой стратегии |
| Magic (MagicNumber_1) | Магический номер (Стратегия 1) — Магический номер для ордеров первой стратегии |
| Continue trading (ContinueTrading_System2) | Продолжение торговли (Стратегия 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_15) | Шаг пипов (Стратегия 2) — Шаг пипов для усреднения второй стратегии |
| Pip step multiplier (PipStepX_15) | Множитель шага пипов (Стратегия 2) — Множитель шага пипов для второй стратегии |
| Magic (MagicNumber_2) | Магический номер (Стратегия 2) — Магический номер для ордеров второй стратегии |
| Continue trading (ContinueTrading_System3) | Продолжение торговли (Стратегия 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_16) | Шаг пипов (Стратегия 3) — Шаг пипов для усреднения третьей стратегии |
| Pip step multiplier (PipStepX_16) | Множитель шага пипов (Стратегия 3) — Множитель шага пипов для третьей стратегии |
| Magic (MagicNumber_3) | Магический номер (Стратегия 3) — Магический номер для ордеров третьей стратегии |
Поиск по коду файла
#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. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.