Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1347
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Никак не могу допилить советника. Суть простая - черчу сначала один прямоугольник, который является триггером на покупку, в случае попадания цены в его область, рисую второй - попала туда цена - сделка должна закрыться.
А выходит следующее - цена начинает открываться и закрываться внутри области. Что я делаю не так?
//+------------------------------------------------------------------+
//| RECTANGLES OP_BUY.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property version "1.00"
#property strict
extern int Magic = 777701;
extern double Lot = 0.01;
extern int Slippage = 3;
int ticket;
int OrderOfSymbol;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//Проверим что есть ли прямоугольник :
if(ObjectsTotal(OBJ_RECTANGLE)==0)
{Comment("Нарисуйте прямоугольник для открытия сделки по покупке!");}
//Получим ИМЯ прямоугольника:
for(int n=0;n<ObjectsTotal();n++)
{
string name=ObjectName(n);
if(ObjectType(name)==OBJ_RECTANGLE)
{
datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1);
datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2);
double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);
double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);
OrderOfSymbol=CounterOrderTradeType(-1);
if (OrderOfSymbol<1)
if (Close[1]>Open[1])
if(TimeCurrent()>t1a && TimeCurrent()< t2a &&
Bid < p1a && Bid > p2a )
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "открыт ордер на покупку", Magic, 0, Blue);
}
}
}
//Проверим что есть ли уже второй прямоугольник :
if(ObjectsTotal(OBJ_RECTANGLE)==1)
{Comment("Нарисуйте второй прямоугольник для закрытия сделки по покупке!");}
//Получим ИМЯ прямоугольника:
for(int n=0;n<ObjectsTotal();n++)
{
string name=ObjectName(n);
if(ObjectType(name)==OBJ_RECTANGLE)
{
datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1);
datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2);
double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);
double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);
if(TimeCurrent()>t1b && TimeCurrent()< t2b &&
Bid < p1b && Bid > p2b )
CloseBuyPositions1();
}
}
//Проверим что есть ли уже 2 прямоугольник :
if(ObjectsTotal(OBJ_CHANNEL)==2)
{Comment("Области по открытию и закрытию ордеров по покупке выставлены - идет торговля!");}
}
//+------------------------------------------------------------------+
void CloseBuyPositions1()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");}
}
}
}
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
{
int cnt=0;
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
if(OrderSymbol()!=_Symbol) continue;
if(order_type == OrderType() || order_type == -1) cnt++;
}
//----
return(cnt);
}
Есть вот такая функция для размещения кода, всем будет удобнее читать твой код чтобы помочь.
Есть вот такая функция для размещения кода, всем будет удобнее читать твой код чтобы помочь.
Ему это не поможет. Пустые строки читают только такие как он сам.
Порт-моне тв:
Что я делаю не так?
Нет уникальности имени квадрата, у тебя любой квадрат - условие для покупки и продажи
Это тоже тебе поможет
Подскажите, пожалуйста, как исправить ошибку
Вот ошибка
'CornerInfo' - constant cannot be modified Wa.mq4 22 1 'CornerInfo1' - constant cannot be modified Wa.mq4 23 1 2 errors, 0 warnings 3 1
Спасибо!
Не за что )
Подскажите, пожалуйста, как исправить ошибку
Вот ошибка
input переменные нельзя изменять.
Можно так:
Не за что )
input переменные нельзя изменять.
Можно так:
Спасибо понял
Это тоже тебе поможет
не помогло. И я понял что значения квадрата берутся не из двух как надо, а из последнего. Я это и не знаю как победить. Неужели бы я не догадался сам в этом. А вот инструментом mql в совершенстве не владею, собственно поэтому тут и спрашиваю, а вы мне тут расчески предлагаете.
не помогло. И я понял что значения квадрата берутся не из двух как надо, а из последнего. Я это и не знаю как победить. Неужели бы я не догадался сам в этом. А вот инструментом mql в совершенстве не владею, собственно поэтому тут и спрашиваю, а вы мне тут расчески предлагаете.
Я тебе расчески предлагаю, для того чтобы твой код был удобно читаемым для тех к кому ты обращаешься(здесь нет никакого злого умысла)
Что касается твоих квадратов, то для того чтобы их правильно определить надо понимать их происхождение, т.е. ты их рисуешь или советник