Скачать MetaTrader 5

Нужен скрипт на установку отложенных ордеров

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как протестировать программу перед покупкой?
Forex Trader
114257
Forex Trader 2005.10.13 17:57 
Глубокоуважаемые сэры, помогите пожалуйста чайнику в mq4. Нужен скрипт, который бы устанавливал отложенные ордера (Buy и Sell Stop) по цене на 10 пунтов выше High и Low текушего дня. Стоп-лосс - 50, take profit - 20. Было бы замечательно если эти параметры (10, 50 и 20) можно было менять непосредственно в MT4. Пытался найти что-то подобное в нете, даже сам попытался состряпать, но как понимаете ничего не получилось. Заранее спасибо за помощь.
Forex Trader
114257
Forex Trader 2005.10.13 18:14  
// Автора не знаю, сорри


#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//---- input parameters
extern int Order_Point=10; // На каком расстоянии выставлять ордера от дневных мах/мин
extern int SL_Point=50; // Величина стоп-лосcа
extern int TS1_Point=10; // Через сколько пунктов прибыли переностить стоп-лосс в безубыточность
extern int TS2_Point=15; // Величина трейлин-стопа
extern double Lots=0.1; // Открываться лотом
extern double TurnLots=0.2; // Величина стопа-переворота
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int total, cnt, OpenOrder, DefOrder, pos;
double max, min, SL;
datetime time;
//----

// Устанавливаем время выставления ордеров для различных валютных пар
if(Symbol()=="USDCAD")
time=StrToTime("12:00");
else
time=StrToTime("09:00");

// Считаем количество открытых и отложенных ордеров по текущему инструменту
total=OrdersTotal();
OpenOrder=0;
DefOrder=0;
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
OpenOrder++; // количество открытых ордеров
else
DefOrder++; // количество закрытых ордеров
}
}

// Проверяем не пора ли устанавливать отложенные ордера
if(TimeHour(CurTime())==TimeHour(time) && TimeMinute(CurTime())<5 && OpenOrder==0 && DefOrder==0)
{
total=24*60/Period()+1;
max=High[0];
min=Low[0];
for(pos=0; pos<total; pos++)
{
if (TimeDayOfYear(Time[pos])==TimeDayOfYear(CurTime()))
{
if(High[pos]>max)
max=High[pos]; // Дневной экстремум
if(Low[pos]<min)
min=Low[pos]; // Дневной экстремум
}
}
OrderSend(Symbol(),OP_BUYSTOP,Lots,max+Order_Point*Point,3,max-(SL_Point-Order_Point)*Point,0,"BUY Scalping",16384,0,CLR_NONE);
OrderSend(Symbol(),OP_SELLSTOP,Lots,min-Order_Point*Point,3,min+(SL_Point-Order_Point)*Point,0,"SELL Scalping",16384,0,CLR_NONE);
}

// В случае открытия ордера удаляем противоположный ордер
// а так же трейлим профит на безубыточность
if(OpenOrder==1 && DefOrder==1)
{
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==16384)
{
// Установка стоп лоса в безубыточность
if(OrderType()==OP_BUY && (Bid-OrderOpenPrice())>(TS1_Point*Point) && OrderStopLoss()<OrderOpenPrice())
OrderModify(OrderTicket(),0,OrderOpenPrice()+1*Point,0,0,CLR_NONE);
if(OrderType()==OP_SELL && (OrderOpenPrice()-Ask)>(TS1_Point*Point) && OrderStopLoss()>OrderOpenPrice())
OrderModify(OrderTicket(),0,OrderOpenPrice()-1*Point,0,0,CLR_NONE);
// Трейлинг открытых позиций
if(OrderType()==OP_BUY && (Bid-OrderStopLoss())>(TS2_Point*Point) && OrderStopLoss()>OrderOpenPrice())
OrderModify(OrderTicket(),0,Bid-TS2_Point*Point,0,0,CLR_NONE);
if(OrderType()==OP_SELL && (OrderStopLoss()-Ask)>(TS2_Point*Point) && OrderStopLoss()<OrderOpenPrice())
OrderModify(OrderTicket(),0,Ask+TS2_Point*Point,0,0,CLR_NONE);
// Удаление противоположных ордеров
if(OrderType()==OP_BUYSTOP && OrderLots()==Lots)
{
OrderDelete(OrderTicket());
DefOrder--;
}
if(OrderType()==OP_SELLSTOP && OrderLots()==Lots)
{
OrderDelete(OrderTicket());
DefOrder--;
}
}
}
}

