//+------------------------------------------------------------------+
//| Limitki.mq4 |
//| Copyright 2024, Ve |
//| kupiscript@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Ve"
#property link "kupiscript@yandex.ru"
#property version "1.00"
#property strict
extern double Lots = 0.1; // Фикс лоет
extern double Risk = 0.1; // % от депо/ 0-выкл.
extern int Delta = 100; // Дистанция отступа
extern int TakeProfit = 100; // Тейк-профит
extern int StopLoss = 500; // Стоп-лосс
extern string StartTime = "16:00"; // Время установки ордеров
extern int Slip = 10; // Проскальзывание
extern int Magic = 123456; // Магик
//---------------------
double MINLOT,MAXLOT,ask,bid;
datetime OpenTime;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
MAXLOT = MarketInfo(Symbol(),MODE_MAXLOT);
OpenTime=StringToTime(StartTime);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0)
sl=NormalizeDouble(price+StopLoss*Point,Digits);
if(TakeProfit>0)
tp=NormalizeDouble(price-TakeProfit*Point,Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0)
sl=NormalizeDouble(price-StopLoss*Point,Digits);
if(TakeProfit>0)
tp=NormalizeDouble(price+TakeProfit*Point,Digits);
}
r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"Limitki",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
if(Risk>0)
lot=NormalizeDouble(AccountBalance()*0.01*Risk/MarketInfo(Symbol(),MODE_MARGINREQUIRED),2);
if (lot>MAXLOT) lot=MAXLOT;
if (lot<MINLOT) lot=MINLOT;
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==type || (type==-1 && OrderType()>1))
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров |
//+------------------------------------------------------------------+
void DelOrder()
{
bool del;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()>1)
del=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
ask=MarketInfo(NULL,MODE_ASK);
bid=MarketInfo(NULL,MODE_BID);
if(CountOrders()==1)
DelOrder();
if(TimeCurrent()==OpenTime && CountOrders()<1)
{
PutOrder(4,ask+Delta*_Point);
PutOrder(5,bid-Delta*_Point);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Создает текстовую метку |
//+------------------------------------------------------------------+
bool LabelCreate(string name,int x,int y,string text,string font,int font_size,color clr)
{
long chart_ID=0; // ID графика
int sub_window=0; // номер подокна
ENUM_BASE_CORNER corner=Corner; // угол графика для привязки
bool back=false; // на заднем плане
bool hidden=true; // скрыт в списке объектов
if(ObjectFind(chart_ID,name)<0)
{
//--- создадим текстовую метку
ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0);
//--- установим координаты метки
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим текст
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- установим цвет
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим цвет фона
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,White);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- успешное выполнение
}
return(true);
}
//+------------------------------------------------------------------+
//| Создает прямоугольную метку |
//+------------------------------------------------------------------+
bool RectLabelCreate(string name,int x,int y,int width,int height,color back_clr,color clr)
{
long chart_ID=0; // ID графика
int sub_window=0; // номер подокна
ENUM_BORDER_TYPE border=BORDER_SUNKEN; // тип границы
ENUM_BASE_CORNER corner=Corner; // угол графика для привязки
ENUM_LINE_STYLE style=STYLE_SOLID; // стиль плоской границы
int line_width=1; // толщина плоской границы
bool back=false; // на заднем плане
bool hidden=true; // скрыт в списке объектов
if(ObjectFind(chart_ID,name)<0)
{
ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
//--- установим координаты метки
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим размеры метки
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- установим цвет фона
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- установим тип границы
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим цвет плоской рамки (в режиме Flat)
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линии плоской рамки
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину плоской границы
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
}
//--- успешное выполнение
return(true);
}
verta81