найти закономерность — автоматизировать это не получится
extern int StopLoss = 1900;//Стоплосс ордера
extern int TakeProfit = 350; //Тейкпрофит ордера
extern int Profit = 30; //Профит в долларах
extern int StartHour = 9; //Час начала торговли(терминальное время)
extern int EndHour = 23; //Час после которoго закрываем все позиции
extern int StopDist = 250; //Расстояние от цены для установки ордера Stop Orders
extern int LimitDist = 250; //Расстояние от цены для установки ордера Limit Orders
extern int StopStep = 250; //Шаг установки ордеров Stop Orders
extern int LimitStep = 250; //Шаг установки ордеров Limit Orders
extern int Count = 10; //Количество устанавливаемых ордеров
extern int StopLimit = 0; //0 - Только стоповые ордера, 1 - только лимитные, 2 - и стоп и лимит
extern int Expiration = 14; //Время истечения ордера
extern bool BU = true;//Bключение вывода позиций в безубыток
extern int BUCount = 3; //Количество открытых позиций когда нужно выводить в БУ
extern double StopLots = 0.1; //Лот Stop Orders
extern double LimitLots = 0.1; //Лот Limit Orders
extern double KLotStop = 1; //Коэффициент умножения лота Stop Orders
extern double KLotLimit = 1; //Коэффициент умножения лота Limit Orders
//+------------------------------------------------------------------+
//| DeltaPro.mq4 |
//| Copyright 2014, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, AM2"
#property link "http://www.forexsystems.biz"
#property description "Forex expert advisor"
//--- Inputs
extern int SL = 200; // cтоплосс ордера
extern int TP = 200; // тейкпрофит ордера
extern int Delta = 200; // расстояние от цены до ордера
extern int Slip = 30; // проскальзывание ордера
extern int Try = 5; // количество попыток выставить ордер
extern double Lots = 0.1; // объем позиции
extern int MAGIC = 333; // магик
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void PutOrder()
{
int res,b,s,err;
double price;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUYSTOP)b++;
if(OrderType()==OP_SELLSTOP)s++;
}
}
}
//--- buy
if(b<1)
{
price=Ask+Delta*Point;
res=OrderSend(Symbol(),OP_BUYSTOP,Lots,fND(price),Slip,fND(price-SL*Point),fND(price+TP*Point),"",MAGIC,0,Blue);
if(res<0)
{
Print("Ошибка: ",GetLastError());
err++;
Sleep(500);
RefreshRates();
}
else
Print("OK Order BUYSTOP");
}
//--- sell
if(s<1)
{
price=Bid-Delta*Point;
res=OrderSend(Symbol(),OP_SELLSTOP,Lots,fND(price),Slip,fND(price+SL*Point),fND(price-TP*Point),"",MAGIC,0,Red);
if(res<0)
{
Print("Ошибка: ",GetLastError());
err++;
Sleep(500);
RefreshRates();
}
else
Print("OK Order SELLSTOP");
}
if (err>Try) return;
}
//+------------------------------------------------------------------+
void DelOrder()
{
bool del;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if (OrderType()==OP_BUYSTOP) del=OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
}
}
//+------------------------------------------------------------------+
bool NewBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+
int CountTrades()
{
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()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
{
if(n<0) return(NormalizeDouble(d, Digits));
return(NormalizeDouble(d, n));
}
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- check for history and trading
if(Bars<100 || IsTradeAllowed()==false)
return;
if(NewBar()==true)
{
if(CountTrades()<1)PutOrder();
if(CountTrades()>0)DelOrder();
}
//---
}
//+------------------------------------------------------------------+
AM2