полный текст советника

//+--------------------------------------------------------+
//| test.mq4 |
//| lapot |
//| http://lapot10.ru/ |
//+--------------------------------------------------------+
#property copyright "lapot"
#property link "http://lapot10.ru/"
extern int magic=12345;
extern int sl=40;
extern int t_p=120;
extern int ind_p1=0;
extern int ind_p2=0;
extern int ind_p3=0;
extern int ind_p4=0;
int slip=3;
int tp;
bool trade;
double lot;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
 {
//----
 if(Digits==3||Digits==5)sl=sl*10;//в случае пятизнака умножаем стоп лосс на 10
 if(IsDemo())trade=true;
 else
 trade=false;
 //Высчитаем тейк-профит
 tp=MathCeil(sl*t_p)/100; 
 lot=MarketInfo(Symbol(),MODE_MINLOT); 
//----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
 {
//----
 
//----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
 {
//----
bool c=control();
if(!trade)return(0);//торговля запрещена
 if(!c)return(0);//есть открытые ордера 
string signal=ind();
if(signal=="buy")openbuy(lot,sl,tp); 
if(signal=="sell")opensell(lot,sl,tp); 
//----
 return(0);
 }
//+------------------------------------------------------------------+
bool control()
{
bool c=true;
for(int t=OrdersTotal()-1;t>=0;t--)//В цикле проверяем все открытые ордера
 {
 if(OrderType()==OP_BUY||OrderType()==OP_SELL)c=false;
 }
return(c);
}
//функция открытия ордера buy
//возвращает тикет(порядковый номер ордера)
//входные параметры: лот
// стоп лосс и тейк профит(в пунктах)
int openbuy(double l,int s,int t)
{
int tik;//тикет
double ask=MarketInfo(Symbol(),MODE_ASK);
double bid=MarketInfo(Symbol(),MODE_BID);
//проверяем размерность лота
//минимально допустимый размер лота
double min=MarketInfo(Symbol(),MODE_MINLOT);
//максимально допустимый размер лота
double max=MarketInfo(Symbol(),MODE_MAXLOT);
//если размер лота >max или <min
if(l<min||l>max)
 {
 //фиксируем ошибку в журнале
 Print("Ошибка! Недопустимый размер лота! лот=",l);
 //дублируем сообщение на экране
 Comment("Ошибка! Недопустимый размер лота! лот=",l);
 //выход
 tik=-1;
 return(tik);
 }
 // нормализуем значение лота
 l=NormalizeDouble(l,2);
//проверяем значения стопов
//минимальный уровень стопов в пунктах
int stop=MarketInfo(Symbol(),MODE_STOPLEVEL);
//спред в пунктах
int spread=MarketInfo(Symbol(),MODE_SPREAD);
stop=stop+spread;
//если лосс или тейк меньше допустимого
if((s<=stop&&s!=0)||(t<=stop&&t!=0))
 {
 //фиксируем ошибку в журнале
 Print("Стопы слишком близко к рынку стор лосс=",s,
 "Тейк профит =",t," Ask= ",ask);
 //дублируем сообщение на экране
 Comment("Стопы слишком близко к рынку стор лосс=",s,
 "Тейк профит =",t," Ask= ",ask);
 //выход
 tik=-1;
 return(tik);
 }
 //вычисляем значения стопов
double s1=0,t1=0;
if(s!=0)s1=bid-s*Point;
if(t!=0)t1=ask+t*Point;
//нормализуем стопы
s1=NormalizeDouble(s1,Digits);
t1=NormalizeDouble(t1,Digits);
//пытаемся открыть позицию
tik=OrderSend(Symbol(),OP_BUY,l,ask,slip,s1,t1,"",magic,0,Red);
if(tik<0)
{
Comment(GetLastError());//ошибка
Print(GetLastError());
}
return(tik);
}
//===============================================================
//функция открытия ордера sell
//возвращает тикет(порядковый номер ордера)
//входные параметры: лот
// стоп лосс и тейк профит(в пунктах)
int opensell(double l,int s,int t)
{
int tik;//тикет
double ask=MarketInfo(Symbol(),MODE_ASK);
double bid=MarketInfo(Symbol(),MODE_BID);
//проверяем размерность лота
//минимально допустимый размер лота
double min=MarketInfo(Symbol(),MODE_MINLOT);
//максимально допустимый размер лота
double max=MarketInfo(Symbol(),MODE_MAXLOT);
//если размер лота >max или <min
if(l<min||l>max)
 {
 //фиксируем ошибку в журнале
 Print("Ошибка! Недопустимый размер лота! лот=",l);
 //дублируем сообщение на экране
 Comment("Ошибка! Недопустимый размер лота! лот=",l);
 //выход
 tik=-1;
 return(tik);
 }
 // нормализуем значение лота
 l=NormalizeDouble(l,2);
//проверяем значения стопов
//минимальный уровень стопов в пунктах
int stop=MarketInfo(Symbol(),MODE_STOPLEVEL);
//спред в пунктах
int spread=MarketInfo(Symbol(),MODE_SPREAD);
stop=stop+spread;
//если лосс или тейк меньше допустимого
if((s<=stop&&s!=0)||(t<=stop&&t!=0))
 {
 //фиксируем ошибку в журнале
 Print("Стопы слишком близко к рынку стор лосс=",s,
 "Тейк профит =",t," Ask= ",ask);
 //дублируем сообщение на экране
 Comment("Стопы слишком близко к рынку стор лосс=",s,
 "Тейк профит =",t," Ask= ",ask);
 //выход
 tik=-1;
 return(tik);
 }
 //вычисляем значения стопов
double s1=0,t1=0;
if(s!=0)s1=ask+s*Point;
if(t!=0)t1=bid-t*Point;
//нормализуем стопы
s1=NormalizeDouble(s1,Digits);
t1=NormalizeDouble(t1,Digits);
//пытаемся открыть позицию
tik=OrderSend(Symbol(),OP_SELL,l,bid,slip,s1,t1,"",magic,0,Red);
if(tik<0)
{
Comment(GetLastError());//ошибка
Print(GetLastError());
}
return(tik);
}
//=====================================================
string ind()
{
string s="";
return(s);
}
//+------------------------------------------------------------------+
Комментарии (0)

Нет комментариев. Ваш будет первым!

Яндекс.Метрика