Когда в первый раз увидел данную стратегию, очень засомневался в ее граальности. Сегодня решил проверить.
Составил небольшое ТЗ:
1. На уровне закрытия американской сессии выставляем лимитные ордера.
2. Если цена прошла Delta пунктов вверх бай лимит, если вниз селл лимит.
3. Если получаем лося, то на уровне открытия ордера, выставляем противоположный лимитник.
Перепробовал несколько вариантов.
Вывод такой: Положительный результат может быть получен только подгонкой на истории.
Система не дает положительного форвард результата.
Может у вас что получится?
//+------------------------------------------------------------------+
//| Europe.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 = 200; // стоп лосс ордера
extern int TakeProfit = 400; // тейк профит ордера
extern int Delta = 100; // расстояние от вершин
extern double Lots = 0.1; // объем позиции
extern int Expiration = 14; // время истечения ордера
extern int MAGIC = 333; // магик
/*
1. На уровне закрытия американской сессии выставляем лимитные ордера
2. Если цена прошла Delta пунктов вверх бай лимит, если вниз селл лимит
3. Если получаем лося, то на уровне открытия ордера, выставляем противоположный лимитник
*/
//----
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void PutOrder()
{
int res,b,s;
//--- get value
double price;
double DayOpen=iOpen(Symbol(),PERIOD_D1,0);
datetime expiration = TimeCurrent()+3600*Expiration;
Comment("\nDay Open Price ",DayOpen,
"\nPrice ",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_BUYLIMIT)b++;
if(OrderType()==OP_SELLLIMIT)s++;
}
}
}
//--- sell
if(DayOpen-Bid>=Delta*Point && s<1)
{
price=DayOpen;
res=OrderSend(Symbol(),OP_SELLLIMIT,Lots,price,3,price+StopLoss*Point,price-TakeProfit*Point,"",MAGIC,expiration,Red);
return;
}
//--- buy
if(Ask-DayOpen>=Delta*Point && b<1)
{
price=DayOpen;
res=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price,3,price-StopLoss*Point,price+TakeProfit*Point,"",MAGIC,expiration,Blue);
return;
}
//--- sell
if(Price()>0 && Type()==0 && s<1)
{
price=Price();
res=OrderSend(Symbol(),OP_SELLLIMIT,Lots,price,3,price+StopLoss*Point,price-TakeProfit*Point,"",MAGIC,expiration,Red);
return;
}
//--- buy
if(Price()>0 && Type()==1 && b<1)
{
price=Price();
res=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price,3,price-StopLoss*Point,price+TakeProfit*Point,"",MAGIC,expiration,Blue);
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_BUYLIMIT) del=OrderDelete(OrderTicket());
if (OrderType()==OP_SELLLIMIT) 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 Price()
{
double pr;
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<=0)
{
pr=OrderOpenPrice();
}
}
return(pr);
}
//+------------------------------------------------------------------+
int Type()
{
int type;
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<=0)
{
if(OrderType()==OP_BUY) type=0;
if(OrderType()==OP_SELL) type=1;
}
}
return(type);
}
//+------------------------------------------------------------------+
//| 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();
}
//---
}
//+------------------------------------------------------------------+
Комментарии (2)
На евродолларе просадка, вообще надо поработать с настройками
19 lorik Сообщений: 357 - Лариса
13 Buff Сообщений: 401 - Артем
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий