{
if(OrdersTotal()==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}
}
Это решение, но это не лучшее решение, как вы узнаете, если продолжите.
Но оно может помочь вам в данный момент.
Это решение, но это не лучшее решение, как вы узнаете, если продолжите.
Но оно может помочь вам на данный момент.
да, это решило проблему в теме, но когда он закрывается, он также создает новый ордер, если он все еще выше облака. Не могли бы вы помочь мне решить эту новую проблему?
Как блокировать все новые ордера после успешного закрытия первого?
Вы можете создать флаг.
Затем вы можете установить значение в единицу, когда заказ размещен.
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
order=1;
}
}
Но это даст вам предупреждение, что вам нужно проверить возвращаемое значение функции ordersend.
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
int ticket=OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if(ticket!=-1)
{
order=1;
}
}
}
}
Почему бы не установить флаг в зависимости от того, был ли заказ успешно размещен или нет?
В этом случае, если ваш ордер не удался, он продолжит попытку.
да, это решило проблему в теме, но когда он закрывается, он также создает новый ордер, если он все еще выше облака. Не могли бы вы помочь мне решить эту новую проблему?
Как блокировать все новые ордера после успешного закрытия первого?
Как уже намекнул Марко, вы, вероятно, столкнетесь с другими проблемами.
Что если есть открытый ордер на другом символе?
Что если есть ордера, управляемые другим советником?
Что если есть отложенные ордера?
Что если триггер все еще активен, когда вы закрываете первый?
В ответ на последний вопрос вы можете использовать флаг, как предложил Марко. Только помните, что вам нужно решить, когда сбросить флаг, иначе советник больше никогда не совершит ни одной сделки.
В качестве альтернативы можно проверить пересечение / изменение состояния с ниже/в облаке на выше облака.
я поставил ваш код и он говорит, что билет не раскрыт, поэтому я объявил его, но теперь код открывает несколько заказов, как и раньше, как теперь действовать?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
я поставил ваш код и он говорит, что билет не раскрыт, поэтому я объявил его, но теперь код открывает несколько заказов, как и раньше, как теперь действовать?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Возможно, вам будет полезно почитать об области видимости переменных.
Что происходит со значением ордера каждый тик?
Итак, вы объявляете билет с флагом boolean.
int ticket;
А затем
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>0)
{
order=1;
}
}
}
}
Вы не можете объявить их в OnTick(), потому что их значение будет сбрасываться при каждом тике.
Также обратите внимание, что OrderSend либо возвращает номер билета, либо -1 минус один в случае неудачи.
Я поставил
bool заказ и
int ticket
на глобальные переменные, а остальной код на OnTick, но все равно не делает никаких записей теперь
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я новичок в mql4 и этот код открывает несколько ордеров, как я могу избежать этого? Он должен открывать только один ордер до его закрытия,
как я могу это сделать?
Спасибо
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}