simple_swing.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «simple_swing.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Программа представляет собой торгового советника для MetaTrader 4 на языке MQL4. Она обрабатывает рыночные события (OnTick), события графика (OnChartEvent) и таймерные события (OnTimer), обеспечивая автоматическое управление ордерами на счёте трейдера.
Советник позволяет открывать сделки BUY и SELL по рынку, а также выставлять отложенные ордера BUYSTOP и SELLSTOP с использованием торгового API OrderSend. В качестве стоп-лосса используется значение, рассчитанное на основе индикатора ATR (D1, период 5). Лот может задаваться фиксированным значением или рассчитываться автоматически на основе риска и уровня стоп-лосса.
Интерфейс включает три графические кнопки (BUY, SELL, CLOSE) в правой части графика и информационную панель, выводимую через Comment(), отображающую текущую прибыль, размер стоп-лосса, риск и другие торговые параметры. Доступны защита по эквити (Equity Stop), трал по банкомату и автоматическое закрытие при достижении заданного количества убыточных ордеров.
Программа включает проверку номера торгового счёта и может отключаться при обнаружении неразрешённого аккаунта. Торговая логика работает в течение дня и управляется пользователем через настройки и интерактивные кнопки на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| Comments (comment) | Комментарий — Текстовый комментарий, добавляемый к открываемым ордерам. |
| Magic (order_magic) | Магический номер — Магический номер, идентифицирующий ордера данного советника. |
| Fix Lot (order_lot) | Фиксированный лот — Фиксированный размер лота. Если задан как 0, лот рассчитывается автоматически на основе риска и стоп-лосса. |
| Risk (%) (risk) | Риск (%) — Процент риска, используемый для автоматического расчёта размера лота. |
| Multiplicator (koef) | Множитель лота — Множитель, применяемый к размеру лота при открытии дополнительных ордеров. |
| Close by Max Profit (%) (percent_of_profit) | Закрытие по максимальному профиту (%) — Процент от максимального профита, при достижении которого происходит принудительное закрытие всех ордеров по трейлингу эквити. |
| Count orders for BU exit (null_close) | Количество ордеров для выхода в ноль — Количество убыточных ордеров, после которого активируется попытка выхода в ноль. |
| Font Size (FONT_SIZE) | Размер шрифта — Размер шрифта графических элементов интерфейса. |
| Equity Stop (level equity $) (RiskManager_Stop) | Стоп эквити — Уровень эквити, при достижении которого происходит остановка торговли и закрытие всех ордеров. Если значение равно 0, функция не активируется. |
Поиск по коду файла
/*
2.00 19.06.2024
- обновление для новых терминалов
1.25
по умолчанию отключен режим трала по эквити
изменена логика включения банкомата и его минимальный профит должен быть равен шагу, чтобы получать наш минимальный профит
понижен базовый риск до 0.1-0.2%, чтобы с просадкой до 30% выдерживать 8 стопов подряд.
1.24
вывод размера следующего стоплосс
1.23
поправлен подсчет минимального профита
1.22
изменен принцип рассчета минимального профита
изменен расчет авториска
1.21
добавлено отображение расчетного риска в %
1.20
понижен риск по умолчанию, снижено количество стопов после чего активируется выход в 0, для понижения просадки и быстрого выхода из неудачного входа
доработана работа трала по банкомату
корректировка расчета минимального профита
*/
#define Market_Version
long checkacc[]=
{
1050526,
1050527,
1050740,
1053805,
1053830,
276070,
277761,
277836,
277992,
402502,
8076322,
8076323,
460733,//s*****m*@mail.ru
2000260, //инвестор b****9*@mail.ru
1048298, //мой счет
467526,//мой счет
2003007, //z****1*@bk.ru
2004251, //a**************v*@yandex.ru
463839,//e*****o*@mail.ru
474884, //a******t*@mail.ru, a*******v*@mail.ru
477174, //s******f*@mail.ru
467526,
465871,
463839,
2004251,
462183,
2003007,
460733,
459956,
2000260,
457522,
457521,
447227,
1063524,
8091574,
440952,
440951,
1059788,
426880,
1059784,
1057897,
1057822,
415911,
1057821,
410405,
8087996,
1055481,
1055480,
404832,
283903,
1054997,
278896,
1054034,
1053851,
277992,
1053830,
8076323,
277836,
8076322,
277761,
1053805,
276070,
402502,
1050740,
1050527,
1050526,
};
#property version "2.00"
#property description "This EA need for manual forex trading. The entry point you choose yourself on the work entrust adviser."
#property strict
#include <SovetnikovGUI\Orders.mqh>
/*
Правила торговли, торгует в течении дня пока не получит стоп.
*/
input string comment=""; //Comments
input int order_magic=2017; //Magic
input double order_lot=0; //Fix Lot
input double risk=0.1; //Risk (%)
input double koef=2; //Multiplicator
input double percent_of_profit=0.0; //Close by Max Profit (%)
input int null_close=2; //Count orders for BU exit
input int FONT_SIZE=10; //Font Size
color text_color=clrGreen;
input double RiskManager_Stop=0; //Equity Stop (level equity $)
int slippage=0;
double order_sl=0,order_tp=0;
#include <Controls\Button.mqh>
#define IDENT_LEFT1 (90)
#define IDENT_TOP1 (20)
#define IDENT_TOP2 (50)
#define IDENT_TOP3 (80)
#define BUTTON_HIGHT (20)
#define BUTTON_SIZE (80)
#define COLOR_GREEN (clrLawnGreen)
#define NO_COLOR (clrGainsboro)
CButton m_buy1,m_sell1,m_close;
double g_lot=0;
datetime tm=0;
int maxOrders=50;
class CMain: public COrders
{
public:
CMain(){};
~CMain(){};
void Tick(int op,bool bPress=false)
{
Update();
if(m_all==0)
{
if(bPress)
{
double lot=order_lot;
double atr=getStop();
order_sl=atr;
order_tp=atr;
double drisk=risk;
if(order_lot==0 && order_sl>0) lot=getLotBySL(drisk,order_sl); else lot=order_lot;
if(op==1)
{
tm=TimeCurrent();
OrderSend(OP_BUY,lot,-1,order_sl,0,comment,0,clrNONE,true); g_lot=lot;
main.SaveParam("lot",lot);
main.SaveParam("order_sl",order_sl);
main.SaveParam("order_tp",order_tp);
main.SaveParam("tm",tm);
}
if(op==-1)
{
tm=TimeCurrent();
OrderSend(OP_SELL,lot,-1,order_sl,0,comment,0,clrNONE,true); g_lot=lot;
main.SaveParam("lot",lot);
main.SaveParam("order_sl",order_sl);
main.SaveParam("order_tp",order_tp);
main.SaveParam("tm",tm);
}
}
}
else
{
if(orders[OP_BUY]+orders[OP_SELL]==0 && m_all>0){ OrderCloseAll(ALL,clrNONE); return;}
ulong t=getOrderTicket(BUY|SELL);
if(OrderSelect(t))
{
int type=OrderType();
double stop=OrderStopLoss();
double open=OrderOpenPrice();
double lot=OrderLots();
g_lot=main.LoadParam("lot",g_lot);
order_sl=main.LoadParam("order_sl",order_sl);
order_tp=main.LoadParam("order_tp",order_tp);
if(order_sl==0 || order_tp==0)
{
double atr=getStop();
order_sl=atr;
order_tp=atr;
}
if(type==OP_BUY && orders[OP_SELLSTOP]==0)
{
if(stop==0) stop=nd(open-order_sl*p);
if(Bid>stop)
{
Eq=0; EqMax=0;
OrderSend(OP_SELLSTOP,NLot(lot*koef),stop,order_sl,0,comment,0,clrNONE,true);
}
else
{
Eq=0; EqMax=0;
OrderSend(OP_SELL,NLot(lot*koef),-1,order_sl,0,comment,0,clrNONE,true);
if(t>0) OrderClose(t);
}
}
if(type==OP_SELL && orders[OP_BUYSTOP]==0)
{
if(stop==0) stop=nd(open+order_sl*p);
if(Ask<stop)
{
Eq=0; EqMax=0;
OrderSend(OP_BUYSTOP,NLot(lot*koef),stop,order_sl,0,comment,0,clrNONE,true);
}
else
{
Eq=0; EqMax=0;
OrderSend(OP_BUY,NLot(lot*koef),-1,order_sl,0,comment,0,clrNONE,true);
if(t>0) OrderClose(t);
}
}
}
}
}
};
CMain main();
CDraw draw;
double Eq=0,EqMax=0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
EventKillTimer();
Destroy();
draw.DeleteAll();
}
void OnTick()
{
// код доступен только после оплаты
}
if(!checkAccount())
{
Print("Invalid account! Write number Account to m**l*@dken.ru");
ExpertRemove();
return;
}
MoveButton();
int all=main.Update(); //получим кол-во ордеров в структуре orders
double curr_profit=main.getProfit();
double day_profit=main.GetProfitDay(0);
double month_profit=main.GetProfitMonth(0);
double summ_profit1=curr_profit+day_profit;
double summ_profit2=curr_profit+month_profit;
double start_balance1=AccountBalance()-summ_profit1;
double start_balance2=AccountBalance()-summ_profit2;
double p=main.p;
string n=main.m_name;
double step=main.LoadParam("order_sl",order_sl);
if(step==0 || all==0) step=getStop();
if(all==0){ Eq=0; EПоказано первые 50% кода (символов: 11023)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.