 |
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mandor знатный пермяк

Зарегистрирован: 19.09.2005 Сообщения: 406
|
Добавлено: Сб Янв 14, 2006 6:48 pm Заголовок сообщения: Ловля импульса (по просьбе Андрея) |
цитата |
|
Недавно ночью ко мне в аську постучался Андрей и попросил нарисовать эксперт для MT4, который каждый час выставляет отложенные ордера и закрывает предыдущие ордера Buy и Sell. Я пообещал, что, если будет настроение, то нарисую.
Итак, следующая стратегия.
Как только рисуется новый бар на графике:
1. закрываются все открытые ордера Buy и Sell
2. если отложенных ордеров Buy Stop и Sell Stop нет, то они выставляютя на расстоянии Range от цены открытия нового бара
3. если отложенный ордер Buy Stop или Sell Stop есть, то он сдвигается до расстояния Range от цены открытия нового бара
По умолчанию, Range=25 (личный опыт) пипсов (пунктов).
Ниже приводится текст эксперта.
Желающие могут получить файлы эксперта по почте бесплатно. _________________ [color=indigo:82edf1fa85]По настоящему человек раскрывается только на операционном столе (Херург).[/color:82edf1fa85] |
|
Вернуться к началу |
|
mandor знатный пермяк

Зарегистрирован: 19.09.2005 Сообщения: 406
|
Добавлено: Сб Янв 14, 2006 6:48 pm Заголовок сообщения: |
цитата |
|
// Ловля импульса.mq4
// © 2003-2006 Mandor ®
// E-mail: mandor@bk.ru
// Рекомендуется период H1
extern int Range=25;
extern double Lots=0.1;
extern int MinStop=11;
// Стартовая функция
void start()
{
if(Bars<100 || IsTradeAllowed()==false) return;
// переменные
int i=0;
int res=0;
int nMagic=0;
int nTicket=0;
int nSlippage=2;
int nHour=0;
int nValue=0;
int nOpenPrice=0;
int nStopLoss=0;
int nTakeProfit=0;
int nAsk=MathRound(Ask/Point);
int nBid=MathRound(Bid/Point);
int nSpread=nAsk-nBid;
double dLots=0;
// уровни для ордеров
int nHighStop=MathRound(Open[0]/Point)+nSpread+Range;
int nLowStop =MathRound(Open[0]/Point)-Range;
// количество ордеров
int nTotalBuy=0,nTotalBuyStop=0,nTotalSell=0,nTotalSellStop=0;
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
{
if(OrderType()==OP_BUY) nTotalBuy++;
if(OrderType()==OP_BUYSTOP) nTotalBuyStop++;
if(OrderType()==OP_SELL) nTotalSell++;
if(OrderType()==OP_SELLSTOP) nTotalSellStop++;
}
}
// закрытие предыдущих ордеров Buy и Sell
if(nTotalBuy>0)
{
nTicket=0;
dLots=0.0;
nOpenPrice=0;
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()!=OP_BUY) continue;
if(OrderOpenTime()>=Time[0]) continue;
nTicket=OrderTicket();
dLots=OrderLots();
nOpenPrice=MathRound(OrderOpenPrice()/Point);
break;
}
if(nTicket>0)
{
OrderClose(nTicket,dLots,nOpenPrice*Point,nSlippage,Blue);
return;
}
}
// закрытие предыдущих ордеров Sell
if(nTotalSell>0)
{
nTicket=0;
dLots=0.0;
nOpenPrice=0;
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()!=OP_SELL) continue;
if(OrderOpenTime()>=Time[0]) continue;
nTicket=OrderTicket();
dLots=OrderLots();
nOpenPrice=MathRound(OrderOpenPrice()/Point);
break;
}
if(nTicket>0)
{
OrderClose(nTicket,dLots,nOpenPrice*Point,nSlippage,Red);
return;
}
}
// корректировка цены ордеров Buy Stop
if(nTotalBuyStop>0)
{
nOpenPrice=nHighStop;
if(nHighStop<nAsk+MinStop) nOpenPrice=nAsk+MinStop;
nTicket=0; nStopLoss=0; nTakeProfit=0;
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()!=OP_BUYSTOP) continue;
nValue=MathRound(OrderOpenPrice()/Point);
if(nValue<=nOpenPrice) continue;
nTicket=OrderTicket();
break;
}
if(nTicket>0)
{
OrderModify(nTicket,nOpenPrice*Point,nStopLoss*Point,nTakeProfit*Point,0,Blue);
return;
}
}
// корректировка цены ордеров Sell Stop
if(nTotalSellStop>0)
{
nOpenPrice=nLowStop;
if(nLowStop>nBid-MinStop) nOpenPrice=nBid-MinStop;
nTicket=0; nStopLoss=0; nTakeProfit=0;
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()!=OP_SELLSTOP) continue;
nValue=MathRound(OrderOpenPrice()/Point);
if(nValue>=nOpenPrice) continue;
nTicket=OrderTicket();
break;
}
if(nTicket>0)
{
OrderModify(nTicket,nOpenPrice*Point,nStopLoss*Point,nTakeProfit*Point,0,Red);
return;
}
}
// установка ордера Buy Stop
if(nTotalBuy==0 && nTotalBuyStop==0)
{
nOpenPrice=nHighStop;
if(nHighStop<nAsk+MinStop) nOpenPrice=nAsk+MinStop;
nStopLoss=0; nTakeProfit=0;
res=OrderSend(Symbol(),OP_BUYSTOP,Lots,nOpenPrice*Point,nSlippage,nStopLoss*Point,nTakeProfit*Point,"",nMagic,0,Blue);
return;
}
// установка ордера Sell Stop
if(nTotalSell==0 && nTotalSellStop==0)
{
nOpenPrice=nLowStop;
if(nLowStop>nBid-MinStop) nOpenPrice=nBid-MinStop;
nStopLoss=0; nTakeProfit=0;
res=OrderSend(Symbol(),OP_SELLSTOP,Lots,nOpenPrice*Point,nSlippage,nStopLoss*Point,nTakeProfit*Point,"",nMagic,0,Red);
return;
}
// конец функции
} _________________ [color=indigo:82edf1fa85]По настоящему человек раскрывается только на операционном столе (Херург).[/color:82edf1fa85] |
|
Вернуться к началу |
|
mandor знатный пермяк

Зарегистрирован: 19.09.2005 Сообщения: 406
|
Добавлено: Сб Янв 14, 2006 6:52 pm Заголовок сообщения: |
цитата |
|
Я сам пока не планирую тестирование этого эксперта в реальном времени на своих серверах.
Поэтому, просьба воспользовавшимся этим экспертом выслать мне по почте результаты его работы на ящик mandorr@gmail.com
Да прибудет с вами Профит и большой Депозит ...  _________________ [color=indigo:82edf1fa85]По настоящему человек раскрывается только на операционном столе (Херург).[/color:82edf1fa85] |
|
Вернуться к началу |
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщению Вы можете загружать файлы
|
|