Глубокоуважаемые сэры, помогите пожалуйста чайнику в mq4. Нужен скрипт, который бы устанавливал отложенные ордера (Buy и Sell Stop) по цене на 10 пунтов выше High и Low текушего дня. Стоп-лосс - 50, take profit - 20. Было бы замечательно если эти параметры (10, 50 и 20) можно было менять непосредственно в MT4. Пытался найти что-то подобное в нете, даже сам попытался состряпать, но как понимаете ничего не получилось. Заранее спасибо за помощь.
- Исполнение по запросу - Открытие и закрытие позиций - Торговля - MetaTrader 5 для iPhone
- Установка отложенных ордеров - Торговля - MetaTrader 5 для iPhone
- Исполнение по запросу - Открытие и закрытие позиций - Торговля - MetaTrader 5 для Android
// Автора не знаю, сорри
#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);
}
//+------------------------------------------------------------------+
#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);
}
//+------------------------------------------------------------------+
Спасибо. Это я видел. Но это эксперт, а как из него сделать скрипт я не знаю :(
я когда-то писАл универсальный скрипт для установки ордеров - можно доработать или просто 2 раза цеплять =)
"Поклонникам ГУО"
"Поклонникам ГУО"
Товарищи, ну помогите плиз :)
Товарищи, ну помогите плиз :)
тут типа все занятые =)))
и я в том числе. БЕсплатно - долго ждать будешь ;)
Там жыж для знающего человека работы на 20 минут насколько я понимаю :) Я тут сам пробую, но ничего не выходит :(
Подожди, а чем тебя не устраивает скрипт, предложенный Компостером? Что, очень трудно мышкой отсчитать 10 пунктов от Хай и Лоу?
Подожди, а чем тебя не устраивает скрипт, предложенный Компостером? Что, очень трудно мышкой отсчитать 10 пунктов от Хай и Лоу?
Там довольно сложно, я чот не совсем разобрался.
Если нет времени, то хотя бы скажите плиз как в скрипте указать макс. и миним. дневную цену?
не за что =)
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); }
Большое спасибо :)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь