void ProcessOrders(string str)
Размещает отложенные ордера (Buy Limit, Buy Stop, Sell Limit, Sell Stop) на указанном валютном паре с настройками стоп-лосса, тейк-профита и истечения.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «news trading pending order ea v1.6.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Данный файл представляет собой библиотеку MQL4 для автоматического размещения отложенных ордеров в контексте торговли новостями. Код реализует размещение Buy Limit, Buy Stop, Sell Limit и Sell Stop ордеров на выбранных валютных парах с возможностью задания стоп-лосса, тейк-профита и времени истечения ордера.
Библиотека содержит функцию управления трейлинг-стопом для активных ордеров Buy и Sell, а также функцию удаления отложенных ордеров в заданном временном интервале. При инициализации советник проверяет выбранные валютные пары, настраивает трейлинг-стоп и очищает предыдущие отложенные ордера.
Пользователь может настраивать параметры торговли через входные параметры: размер лота, расстояние от текущей цены, количество ордеров каждого типа, магический номер и другие. Доступны переключатели для работы как с мажорными, так и с минорными парами, а также для управления типами размещаемых ордеров.
| Настройка | Описание |
|---|---|
| Lots | Размер лота для размещаемых ордеров. |
| TakeProfit | Уровень тейк-профита для ордеров (в пунктах). Если значение равно 0 или меньше, тейк-профит не устанавливается. |
| StopLoss | Уровень стоп-лосса для ордеров (в пунктах). Если значение равно 0 или меньше, стоп-лосс не устанавливается. |
| StartDistance | Расстояние от текущей цены до первого размещаемого ордера (в пунктах). |
| SpacingBetweenOrders | Расстояние между последовательно размещаемыми ордерами одного типа (в пунктах). |
| TrailingStop | Расстояние трейлинг-стопа (в пунктах). Если значение равно 0, трейлинг-стоп не активен. |
| NumberOfOrders | Количество ордеров каждого типа, которые будут размещены. |
| ExpireMinutes | Время жизни ордера в минутах. Если значение равно 0 или меньше, ордер не имеет ограничения по времени. |
| MagicNumber | Магический номер для идентификации ордеров, размещённых данным советником. |
| Slippage | Допустимое отклонение цены при размещении ордера (в пунктах). |
| Comments | Текстовый комментарий, добавляемый к каждому размещённому ордеру. |
| NewsCurrency | Выбранная валюта влияния новостей, определяющая, на каких парах размещать ордера. |
| MajorsMinors | При включении советник работает как с мажорными, так и с минорными валютными парами. |
| ThisChart | При включении советник размещает ордера на символе текущего графика. |
| BuyLimit | Включает или отключает размещение ордеров Buy Limit. |
| SellLimit | Включает или отключает размещение ордеров Sell Limit. |
| BuyStop | Включает или отключает размещение ордеров Buy Stop. |
| SellStop | Включает или отключает размещение ордеров Sell Stop. |
Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 6
void ProcessOrders(string str)
Размещает отложенные ордера (Buy Limit, Buy Stop, Sell Limit, Sell Stop) на указанном валютном паре с настройками стоп-лосса, тейк-профита и истечения.
void CheckCurrencyPairs()
Определяет, на каких валютных парах открывать сделки, исходя из выбранной валюты новостей, настройки работы с мажорами/минорами и текущего графика.
void SetTrailingStop()
Управляет трейлинг-стопом для существующих ордеров Buy и Sell, перемещая стоп-лосс в нужную сторону при движении цены.
void DeleteOrders()
Удаляет все отложенные ордера (не Buy/Sell) в течение заданного временного окна.
int Max(int value1,int value2)
Возвращает большее из двух целочисленных значений.
int OnInit()
Инициализирует советник при запуске: проверяет валютные пары, настраивает трейлинг-стоп и удаляет отложенные ордера.
#property version "1.6"
#property strict
#include <stderror.mqh>
#include <stdlib.mqh>
enum curr
{
EUR,
GBP,
USD,
JPY
};
input double Lots =0.01; // Lot size
input double TakeProfit =0.0; // Take profit (Points)
input double StopLoss =5.0; // Stop loss (Points)
input double StartDistance =5.0; // Spacing from current price (Points)
input double SpacingBetweenOrders =10.0; // Spacing between orders (Points)
input double TrailingStop =0.0; // Trailing Stop
input int NumberOfOrders =1; // Number of orders of each type
input int ExpireMinutes =5; // Order expiration time (Minutes)
input int MagicNumber =0; // Magic Number
input int Slippage =3; // Slippage
input string Comments =""; // Comment
input curr NewsCurrency =USD; // News impact currency
input bool MajorsMinors =True; // Open trade in majors and minors
input bool ThisChart =True; // Open trade in this chart symbol
input bool BuyLimit =True; // Open Buy Limit orders
input bool SellLimit =True; // Open Sell Limit orders
input bool BuyStop =True; // Open Buy Stop orders
input bool SellStop =True; // Open Sell Stop orders
void ProcessOrders(string str);
void CheckCurrencyPairs();
void SetTrailingStop();
void DeleteOrders();
int Max(int value1,int value2);
int OnInit()
{
// код доступен только после оплаты
}
int Max(int value1,int value2)
{
if(value1>value2) return value1;
else return value2;
}
void DeleteOrders()
{
int i,Total,Type;
bool Flag=True;
datetime TimeEnd=TimeLocal()+5*60;
while(Flag && TimeLocal()<=TimeEnd)
{
Flag=False;
Total=OrdersTotal();
for(i=0;i<Total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
Type=OrderType();
if(Type!=OP_BUY && Type!=OP_SELL)
if(OrderDelete(OrderTicket(),clrNONE)==false)
Flag=True;
}
else
Flag=True;
}
}
return;
}
void CheckCurrencyPairs()
{
string Pairs[]={"EUR","GBP","USD","JPY"};
string CurrencySymbol;
bool Flag=True;
int i;
if(MajorsMinors)
{
for(i=0;i<4;i++)
{
if(i==NewsCurrency) continue;
if(i<NewsCurrency)
CurrencySymbol=StringConcatenate(Pairs[i],EnumToString(NewsCurrency));
else if(i>NewsCurrency)
CurrencySymbol=StringConcatenate(EnumToString(NewsCurrency),Pairs[i]);
ProcessOrders(CurrencySymbol);
if(CurrencySymbol==Symbol())
Flag=False;
}
}
if(ThisChart && Flag)
ProcessOrders(Symbol());
return;
}
void SetTrailingStop()
{
int i,Total,Type;
double OpenPrice,MarketPrice,TSPrice,Points,Spread;
string CurrencySymbol;
datetime TimeEnd=TimeLocal()+Max(ExpireMinutes,15)*60;
Total=OrdersTotal();
while(TimeLocal()<=TimeEnd && Total>0)
{
if(TrailingStop==0.0) continue;
Total=OrdersTotal();
for(i=0;i<Total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
Type=OrderType();
if(Type==OP_BUY)
{
OpenPrice=OrderOpenPrice();
CurrencySymbol=OrderSymbol();
Points=MarketInfo(CurrencySymbol,MODE_POINT);
Spread=MarketInfo(CurrencySymbol,MODE_SPREAD);
MarketPrice=MarketInfo(CurrencySymbol,MODE_ASK);
TSPrice=OpenPrice+MathMax(MathCeil(TrailingStop),Spread)*Points;
if(MarketPrice>TSPrice && OrderStopLoss()<TSPrice)
if(OrderModify(OrderTicket(),OpenPrice,TSPrice,OrderTakeProfit(),OrderExpiration(),clrNONE)==False)
Alert(ErrorDescription(GetLastError()));
}
else if(Type==OP_SELL)
{
OpenPrice=OrderOpenPrice();
CurrencySymbol=OrderSymbol();
Points=MarketInfo(CurrencySymbol,MODE_POINT);
Spread=MarketПоказано первые 50% кода (символов: 6066)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.