extern double StopLoss = 240; // лось
extern double TakeProfit = 90; // язь
extern double Loss = 240; // лось в валюте
extern double Profit = 900; // язь в валюте
extern double StartHour = 9; // начало торговли
extern double EndHour = 22; // окончание торговли
extern double Speed = 90; // скорость изменения цены
extern double Lots = 1; // лот
extern int Slip = 20; // проскальзывание
Арбитражные торговые советники – это категория торговых экспертов, в основу автоматической торговли которых заложен алгоритм, основанный на заключении арбитражных сделок. Арбитражный советник может работать на основе следующих принципов: 1. Открытие разнонаправленных сделок на коррелирующих финансовых инструментах при парной корреляции близкой к 100 процентам, и ожидание положительного общего результата. 2. Отслеживание значительных отклонений между коррелируемыми финансовыми инструментами и открытие позиции на ведомом инструменте в направлении «лидирующей» пары при высоком уровне отклонении корреляции. 3. Использование отставания в передаче котировок. Отслеживание изменения цены финансового инструмента у «быстрого» брокера и открытие сделок в терминале брокера работающего с отставанием.
//+------------------------------------------------------------------+
//| Proboynik.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 StopLoss = 2000; // стоплосс ордера
extern int TakeProfit = 2000; // тейкпрофит ордера
extern int Slip = 2; // проскальзывание
extern int EndHour = 11; // час окончания торговой сессии
extern int CountHour = 8; // длительность торговой сессии(количество баров назад на Н1)
extern int Expiration = 14; // время истечения ордера
extern int Delta = 100; // расстояние от вершин
extern double Lots = 0.1; // объем позиции
extern int MAGIC = 333; // магик
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void PutOrder()
{
int res,b,s;
datetime expiration=TimeCurrent()+3600*Expiration;
double up=iHigh(Symbol(),PERIOD_H1,iHighest(NULL,0,MODE_HIGH,CountHour,1));
double dn=iLow(Symbol(),PERIOD_H1,iLowest(NULL,0,MODE_LOW,CountHour,1));
double delta=up-dn;
double price,tp,sl;
Comment("\nHigh Price ",up,"\nLow Price ",dn,"\nChannel Width ",delta);
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(Hour()==EndHour && Ask<up && b<1)
{
price=up+Delta*Point;
sl=price-StopLoss*Point;
tp=price+TakeProfit*Point;
res=OrderSend(Symbol(),OP_BUYSTOP,Lots,price,Slip,sl,tp,"",MAGIC,expiration,Blue);
}
//--- sell
if(Hour()==EndHour && Bid>dn && s<1)
{
price=dn-Delta*Point;
sl=price+StopLoss*Point;
tp=price-TakeProfit*Point;
res=OrderSend(Symbol(),OP_SELLSTOP,Lots,price,Slip,sl,tp,"",MAGIC,expiration,Red);
}
}
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| 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();
}
//---
}
//+------------------------------------------------------------------+
Для включения торговли, в настройках Trade = 1, выключение Trade = 0.
AM2