Советник работает в определённые часы.
Он основан на медвежьем и бычьем поглощении. Ордер должен открываться на 0 свече. Объём поглотившей свечи должен быть больше объёма свечи, которую поглощают. И тело свечи, которую поглощают должно быть меньше.
Помогите пожалуйста исправить ошибки, недавно изучаю MQL4, сложно пока разобраться
Не хватает фигурной скобки и тейков в функции OrderSend
Скажи какой код читать приятней
extern int OpenTime = 8; //время открытия extern int CloseTime = 19; //время закрытия extern double Lots = 0.1; //лот //+========================================================================+// void OnTick() { double SL = NormalizeDouble(Open[1], Digits()); bool is_siesta = false; int numbers = Digits(); //количество знаков после запятой на текущем финансовом инструкменте int ticket1; int ticket2; if(Hour() >= OpenTime && Hour() < CloseTime) is_siesta = true; if(is_siesta) //если время работы советника соблюдается.... { if((Close[1] > Open[1] && Close[2] < Open[2]) && (NormalizeDouble(Close[1] - Open[1],numbers) > NormalizeDouble(Open[2] - Close[2],numbers)) && Volume[1] > Volume[2]) { if(TimeHour(TimeCurrent()) == Time[0]) { ticket1 = OrderSend(Symbol(), OP_BUY , Lots, Ask, 3, SL, */Сюда поставь тейк,/* "", 123, 0 , clrBlue); if(ticket1 < 0) Print("Ошибка открытия ордера"); else Print("Ордер на покупку открылся"); } } if((Close[1] < Open[1] && Close[2] > Open[2]) && (NormalizeDouble(Open[1] - Close[1],numbers) > NormalizeDouble(Close[2] - Open[2],numbers)) && Volume[1] > Volume[2]) { if(TimeHour(TimeCurrent()) == Time[0]) { ticket2 = OrderSend(Symbol(), OP_SELL , Lots, Bid, 3, SL, */Сюда поставь тейк,/* "", 123, 0 , clrRed); if(ticket2 < 0) Print("Ошибка открытия ордера"); else Print("Ордер на покупку открылся"); } } } }
Не хватает фигурной скобки и тейков в функции OrderSend
Скажи какой код читать приятней
Я в следующий раз нормально отформатирую,а сам код, не считая фигурной скобки, нормальный,и что такое тейки?
Я понял,вы имели ввиду тейкпрофит. То что его нету,так и задумано,нужно только сделать условие,(я не знаю ещё как ), чтобы ордер закрывался, когда нулевой бар сформировался,то есть время закрытия нулевого бара
думаю это сделать с помощью if(TimeCurrent() == Close[1]) { //условие }. Подскажите,если есть способ красивее)
blade_runner:
Я в следующий раз нормально отформатирую,а сам код, не считая фигурной скобки, нормальный,и что такое тейки?
Я понял,вы имели ввиду тейкпрофит. То что его нету,так и задумано,нужно только сделать условие,(я не знаю ещё как ), чтобы ордер закрывался, когда нулевой бар сформировался,то есть время закрытия нулевого бара
думаю это сделать с помощью if(TimeCurrent() == Close[1]) { //условие }. Подскажите,если есть способ красивее)
Если тейков ставить не хочешь значит он равен нулю. Так и поставь 0.
Так не будет работать потому, что Close[1] это цена а не время и сравнивать цену и время...
Вот функция
bool newBar() { static datetime lastbar = 0; datetime curbar = Time[0]; if(lastbar != curbar) { lastbar = curbar; return (true); } else return(false); }/*******************************************************************/
Условие будет такое if(newBar())
Если тейков ставить не хочешь значит он равен нулю. Так и поставь 0.
Так не будет работать потому, что Close[1] это цена а не время и сравнивать цену и время...
Вот функция
Условие будет такое if(newBar())
спасибо большое))буду пробовать
Хотел ещё спросить,как красиво так же вставлять на форуме код?Чтобы выглядел как в MetaEditor?
Над областью редактирования сообщений, если приглядеться, есть ряд кнопочек, среди них найдите SRC.
Если тейков ставить не хочешь значит он равен нулю. Так и поставь 0.
Так не будет работать потому, что Close[1] это цена а не время и сравнивать цену и время...
Вот функция
Условие будет такое if(newBar())
Взгляните напоследок пожалуйста ещё раз на код, там ошибки, не могу понять в чём они..
//+=======================Внешние переменные==================================================+// extern int OpenTime = 8; //время открытия extern int CloseTime = 19; //время закрытия extern double Lots = 0.1 //лот //+========================================================================+// //+=================================Начало Функции OnTick()=======================================+// void OnTick() { bool is_siesta = false; int numbers = Digits(); //количество знаков после запятой на текущем финансовом инструкменте double SL = NormalizeDouble(Open[1], Digits()); int ticket1; int ticket2; if(Hour()>= OpenTime && Hour()< CloseTime) is_siesta=true; if(is_siesta) //если время работы советника соблюдается.... { if( (Close[1] > Open[1] && Close[2] < Open[2]) && (NormalizeDouble(Close[1] - Open[1],numbers) > NormalizeDouble(Open[2] - Close[2],numbers)) && Volume[1] > Volume[2]) { if(TimeHour(TimeCurrent()) == Time[0]) { ticket1 = OrderSend(Symbol(), OP_BUY , Lots, Ask, 3, Low[1],0, "", 123, 0 , clrBlue); if(ticket1 < 0) Print("Ошибка открытия ордера"); else Print("Ордер на покупку открылся"); } if(newBar()) { OrderSelect(ticket1, SELECT_BY_TICKET, MODE_TRADES); OrderClose(ticket1, Lots, Bid, 3, clrNONE); } } if( (Close[1] < Open[1] && Close[2] > Open[2]) && (NormalizeDouble(Open[1] - Close[1],numbers) > NormalizeDouble(Close[2] - Open[2],numbers)) && Volume[1] > Volume[2]) { if(TimeHour(TimeCurrent()) == Time[0]) { ticket2 = OrderSend(Symbol(), OP_SELL , Lots, Bid, 3, Close[1],0, "", 321, 0 , clrRed); if(ticket2 < 0) Print("Ошибка открытия ордера"); else Print("Ордер на покупку открылся"); } if(newBar()) { OrderSelect(ticket2, SELECT_BY_TICKET, MODE_TRADES); OrderClose(ticket2, Lots, Ask, 3, clrNONE); } } } } //+---------------------Завершение функции Ontick()----------------------+// //+======================Начало функции newbar()===============================================+// bool newBar() { static datetime lastbar = 0; datetime curbar = Time[0]; if(lastbar != curbar) { lastbar = curbar; return (true); } else return(false); } //+==========================Конец функции newbar()===========================================+//
Вот функция
bool newBar() { static datetime lastbar = 0; datetime curbar = Time[0]; if(lastbar != curbar) { lastbar = curbar; return (true); } else return(false);
В предложенной функции можно выбросить слово else. Код будет короче, быстродействие выше. Рельефнее выступит значение return. А какой-то столп программирования утверждал, что return должен быть один.
bool Результат = false; if (.. .. ..) { .. .. .. Результат = true; } return Результат;
Кстати, return - это оператор. Разумеется, выражение можно взять в скобки. Тогда внешне будет похоже на функцию
В предложенной функции можно выбросить слово else. Код будет короче, быстродействие выше. Рельефнее выступит значение return. А какой-то столп программирования утверждал, что return должен быть один.
Кстати, return - это оператор. Разумеется, выражение можно взять в скобки. Тогда внешне будет похоже на функцию
Да тут можно поизгаляться как угодно разница скорости столь незначительна, что можно на это не обращать внимания.
Вот пример с одним ретурном
bool newBar() { static datetime lastbar = 0; datetime curbar = Time[0]; bool ret = lastbar != curbar; if(ret) lastbar = curbar; return(ret); }/*******************************************************************/
ps Что-то мне даже самому понравилось, исправлю-ка я в своей библиотеке.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Советник работает в определённые часы.
Он основан на медвежьем и бычьем поглощении. Ордер должен открываться на 0 свече. Объём поглотившей свечи должен быть больше объёма свечи, которую поглощают. И тело свечи, которую поглощают должно быть меньше.
Помогите пожалуйста исправить ошибки, недавно изучаю MQL4, сложно пока разобраться
extern int OpenTime = 8; //время открытия
extern int CloseTime = 19; //время закрытия
extern double Lots = 0.1 //лот
//+========================================================================+//
void OnTick()
{
double SL = NormalizeDouble(Open[1], Digits());
bool is_siesta = false;
int numbers = Digits(); //количество знаков после запятой на текущем финансовом инструкменте
int ticket1;
int ticket2;
if(Hour()>= OpenTime && Hour()< CloseTime)
is_siesta=true;
if(is_siesta) //если время работы советника соблюдается....
{
if( (Close[1] > Open[1] && Close[2] < Open[2]) && (NormalizeDouble(Close[1] - Open[1],numbers) > NormalizeDouble(Open[2] - Close[2],numbers)) && Volume[1] > Volume[2])
{
if(TimeHour(TimeCurrent()) == Time[0])
{
ticket1 = OrderSend(Symbol(), OP_BUY , Lots, Ask, 3, SL, "", 123, 0 , clrBlue);
if(ticket1 < 0)
Print("Ошибка открытия ордера");
else
Print("Ордер на покупку открылся");
}
}
if( (Close[1] < Open[1] && Close[2] > Open[2]) && (NormalizeDouble(Open[1] - Close[1],numbers) > NormalizeDouble(Close[2] - Open[2],numbers)) && Volume[1] > Volume[2])
{
if(TimeHour(TimeCurrent()) == Time[0])
{
ticket2 = OrderSend(Symbol(), OP_SELL , Lots, Bid, 3, SL, "", 123, 0 , clrRed);
if(ticket2 < 0)
Print("Ошибка открытия ордера");
else
Print("Ордер на покупку открылся");
}
}
}
}
//+---------------------------------------------+//