//+------------------------------------------------------------------+
//| FineFractals.mq4 |
//| Вадим |
//|
http://www.prostoforex.com |
//+------------------------------------------------------------------+
//+-----------------------Описание настроек--------------------------+
// Lots Открываемый лот |
// Slip Максимальное проскальзывание от запрошенной цены |
// MAGIC Принадлежность ордеров к советнику |
// Fine Входной параметр индикатоа Fine Fractals |
// FlatShift Входной параметр индикатоа Fine Fractals |
// Total Ключ ордеров true один ордер false на каждом сигнале |
// CloseProfit Закрытие с профитом true, false при любом профите |
//+------------------------------------------------------------------+
#property copyright "Вадим"
#property link "http://www.prostoforex.com"
extern double Lots = 0.1; //Входной лот
extern int Slip = 3;
extern int MAGIC = 777777;
extern bool Fine = true;
extern bool FlatShift = true;
extern bool Total = true;
extern bool CloseProfit = true;
int Op, Tick, OpBuy, OpSell, Max;
string Coment;
color Color;
//-------------------------Новый бар---------------------------------+
bool New_Bar=false;// Флаг нового бара
static datetime New_Time;
void NewBar()
{
New_Bar=false;// Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0];// Теперь время такое
New_Bar=true;// Поймался новый бар
}
}
//------------------------Вызов индикатора---------------------------+
double ffractals(bool fine, bool flshift, int mode, int bar)
{
return(iCustom(Symbol(),0,"Fine_Fractals",fine,flshift,mode,bar));
}
//------------------------Функция открытия ордеров-------------------+
bool SendOrders(int Op, double lots, double TP, string Coment, color Color)
{
double Prise,Tp; int ticket;
NewBar();
if(New_Bar==true)
{
if(Op==OP_BUY){RefreshRates();Prise=Ask;if(TP!=0)Tp=Prise+TP*Point;}
if(Op==OP_SELL){RefreshRates();Prise=Bid;if(TP!=0) Tp=Prise-TP*Point;}
ticket=OrderSend(Symbol(),Op,lots,Prise,Slip,0,Tp,Coment,MAGIC,0,Color);
}
}
//------------------------Функция закрытия ордеров-------------------+
void Close_BUY()
{
if(CloseProfit==true)
{
for(int i = OrdersTotal(); i >= 0 ; i-- )
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
if(OrderType()==OP_BUY&& OrderProfit()+OrderSwap()>0.0 && OrderMagicNumber()==MAGIC)
{
RefreshRates();OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Gray);
}
}
}
else
{
for(i = OrdersTotal(); i >= 0 ; i-- )
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
if(OrderType()==OP_BUY)
{
RefreshRates();OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Gray);
}
}
}
}
void Close_SELL()
{
if(CloseProfit==true)
{
for(int i = OrdersTotal(); i >= 0 ; i-- )
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
if(OrderType()==OP_SELL && OrderProfit()+OrderSwap()>0.0 && OrderMagicNumber()==MAGIC)
{
RefreshRates();OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Gray);
}
}
}
else
{
for(i = OrdersTotal(); i >= 0 ; i-- )
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
if(OrderType()==OP_SELL)
{
RefreshRates();OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Gray);
}
}
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//+---------------------Проверка позиций-----------------------------+
OpBuy=0; OpSell=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if(OrderType()==OP_BUY)
OpBuy++;
if(OrderType()==OP_SELL)
OpSell++;
}
//+---------------------Открытие и закрытие---------------+
if(ffractals(Fine,FlatShift,1,2)>0)
{
Tick=0; Op=OP_BUY; Color=Blue; Coment="BUY по сигналу!!!";
Close_SELL();
Tick++;
if(Total==true)
{
if(Tick==1 && OpBuy==0)SendOrders(Op,Lots,0,Coment,Color);
}
else
{
if(Tick==1)SendOrders(Op,Lots,0,Coment,Color);
}
}
if(ffractals(Fine,FlatShift,0,2)>0)
{
Tick=0; Op=OP_SELL; Color=Red; Coment="SELL по сигналу!!!";
Close_BUY();
Tick++;
if(Total==true)
{
if(Tick==1 && OpSell==0)SendOrders(Op,Lots,0,Coment,Color);
}
else
{
if(Tick==1)SendOrders(Op,Lots,0,Coment,Color);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+