MahsinEA
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «muhsinea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MahsinEA — торговый советник для MetaTrader 4, обеспечивающий автоматическое управление ордерами на валютном рынке. Программа поддерживает два режима работы: ручной, управляемый кнопкой на графике, и автоматический, основанный на заданном времени начала торгов. В ручном режиме торговля активируется и деактивируется посредством интерактивной кнопки, отображаемой на чарте.
Советник размещает отложенные ордера на покупку и продажу, контролируя при этом текущий спред и допустимое проскальзывание. Встроенная система управления рисками позволяет задать фиксированный размер лота или рассчитать его как процент от текущего баланса счета. Также доступны параметры стоп-лосса и тейк-профита.
Время старта торгов настраивается для режима работы по расписанию. Советник отслеживает количество открытых и отложенных ордеров, предотвращая дублирование позиций. Параметр магического номера используется для идентификации управляемых ордеров.
Настройки программы
| Настройка | Описание |
|---|---|
| ======Trade Setting====== (A) | Разделитель торговли — Разделитель секции настроек торговли |
| Maximum Spread (MaxSpread) | Максимальный спред — Максимально допустимый спред для открытия ордера |
| Show Arrow (ShowArrows) | Отображение стрелок — Отображение стрелок на графике при открытии ордеров |
| Max Slippage (0=Disabled) (Slippage) | Максимальное проскальзывание — Максимальное допустимое проскальзывание при открытии ордера |
| Magic | Магический номер — Магический номер для идентификации ордеров советника |
| comment | Комментарий к ордерам — Комментарий к ордерам, отправляемым советником |
| ======Risk Setting====== (A6) | Разделитель риска — Разделитель секции настроек риска |
| Risk Management Type (Choose) (Lot_type) | Тип управления рисками — Тип управления рисками: фиксированный лот или процент от эквити |
| Trade Type (cfg) | Режим торговли — Режим торговли: ручной (кнопка на графике) или по времени |
| Fixed Lot Size (LotSize) | Фиксированный размер лота — Фиксированный размер лота при фиксированном типе управления рисками |
| Risk % (EquityStop) | Процент риска от эквити — Процент риска от эквити для расчёта размера лота |
| StopLoss | Стоп-лосс — Уровень стоп-лосса для открытых ордеров |
| TakeProfit | Тейк-профит — Уровень тейк-профита для открытых ордеров |
| StartTime | Время начала торгов — Время начала торгов в режиме работы по расписанию |
Поиск по коду файла
#property version "1.00"
#property strict
#include <Controls/Button.mqh>
CButton FLA_Acivate_button;
enum Risk_Management
{
Fixed_Lot,Risk_Percent
};
enum Trademanager
{
Manual,Times
};
input string A="================================";//======Trade Setting======
input double MaxSpread = 0; // Maximum Spread
input bool ShowArrows=true; // Show Arrow
extern double Slippage=3; // Max Slippage (0=Disabled)
input int Magic =1134;
input string comment ="";
input string A6="";//======Risk Setting======
input Risk_Management Lot_type=Fixed_Lot; // Risk Management Type (Choose)
input Trademanager cfg = Manual ;// Trade Type
input double LotSize = 0.1; // Fixed Lot Size
input double EquityStop=0.5;//Risk %
input double StopLoss = 20;
input double TakeProfit =40;
extern string StartTime = "09:28";
int xv = 0;// Position X
int yv = 30;// Position Y
double mp =1;
string sub;
datetime tl;
double tickvalues;
datetime timestart;
datetime datenow;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectDel();
}
void ObjectDel()
{
string name;
int totalObjects = ObjectsTotal(0,0,-1);
for(int i=totalObjects-1; i>= 0; i--)
{
name = ObjectName(0,i,0,-1);
if(StringFind(name,"FLA",0)>=0) ObjectDelete(0,name);
}
}
bool CreateButton(CButton &button,string objname,string text,int x1,int y1,int x2, int y2, string fontname, int fontsize, color clr)
{
string font = "Arial Black";
if(!button.Create(0,objname,0,x1,y1,x2,y2))
return(false);
if(!button.Text(text))
return(false);
if(!button.Color(clrWhite))
return(false);
if(!button.ColorBackground(clr))
return(false);
if(!button.ColorBorder(clrBlack))
return(false);
if(!button.FontSize(fontsize))
return(false);
if(!button.Top())
return(false);
if(!button.BringToTop())
return(false);
if(!button.Font(font))
return(false);
return(true);
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(ObjectGetInteger(0,"FLA_Acivate_button",OBJPROP_STATE))
{
ObjectSetInteger(0,"FLA_Acivate_button",OBJPROP_STATE,0);
if(ObjectGetString(0,"FLA_Acivate_button",OBJPROP_TEXT)=="No Trading")
{
ObjectSetString(0,"FLA_Acivate_button",OBJPROP_TEXT,"Trading");
}
else if (ObjectGetString(0,"FLA_Acivate_button",OBJPROP_TEXT)=="Trading")
{
ObjectSetString(0,"FLA_Acivate_button",OBJPROP_TEXT,"No Trading");
}
}
}
void OnTick()
{
// код доступен только после оплаты
}
int NumTrade(int d)
{
int tot=0;
double total = OrdersTotal();
for(int i=0;i<total;i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(d==0 && OrderType() ==0)tot+=1;
if(d==1 && OrderType() ==1)tot+=1;
if(d==2 && (OrderType() ==0 || OrderType() ==1))tot+=1;
}
}
}
return(tot);
}
int NumTradr()
{
int tot=0;
double total = OrdersTotal();
for(int i=0;i<total;i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType()>1)
{
tot+=1;
}
}
}
return(tot);
}
void Indic()
{
OpenBuy(Close[0]);
OpenSell(Close[0]);
if(NumTradr()==1)CloseOrder();
}
void CloseOrder()
{
double total = OrdersTotal();
for(int i=0;i<total;i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType()>1)
{
if(!(OrderDelete(OrderTicket(),clrNONE)))Print("Pending Order Close Failed: ",GetLastError());
}
}
}
}
void OpenBuy(double pr)
{
RefreshRates();
double sl=0;
double tp=0;
double lot =0;
int ticket=0,tries=0;
int tries_main=0;
while(ticket<=0)
{
RefreshRates();
if(GetSpread()>MaxSpread && MaxSpread !=0)
{
Print("Order not opened because spread ("+(string)(GetSpread())+") is higher than max allowed spread ("+(string)MaxSpread);
return;
}
color arrowColor=clrLimeGreen;
if(!ShowArrows) arrowColor=clrNONE;
lot=GetLots();
if(lot <= 0){Print("Calculated Lot Size <= 0");return;}
if(!AccountFreeMarginCheck(Symbol(),OP_BUY,lot)>0)
{
Print("Order not opened because there's not enough money to buy "+DoubleToStr(lot,2)+" lots, try to lower the volume, error: ="+(string)GetLastError());
return;
}
double price = pr + mp*_Point*5;
if(StopLoss!=0)
{
sl = price-StopLoss *mp* Point();
sl=NormalizeDouble (sl, Digits);
if(sl > price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
sl = price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
}
if(TakeProfit!=0)
{
tp = price+TakeProfit*mp*Point();
tp=NormalizeDouble (tp, Digits);
if(tp < price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
tp = price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
}
ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,price,(int)Slippage,sl,tp,comment,Magic,0,arrowColor);
if(ticket<0)Print("Order Buy trade failed: ",err_msg(GetLastError()));
tries_main++;
if(tries_main>10)break;
}
}
void OpenSell(double pr)
{
double sl=0;
double tp=0;
double lot=0;
RefreshRates();
int ticket=0,tries=0;
int tries_main=0;
while(ticket<=0)
{
RefreshRates();
if(GetSpread()> MaxSpread && MaxSpread !=0)
{
Print("Order not opened because spread ("+(string)(GetSpread())+") is higher than max allowed spread ("+(string)MaxSpread);
return;
}
color arrowColor=clrLimeGreen;
if(!ShowArrows)arrowColor=clrNONE;
lot=GetLots();
if(lot <= 0){Print("Calculated Lot Size <= 0");return;}
if(!AccountFreeMarginCheck(Symbol(),OP_SELL,lot)>0)
{
Print("Order not opened because there's not enough money to buy "+DoubleToStr(lot,2)+" lots, try to lower the volume, error: "+(string)GetLastError());
return;
}
double price = pr - mp*_Point*5;
if(StopLoss!=0)
{
sl = price + StopLoss*mp * Point();
sl=NormalizeDouble (sl, Digits);
if(sl < price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
sl = price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
}
if(TakeProfit!=0)
{
tp = price - TakeProfit*mp * Point();
tp=NormalizeDouble (tp, Digits);
if(tp > price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
tp = price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
}
ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,(int)Slippage,sl,tp,comment,Magic,0,arrowColor);
if(ticket<0)Print("Order Buy trade failed: ",err_msg(GetLastError()));
tries_main++;
if(tries_main>10)break;
}
}
double GetLots ()
{
double lotSize=0;
if (Lot_type == Risk_Percent)
{ lotSize = AccountEquity() * EquityStop/100 / ( StopLoss * mp * MarketInfo( Symbol(), MODE_TICKVALUE ) );}
else if (Lot_type == Fixed_Lot) {lotSize = LotSize;}
double lotsStep = MarketInfo(Symbol(), MODE_LOTSTEПоказано первые 50% кода (символов: 12980)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.