Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 239
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо за помощь, а при реальной торговле разницы нет как брать цену? ведь придется и индикатор и советник на график набросить?
При реальной вы сможете получать данные. Если случайно линии индикатора не удалите...
При реальной вы сможете получать данные. Если случайно линии индикатора не удалите...
Такс, у меня еще вопросик. получился офигенный советник. Но нужно сделать так.вообщем, когда он пересекает линию, то открывается дополнительный ордер в эту сторону, а потом закрывается по профиту.. Как сделать так, чтобы после закрытия по профиту, Дополнительный ордер не открывался снова? пока не обновится линия индикатора?
Добрый день! нужна небольшая помощь с кодом, который:
открывает BUY если в файле 11112222.txt записана 1;
открывает SELL если в файле 11112222.txt записана -1;
закрывает все ордера если в файле 11112222.txt записан 0;
Дан файл 11112222.txt, в котором может быть всего три варианта записи: 1, -1 или 0
почему-то при 0 в файле 11112222.txt, открывается ордер на BUY, а должен срабатывать код закрытия ордеров, не могу понять в чем ошибка.
так, же есть проблема, когда советник запущен, то практически всегда невозможно открыть 11112222.txt - пишет что файл занят другим приложением, поэтому для решения этой проблемы понатыкал везде где можно " FileClose(handle2); // закрытие текстового файла", но это не помогает, а мне нужно чтобы после того как советник открыл файл 11112222.txt проверил его содержимое на 1, -1 или 0, затем тут же закрыл, так как этот файл периодически использует другая программа для записи в него 1, -1 или 0.
int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
{
Print(FileReadString(handle2));
FileClose(handle2); // закрытие текстового файла
//ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ
if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
{
OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
FileClose(handle2); // закрытие текстового файла
}
else
Print("NE USPESHNO!!!");
FileClose(handle2); // закрытие текстового файла
}
//=================================конец кода BUY=========================================
//=================================SELL=========================================
int handle3 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
if(handle3<0)//если в текстовом файле меньше 0, то есть -1, то открывать SELL
{
Print(FileReadString(handle3));
FileClose(handle3); // закрытие текстового файла
if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на продажу
{
OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
FileClose(handle3); // закрытие текстового файла
}
else
Print("NE USPESHNO!!!");
FileClose(handle3); // закрытие текстового файла
}
//=================================конец кода SELL=========================================
//=================================ЗАКРЫТИЕ ВСЕХ ОРДЕРОВ=========================================
int handle4 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
if(handle4=0)//если в текстовом файле равно 0, то закрыть все ордера
{
Print(FileReadString(handle4));
FileClose(handle4); // закрытие текстового файла
//-----------------код закрывает все ордера--------------------
bool result;
int error;
while (OrdersTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{ if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(result!=TRUE) { error=GetLastError();
Print("LastError = ",error, " ",Symbol()); }
else error=0; }
else Print( "Error when order select ", GetLastError());
FileClose(handle4); // закрытие текстового файла
}
//------------конец кода закрывающего ордера------------------
FileClose(handle4); // закрытие текстового файла
}
//=================================конец кода ЗАКРЫТИЕ ВСЕХ ОРДЕРОВ=========================================
Добрый день! нужна небольшая помощь с кодом, который:
открывает BUY если в файле 11112222.txt записана 1;
открывает SELL если в файле 11112222.txt записана -1;
закрывает все ордера если в файле 11112222.txt записан 0;
Дан файл 11112222.txt, в котором может быть всего три варианта записи: 1, -1 или 0
почему-то при 0 в файле 11112222.txt, открывается ордер на BUY, а должен срабатывать код закрытия ордеров, не могу понять в чем ошибка.
так, же есть проблема, когда советник запущен, то практически всегда невозможно открыть 11112222.txt - пишет что файл занят другим приложением, поэтому для решения этой проблемы понатыкал везде где можно " FileClose(handle2); // закрытие текстового файла", но это не помогает, а мне нужно чтобы после того как советник открыл файл 11112222.txt проверил его содержимое на 1, -1 или 0, затем тут же закрыл, так как этот файл ежесекундно использует другая программа для записи в него 1, -1 или 0.
Потому, что хендл файла это не содержимое файла.
Сначала надо прочесть содержимое файла, и только потом ставить условие. А у вас наоборот, условие по хендлу, потом чтение файла и закрытие.
Потому, что хендл файла это не содержимое файла.
Сначала надо прочесть содержимое файла, и только потом ставить условие. А у вас наоборот, условие по хендлу, потом чтение файла и закрытие.
1) - Эта часть открывает файл 11112222.txt для чтения с него данных:
//=================================BUY=========================================
int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
2) - Далее идет условие, если handle2>0
if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
{
3) - Вот эта часть для чего я не понял:
Print(FileReadString(handle2));
4) - Эта часть закрывает файл:
FileClose(handle2); // закрытие текстового файла
5) - Так как условие handle2>0 выполнено, то есть файл 11112222.txt содержит в себе 1, то открывается ордер на покупку:
//ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ
if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
{
OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
FileClose(handle2); // закрытие текстового файла
}
else
Print("NE USPESHNO!!!");
FileClose(handle2); // закрытие текстового файла
}
//=================================конец кода BUY=========================================
Приветствую пытаюсь написать скрипт на закрытие ордеров.
Если открыть попеременно несколько ордеров на продажу и покупку и пытаться закрыть их этим ордером то только несколько закрываются, на остальные выдает ошибку 129 (Неправильная цена).
Пытался сделать скрипт который делает, к примеру, делает 10 попыток * на количество ордеров, с паузой в случае ошибки.
Он, как правило, со своей задачей справляется через довольно большое количество попыток, при которых выдается та-же 129 ошибка. Но пока он пытается, с множеством попыток, закрыть ордера из можно закрыть вручную, и это не вызывает ошибок, они закрываются.
Что я делаю не так?
Приветствую пытаюсь написать скрипт на закрытие ордеров.
Если открыть попеременно несколько ордеров на продажу и покупку и пытаться закрыть их этим ордером то только несколько закрываются, на остальные выдает ошибку 129 (Неправильная цена).
Пытался сделать скрипт который делает, к примеру, делает 10 попыток * на количество ордеров, с паузой в случае ошибки.
Он, как правило, со своей задачей справляется через довольно большое количество попыток, при которых выдается та-же 129 ошибка. Но пока он пытается, с множеством попыток, закрыть ордера из можно закрыть вручную, и это не вызывает ошибок, они закрываются.
Что я делаю не так?
А вообще, то что вы пишите, нельзя допускать к торговле на реальном счёте, это только для тестера
А вообще, то что вы пишите, нельзя допускать к торговле на реальном счёте, это только для тестера
Помогло, спасиб.
А вообще, то что вы пишите, нельзя допускать к торговле на реальном счёте, это только для тестера
Можно подробнее почему "нельзя допускать к торговле.."?
Можно подробнее почему "нельзя допускать к торговле.."?
Нет проверок на ошибки, и если вдруг будет закрытие и сервер выдаст критическую ошибку, то советник всё-равно будет продолжать долбить сервер, а это пахнет баном со стороны ДЦ на последующую автоторговлю.