скажите пожалуйста какой код вписать в советник, чтобы советник торговал только один раз в час
например, советник сработал, открылся ордер (дальше не интересует), нужно чтобы ордер больше не открывался на текущем баре на часовом таймфрейме
все выглядит примерно так:
int hh; int CurrentHour; CurrentHour=TimeHour(TimeCurrent()); if (CurrentHour!=hh) { OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point); hh=TimeHour(TimeCurrent()); }
но у меня открывается бесчисленное количество ордеров
Ребят, помогите найти советник для ручной торговли в тестере на истории. В кодебазе есть несколько, мне нужен тот, который управлялся перетаскиванием надписей в левом нижнем углу нрафика. Очень простой, не могу найти. HistTraining и Визуализация тестирования. Ручная торговля - не то. Очень постой советниче, там ещё можно было выставлять уровни, на которых тестирование останавливалось.
https://www.mql5.com/ru/forum/112612 Это истек срок ожидания ответа от сервера --- открылась сделка или нет. Причем нет гарантий что сделка не открылась.
Поэтому нужно как рекомендуют разработчики, через минуту проверить не открылся ли ордер и лишь потом действовать дальше.
int hh = 0; int init() { return(0); } int start() { //------------------------------------------------- int countorder; countorder=OrdersTotal(); if (countorder==0) { Alert ("открытых ордеров нет"); }else { Alert ("есть открытые ордера"); } int hh; int CurrentHour; CurrentHour=TimeHour(TimeCurrent()); if ((CurrentHour!=hh)&&(countorder==0)) { OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point); hh=TimeHour(TimeCurrent()); } //------------------------------------------------- return(0); }
int deinit() { return(0); }
сделал как сказали, не помогло, добавил учет количества открытых ордеров, теперь открывает ордера сразу после закрытия предидущего
я пошел в обход через OrderCloseTime(), вроде бы теперь работает
int countorder; countorder=OrdersTotal(); if (countorder==0) { Alert ("открытых ордеров нет"); }else { Alert ("есть открытые ордера"); } int hh; int CurrentHour; int LastOrderCloseTime; CurrentHour=TimeHour(TimeCurrent());
https://www.mql5.com/ru/forum/112612 Это истек срок ожидания ответа от сервера --- открылась сделка или нет. Причем нет гарантий что сделка не открылась.
Поэтому нужно как рекомендуют разработчики, через минуту проверить не открылся ли ордер и лишь потом действовать дальше.
ф-ция iBarShift() прекрасно работает для получения номера бара из истории, а как бы получить номер бара для вот такого кода, если сдвинуть линию вправо - за нулевой бар?
ф-ция iBarShift() прекрасно работает для получения номера бара из истории, а как бы получить номер бара для вот такого кода, если сдвинуть линию вправо - за нулевой бар?
demlin:
Еще вопрос: какой функцией можно вытащить стоимость одного пункта инструмента?
https://docs.mql4.com/ru/constants/marketinfo
MarketInfo(Symbol(), MODE_TICKVALUE);скажите пожалуйста какой код вписать в советник, чтобы советник торговал только один раз в час
например, советник сработал, открылся ордер (дальше не интересует), нужно чтобы ордер больше не открывался на текущем баре на часовом таймфрейме
все выглядит примерно так:
int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
if (CurrentHour!=hh)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}
но у меня открывается бесчисленное количество ордеров
Всем привет!
Подскажите, что сие означает:
Order buy ...... failed [Trade timeout]
Конкретно интересует что это за таймаут
https://www.mql5.com/ru/forum/112612
Это истек срок ожидания ответа от сервера --- открылась сделка или нет. Причем нет гарантий что сделка не открылась.
Поэтому нужно как рекомендуют разработчики, через минуту проверить не открылся ли ордер и лишь потом действовать дальше.
rlx:
нужно установить перед start() и init()
int hh = 0;
int init()
{
return(0);
}
int start()
{
//-------------------------------------------------
int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("открытых ордеров нет");
}else
{
Alert ("есть открытые ордера");
}
int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
if ((CurrentHour!=hh)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}
//-------------------------------------------------
return(0);
}
int deinit()
{
return(0);
}
сделал как сказали, не помогло, добавил учет количества открытых ордеров, теперь открывает ордера сразу после закрытия предидущего
я пошел в обход через OrderCloseTime(), вроде бы теперь работает
int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("открытых ордеров нет");
}else
{
Alert ("есть открытые ордера");
}
int hh;
int CurrentHour;
int LastOrderCloseTime;
CurrentHour=TimeHour(TimeCurrent());
OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
hh=TimeHour(OrderCloseTime());
if ((CurrentHour!=hh)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
}
https://www.mql5.com/ru/forum/112612
Это истек срок ожидания ответа от сервера --- открылась сделка или нет. Причем нет гарантий что сделка не открылась.
Поэтому нужно как рекомендуют разработчики, через минуту проверить не открылся ли ордер и лишь потом действовать дальше.
Не хочется быть занудой, однако..
Объясните мне, как откроется ордер, если OrderTotal() равен нулю.
Спасибо.
Ниже рисунок, на котором отмечены скобки ограничиваюшие блок кода, который исполняется при условии
На операции OrderSend() это условие не влияет.
как получить номер бара, в "будущем" :)
ф-ция iBarShift() прекрасно работает для получения номера бара из истории, а как бы получить номер бара для вот такого кода, если сдвинуть линию вправо - за нулевой бар?
как получить номер бара, в "будущем" :)
ф-ция iBarShift() прекрасно работает для получения номера бара из истории, а как бы получить номер бара для вот такого кода, если сдвинуть линию вправо - за нулевой бар?
Можно получить смещение относительно Time[0]
Можно получить смещение относительно Time[0]
Спасибо! Теперь все ОК!