//Выставляем открытие стопом-переворотом
if(OpenOrder==1 && DefOrder==0)
{
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==16384)
{
if(OrderType()==OP_BUY && OrderLots()==Lots)
{
SL=OrderStopLoss();
OrderSend(Symbol(),OP_SELLSTOP,TurnLots,SL,3,SL+SL_Point*Point,0,"TurnSELL Scalping",16384,0,CLR_NONE);
}
if(OrderType()==OP_SELL && OrderLots()==Lots)
{
SL=OrderStopLoss();
OrderSend(Symbol(),OP_BUYSTOP,TurnLots,SL,3,SL-SL_Point*Point,0,"TurnBUY Scalping",16384,0,CLR_NONE);
}
}
}
}

// В случае закрытия основной позиции удаляем стоп переворотом
if(OpenOrder==0 && DefOrder==1)
{
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==16384 && OrderLots()==TurnLots)
OrderDelete(OrderTicket());
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Forex Trader
114257
Forex Trader 2005.10.13 18:19  
Спасибо. Это я видел. Но это эксперт, а как из него сделать скрипт я не знаю :(
Forex Trader
114257
Forex Trader 2005.10.13 19:07  
я когда-то писАл универсальный скрипт для установки ордеров - можно доработать или просто 2 раза цеплять =)
"Поклонникам ГУО"
Forex Trader
114257
Forex Trader 2005.10.14 15:53  
Товарищи, ну помогите плиз :)
Forex Trader
114257
Forex Trader 2005.10.14 19:34  
Товарищи, ну помогите плиз :)

тут типа все занятые =)))
и я в том числе. БЕсплатно - долго ждать будешь ;)
Forex Trader
114257
Forex Trader 2005.10.14 19:47  
Там жыж для знающего человека работы на 20 минут насколько я понимаю :) Я тут сам пробую, но ничего не выходит :(
Forex Trader
114257
Forex Trader 2005.10.14 20:58  
Подожди, а чем тебя не устраивает скрипт, предложенный Компостером? Что, очень трудно мышкой отсчитать 10 пунктов от Хай и Лоу?
Forex Trader
114257
Forex Trader 2005.10.14 21:07  
Подожди, а чем тебя не устраивает скрипт, предложенный Компостером? Что, очень трудно мышкой отсчитать 10 пунктов от Хай и Лоу?

Там довольно сложно, я чот не совсем разобрался.
Если нет времени, то хотя бы скажите плиз как в скрипте указать макс. и миним. дневную цену?
Forex Trader
114257
Forex Trader 2005.10.14 21:46  
не за что =)
extern int 		_MagicNumber 			= 3140;
extern double 	Lot 						= 0.1;
extern int		OpenLuft					= 10;
extern int		StopLoss					= 20;
extern int		TakeProfit				= 50;

int start()
{
	double _OpenPriceLevel = 0.0, _StopLossLevel = 0.0, _TakeProfitLevel = 0.0;

	if ( OpenLuft < 0 )
	{ return(0); }
	else
	{ _OpenPriceLevel = NormalizeDouble( iHigh( Symbol(), PERIOD_D1, 0 ) + OpenLuft*Point, Digits ); }

	if ( StopLoss <= 0 )
	{ _StopLossLevel = 0.0; }
	else
	{ _StopLossLevel = NormalizeDouble( _OpenPriceLevel - StopLoss*Point, Digits ); }

	if ( TakeProfit <= 0 )
	{ _TakeProfitLevel = 0.0; }
	else
	{ _TakeProfitLevel = NormalizeDouble( _OpenPriceLevel + TakeProfit*Point, Digits ); }

	OrderSend ( Symbol(), OP_BUYSTOP, Lot, _OpenPriceLevel, 3, _StopLossLevel, _TakeProfitLevel, "opened by script", _MagicNumber, 0, Lime );

	_OpenPriceLevel = NormalizeDouble( iLow( Symbol(), PERIOD_D1, 0 ) - OpenLuft*Point, Digits );

	if ( StopLoss <= 0 )
	{ _StopLossLevel = 0.0; }
	else
	{ _StopLossLevel = NormalizeDouble( _OpenPriceLevel + StopLoss*Point, Digits ); }

	if ( TakeProfit <= 0 )
	{ _TakeProfitLevel = 0.0; }
	else
	{ _TakeProfitLevel = NormalizeDouble( _OpenPriceLevel - TakeProfit*Point, Digits ); }

	OrderSend ( Symbol(), OP_SELLSTOP, Lot, _OpenPriceLevel, 3, _StopLossLevel, _TakeProfitLevel, "opened by script", _MagicNumber, 0, Red );

return(0);
}
Forex Trader
114257
Forex Trader 2005.10.14 21:54  
Большое спасибо :)
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий