Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 402
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Событие щелчка мыши на графическом объекте
CHARTEVENT_OBJECT_CLICK
X координата
Y координата
Имя графического объекта, на котором произошло событи
Ух, вроде все дошло)
Благодарю за помощь!
не знаю как результат "r" привязать к буферу что бы вывести на график, подскажите пожалуйста.
не могу усвоить примеры в учебниках, спрашивал у людей
пишут - "Значение "р" пишите в буфер, и оно отобразится на графике." и "Обычно в буфер записывают через цикл for. "
но это мне не о чем не говорит!
один результат просто буква "r" и всё, как это сделать не где не могу найти.
И еще одно
как сгладить к примеру результат "r"
Спасибо за внимание!В чём ошибка? При прогоне в тестере, функция удаляет отложенный ордер, а иной раз нет. Почему? Принцип действия такой: при закрытии ордера Buy по ТП удаляется BuyLimit. Подскажите
В чём ошибка? При прогоне в тестере, функция удаляет отложенный ордер, а иной раз нет. Почему? Принцип действия такой: при закрытии ордера Buy по ТП удаляется BuyLimit. Подскажите
OrdersTotal() != OrdersHistoryTotal()
Спасибо.
Всем привет.
Составил простенький эксперт на основе Стохстика (на верхнем пике продаёт, на нижнем покупает), а компилятор выдаёт ошибку на ровном месте.
Может кто-нибудь подскажет в чём причина и что значит такая ошибка? Я сначала думал, что скобку где-то забыл поставить.
Но нет, несколько раз проверил - вроде со скобками всё в порядке. Буду весьма признателен за помощь.
Вот ошибки, которые выдаёт компилятор: ')' - not all control paths return a value Stohastic-Сигналы-33.mq4 177 3
Вот сам эксперт и файл mq4 тоже прикрепил:
И ещё подскажите как красиво советника сюда вставлять(чтобы как в редакторе с цветными буковками)
//+------------------------------------------------------------------+
//| Stohastic-Сигналы-33.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
bool New_Bar=false; // Флаг нового бара
extern double H_line=80; // Верхняя(перекупленности) линия Стохастика
extern double L_line=20; // Нижняя(перепроданности) линия Стохастика
extern int Slippage=2; // Проскальзывание
extern int SL; // SL устанавливаемого ордера
extern int TP; // TP устанавливаемого ордера
extern double Lts; // Размер лота устанавливаемого ордера
bool B_Flag=false, // Флаг сигнала на ПОКУПКУ
S_Flag=false, // Флаг сигнала на ПРОДАЖУ
ORD_Buy=false, // Флаг открытой позиции Buy
ORD_Sell=false; // Флаг открытой позиции Sell
bool Work=true; // Флаг, позволяющий эксперту работать. true-нет критической ошибки, false-есть.
string Symb; // Название финанс. инструмента
int Crit_Error=11111111; // Номер критической оибки
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int
Total, // Количество ордеров в окне
Tip=-1, // Тип выбран. ордера (B=0,S=1)
Ticket; // Номер ордера
double
M_1, M_2, M_3, // Значение MAIN на 1, 2 и 3 барах
Lot; // Колич. лотов в выбран.ордере
bool Ans_Close; // Флаг успешного закрытия ордера(1-закрыт, 0-не закрыт)
bool Ans_Open; // Флаг успешного открытия ордера(1-открыт, 0-не открыт)
//--------------------------------------------------------------- 1 --
// Проверка критической ошибки
if(Work==false) // Критическая ошибка
{
Alert("Критическая ошибка. Эксперт не работает.");
return; // Выход из start()
}
//--------------------------------------------------------------- 2 --
// Новый бар
Fun_New_Bar(); // Обращение к ф-ии
if (New_Bar==false) // Если бар не новый..
return; // ..то уходим
//------------------------------------------------------------- 3 --
// Учёт ордеров
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеров
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Lot =OrderLots(); // Количество лотов
}
else
{
Alert("OrderSelect() вернул ошибку - ",GetLastError()); // Если не получилось выбрать ордер, то ...
return; // Выход из start
}
}
//------------------------------------------------------------- 4 --
// Торговые критерии Анализ ситуации
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1 бар
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2 бар
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3 бар
//------------------------------------------------------------- 5 --
if(M_2>=H_line) // Если Stohastic пересёк линию перекупленности
{
if(M_3 <= M_2 && M_2 > M_1) // Появился верхний пик на Stohastic ...
{
if(S_Flag==true) // Если позиция Sell открыта, то...
return; // Выход из start()
// Если позиция Sell не открыта, то ...
S_Flag=true; // Ставим флаг, что появился сигнал на ПРОДАЖУ
B_Flag=false; // Ставим флаг, что сигнала на ПОКУПКУ не было
if(ORD_Buy==true) // Если имеется откр. ордер Buy,...
{
if(Tip!=0) // Проверка: ТИП ордера не соответствует ФЛАГУ открытого ордера...
{
Work=false; // Советник не будет работать
Alert("ТИП ордера не соответствует ФЛАГУ открытого ордера.Выход из start."); // При несовпадении советник заканчивает работу
return; // Выход из start
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Закрываем открытый ордер Buy
if(Ans_Close==false) // Если не удалось закрыть, то...
{
Alert("Не удалось закрыть ордер. Советник прекращает работу.\n Номер критической ошибки ", Crit_Error);
return; // Выходим из start
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // ОТКРЫВАЕМ КОРОТКУЮ ПОЗИЦИЮ
if(Ans_Open==false) // Если не удалось открыть Sell, то...
{
Alert("Не удалось открыть ордер. Советник прекращает работу.\n Номер критической ошибки ", Crit_Error);
return; // Выходим из start
} // Если удалось открыть Sell, то...
ORD_Sell=true; // Ставим флаг, что открыта КОРОТКАЯ позиция
ORD_Buy=false; // Ставим флаг, что ДЛИННОЙ позици нет
}
return; // Выход из start
}
//------------------------------------------------------------------------ 6 --
if(M_2<=L_line) // Если Stohastic пересёк линию перепроданности
{
if(M_3 >= M_2 && M_2 < M_1) // Появился нижний пик(СИГНАЛ НА ПОКУПКУ)
{
if(B_Flag==true) // Если позиция Buy открыта, то...
return; // Выход из start()
// Если позиция Buy не открыта, то ...
B_Flag=true; // Ставим флаг, что появился сигнал на ПОКУПКУ
S_Flag=false; // Ставим флаг, что сигнала на ПРОДАЖУ нет
if(ORD_Sell==true) // Если имеется откр. ордер Sell,...
{
if(Tip!=1) // Проверка: ТИП ордера не соответствует ФЛАГУ открытого ордера...
{
Work=false; // Советник не будет работать
Alert("ТИП ордера не соответствует ФЛАГУ открытого ордера.Выход из start."); // При несовпадении советник заканчивает работу
return; // Выход из start
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Закрываем открытый ордер Sell
if(Ans_Close==false) // Если не удалось закрыть, то...
{
Alert("Не удалось закрыть ордер. Советник прекращает работу.\n Номер критической ошибки ", Crit_Error);
return; // Выходим из start
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // ОТКРЫВАЕМ ДЛИННУЮ ПОЗИЦИЮ
if(Ans_Open==false) // Если не удалось открыть Buy, то...
{
Alert("Не удалось открыть ордер. Советник прекращает работу.\n Номер критической ошибки ", Crit_Error);
return; // Выходим из start
} // Если удалось открыть Buy, то...
ORD_Sell=false; // Ставим флаг, что КОРОТКОЙ позици нет
ORD_Buy=true; // Ставим флаг, что открыта ДЛИННАЯ позиция
}
return; // Выход из start
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Ф-ия закрытия ордера
{
double Close_Price=0; // Цена закрытия ордера
while(true)
{
RefreshRates(); // Обновление данных
if(F_Tip==0) // Если ордер Buy, ...
Close_Price=Bid; // Цена закрытия Bid
Close_Price=Ask; // А если ордер Sell, то цена закрытия Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Закрытие Buy или Sell
if (Ans_Close==true) // Получилось :)
return(true); // Выход из функции закр
Crit_Error=GetLastError(); // Фиксируем номер ошибки
if (Fun_Error(Crit_Error)==1) // Обработка ошибок
continue; // Повторная попытка
return(false); // Выход из функции
}
}
//--------------------------------------------------------------- 9 --
// Открытие ордеров
bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
double Open_Price; // Цена открытия
string Tip_Deal; // Направление сделки(Buy или Sell)
double f_sl; // Стоп-лосс ордера
double f_tp; // Тейк-профит
int Ticket; // Тикет открытого ордера
while(true) // Цикл закрытия орд.
{
RefreshRates(); // Обновление данных
if(F_Tip==1) // Если нужно открыть SELL, то...
{
Open_Price=Bid;
Tip_Deal="OP_SELL";
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits);
}
//-------------------------------- Если нужно открыть BUY, то...
Open_Price=Ask;
Tip_Deal="OP_BUY";
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits);
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//Открытие ОРДЕРА
if (Ticket > 0) // Получилось :)
return(true); // Выход из функции
Crit_Error=GetLastError(); // Фиксируем номер ошибки
if (Fun_Error(Crit_Error)==1) // Обработка ошибок
continue; // Повторная попытка
return(false); // Выход из функции
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки
case 4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решение
return(1); // Выход из функции
case 135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данные
return(1); // Выход из функции
case 136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тика
Sleep(1); // Задержка в цикле
return(1); // Выход из функции
case 137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решение
return(1); // Выход из функции
case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решение
return(1); // Выход из функции
// Критические ошибки
case 2: Alert("Общая ошибка.");
return(0); // Выход из функции
case 5: Alert("Старая версия терминала.");
Work=false; // Больше не работать
return(0); // Выход из функции
case 64: Alert("Счет заблокирован.");
Work=false; // Больше не работать
return(0); // Выход из функции
case 133:Alert("Торговля запрещена.");
return(0); // Выход из функции
case 134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функции
default: Alert("Возникла ошибка ",Error); // Другие варианты
return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
Может кто-нибудь подскажет в чём причина и что значит такая ошибка? Я сначала думал, что скобку где-то забыл поставить.
Но нет, несколько раз проверил - вроде со скобками всё в порядке. Буду весьма признателен за помощь.
Вот ошибки, которые выдаёт компилятор: ')' - not all control paths return a value Stohastic-Сигналы-33.mq4 177 3
')' - not all control paths return a value Stohastic-Сигналы-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Ф-ия закрытия ордера
{
double Close_Price=0; // Цена закрытия ордера
while(true)
{
RefreshRates(); // Обновление данных
if(F_Tip==0) // Если ордер Buy, ...
Close_Price=Bid; // Цена закрытия Bid
Close_Price=Ask; // А если ордер Sell, то цена закрытия Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Закрытие Buy или Sell
if (Ans_Close==true) // Получилось :)
return(true); // Выход из функции закр
Crit_Error=GetLastError(); // Фиксируем номер ошибки
if (Fun_Error(Crit_Error)==1) // Обработка ошибок
continue; // Повторная попытка
return(false); // Выход из функции
}
}
Нажмите в MetaEditor кнопку Компилировать и читайте сообщение об ошибке - там номер строки и номер позиции
Вставляйте код программы кнопкой SRC - так здешним читателям нравится больше!!! а Ваша длинная портянка - БРРРРР
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить.
Нажмите в MetaEditor кнопку Компилировать и читайте сообщение об ошибке - там номер строки и номер позиции
Вставляйте код программы кнопкой SRC - так здешним читателям нравится больше!!! а Ваша длинная портянка - БРРРРР
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить.
Спасибо.