multirobotgagarin_1.3.1.9.555.mqh
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «multirobotgagarin_1.3.1.9.555.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Программа представляет собой MQL4-приложение для MetaTrader 4, управляющее автоматическими торговыми сессиями. Она обеспечивает контроль времени торговли, позволяя совершать сделки только в заданные временные окна, а также механизмы защиты капитала: стоп по прибыли и убытку, трейлинг по капиталу с настраиваемыми параметрами в валюте или процентах.
Интерфейс включает интерактивные кнопки запуска и остановки торговых сессий с диалоговыми окнами подтверждения при возобновлении после стопа по капиталу. Программа отслеживает статистику сессий, количество перезапусков и управляет уровнями капитала на протяжении сессий и торговых дней.
Приложение интегрируется с внешним DLL-модулем для управления торговыми сигналами и поддерживает фильтрацию по спискам сигналов и тикеров. Торговые операции, включая закрытие позиций, выполняются через объект управления торговлей. При инициализации проводится валидация входных параметров: формат времени, префиксы и суффиксы символов, уровни триггеров.
Поиск по коду файла
#property version "1.319"
#property strict
#include "MainFunc.mqh"
/*
struct STradeSignal {
long id;
datetime time;
int signal;
char symbol[32-sizeof(long)-sizeof(datetime)-sizeof(int)];
STradeSignal(){ZeroMemory(this);}
};
#import "DBSignalsConnector.dll"
uint RunConnect(int, char& host[], char& user[], char& pw[], char& db[]);
uint MakeSignals(uint work, STradeSignal& buff[], uint size);
void Disconnect(uint work);
#import
#include "Header.mqh"
int OnInit(){
// код доступен только после оплаты
}
void OnDeinit(const int reason){
DLOG(__FUNCTION__);
switch(reason){
case REASON_PARAMETERS: Start(true);
delete gTimeControl;
break;
case REASON_PROGRAM:
case REASON_REMOVE:
case REASON_RECOMPILE:
case REASON_CHARTCLOSE:
case REASON_ACCOUNT:
case REASON_INITFAILED:
case REASON_CLOSE: gTrade.Disconnect();
delete gTimeControl;
delete gDayEquity;
case REASON_TEMPLATE:
case REASON_CHARTCHANGE: break;}
EventKillTimer();
delete button;}
void OnTimer(){
TimeControl();
EquityControl();
TradeControl();
}
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam){
if (id==CHARTEVENT_OBJECT_CLICK)
if (sparam==_CLOSE_BUTTON){
if (!is_day_ban) Comment(_BUTTON_STOP);
is_day_ban=true;
gIsManualStop=true;
gTrade.CloseAll();
delete button;
button=new CButton(_START_BUTTON);}
else if (sparam==_START_BUTTON){
if (!gIsTradeAlloed) {button.SetPress(false); return;}
if (gIsEquityUpBan&&
MessageBox("Last trade is finished by profit equity stop\nDo you want to start new trading session?",NULL,MB_YESNO)==IDNO) return;
if (gIsEquityDownBan&&
MessageBox("Last trade is finished by loss equity stop\nDo you want to start new trading session?",NULL,MB_YESNO)==IDNO) return;
if (gIsEquityTralStop&&
MessageBox("Last trade is finished by equity traling stop\nDo you want to start new trading session?",NULL,MB_YESNO)==IDNO) return;
is_day_ban=gIsEquityUpBan=gIsEquityDownBan=gIsEquityTralStop=false;
gEquity=AccountEquity();
gIsManualStop=false;
++gRestartCount;
delete button;
button=new CButton(_CLOSE_BUTTON);
Comment(_ALLOWED_TEXT);}}
ENUM_INIT_RETCODE Start(bool is_new_param=false){
ENUM_INIT_RETCODE res;
static bool is_start=true,
is_param=false;
if(is_new_param){
is_param=true;
return(INIT_SUCCEEDED);}
if(!is_start&&!is_param) return(INIT_SUCCEEDED);
res=CheckParam();
if (is_param) {is_param=false; return(res);}
if (res==INIT_SUCCEEDED){
ResetDay();
Comment(_ALLOWED_TEXT);
gTrade.FindOrders();
is_start=false;}
return(res);}
ENUM_INIT_RETCODE CheckParam(){
ENUM_INIT_RETCODE res=INIT_SUCCEEDED;
gTimeControl=is_time_work?new CTradeTimeControl(time_start,time_end,time_close):new CTradeTimeControl();
DayEquitySet();
if (is_main_be&&main_be_trigger<=0) {Alert("Неверный уровень включения безубытка основного ордера, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
if (is_lock&&is_lock_be&&lock_be_trigger<=0) {Alert("Неверный уровень включения безубытка локирующей позиции, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
if (is_main_tral&&main_tral<=0) {Alert("Неверный уровень трала основного ордера, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
if (is_lock&&is_lock_tral&&lock_tral<=0) {Alert("Неверный уровень трала локирующей позиции, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
if (prefix!=""&&StringFind(_Symbol,prefix)!=0) {Alert("Неверный префикс символа"); res=INIT_PARAMETERS_INCORRECT;}
if (suffix!=""&&StringSubstr(_Symbol,StringFind(_Symbol,suffix))!=suffix) {Alert("Неверный суффикс символа"); res=INIT_PARAMETERS_INCORRECT;}
if (!gTimeControl.IsTrueFormat()) {Alert("Неверный формат времени");res=INIT_PARAMETERS_INCORRECT;}
return(res);}
void DayEquitySet(){
if (eDayEquityTralType==PROFIT_TYPE_NONE) delete gDayEquity;
else if (!CheckPointer(gDayEquity)) gDayEquity=new CEquityControl(eDayEquityTralType==PROFIT_TYPE_CURRENCY?TRAL_TYPE_CURRENCY:TRAL_TYPE_PERCENT);
else gDayEquity.SetNewParam(eDayEquityTralType==PROFIT_TYPE_CURRENCY?TRAL_TYPE_CURRENCY:TRAL_TYPE_PERCENT);}
void TimeControl(){
bool isNewDay;
gTimeControl.Control(gIsOpenAlloed,gIsTradeAlloed,isNewDay);
Показано первые 50% кода (символов: 8129)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.