При реальной вы сможете получать данные. Если случайно линии индикатора не удалите...
Такс, у меня еще вопросик. получился офигенный советник. Но нужно сделать так.вообщем, когда он пересекает линию, то открывается дополнительный ордер в эту сторону, а потом закрывается по профиту.. Как сделать так, чтобы после закрытия по профиту, Дополнительный ордер не открывался снова? пока не обновится линия индикатора?
Добрый день! нужна небольшая помощь с кодом, который:
открывает 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.
//=================================BUY========================================= int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY {
//=================================SELL========================================= int handle3 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения if(handle3<0)//если в текстовом файле меньше 0, то есть -1, то открывать 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());
Добрый день! нужна небольшая помощь с кодом, который:
открывает 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.
Потому, что хендл файла это не содержимое файла.
Сначала надо прочесть содержимое файла, и только потом ставить условие. А у вас наоборот, условие по хендлу, потом чтение файла и закрытие.
Приветствую пытаюсь написать скрипт на закрытие ордеров.
#property copyright"Copyright 2017, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
bool reasult;
for (int i = OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS)>0)
{
if (OrderSymbol() != Symbol())
continue;
switch (OrderType())
{
caseOP_BUY :
reasult = OrderClose(OrderTicket(), OrderLots(), Bid, 50, Red);
if (!reasult) Print ("Ошибка закрытия ордера на покупку", GetLastError());
break;
caseOP_SELL :
reasult = OrderClose(OrderTicket(), OrderLots(), Ask, 50, Blue);
if (!reasult) Print ("Ошибка закрытия ордера на продажу", GetLastError());
break;
}
}
}
}
Если открыть попеременно несколько ордеров на продажу и покупку и пытаться закрыть их этим ордером то только несколько закрываются, на остальные выдает ошибку 129 (Неправильная цена).
Пытался сделать скрипт который делает, к примеру, делает 10 попыток * на количество ордеров, с паузой в случае ошибки.
#property copyright"Copyright 2017, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
int c=CountTrades()*10;
for ( int a=1 ; a<=c; a++)
{
if (CountTrades()==0) { Print ("Orders are successfully closed! Break."); break;}
Print("Try ", a, " out of ", c);
bool reasult;
for (int i = OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY) {
reasult = OrderClose(OrderTicket(), OrderLots(), Bid, 50, Red);
if (!reasult) {Print ("ERROR ", GetLastError());}
}
if (OrderType() == OP_SELL) {
reasult = OrderClose(OrderTicket(), OrderLots(), Ask, 50, Blue);
if (!reasult) {Print ("ERROR ", GetLastError());}
}
}
}
}Sleep(1000);
}
}
//+------------------------------------------------------------------+int CountTrades()
{
int count=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
count++;
}
}
return(count);
}
Он, как правило, со своей задачей справляется через довольно большое количество попыток, при которых выдается та-же 129 ошибка. Но пока он пытается, с множеством попыток, закрыть ордера из можно закрыть вручную, и это не вызывает ошибок, они закрываются.
Приветствую пытаюсь написать скрипт на закрытие ордеров.
Если открыть попеременно несколько ордеров на продажу и покупку и пытаться закрыть их этим ордером то только несколько закрываются, на остальные выдает ошибку 129 (Неправильная цена).
Пытался сделать скрипт который делает, к примеру, делает 10 попыток * на количество ордеров, с паузой в случае ошибки.
Он, как правило, со своей задачей справляется через довольно большое количество попыток, при которых выдается та-же 129 ошибка. Но пока он пытается, с множеством попыток, закрыть ордера из можно закрыть вручную, и это не вызывает ошибок, они закрываются.
Можно подробнее почему "нельзя допускать к торговле.."?
Нет проверок на ошибки, и если вдруг будет закрытие и сервер выдаст критическую ошибку, то советник всё-равно будет продолжать долбить сервер, а это пахнет баном со стороны ДЦ на последующую автоторговлю.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Спасибо за помощь, а при реальной торговле разницы нет как брать цену? ведь придется и индикатор и советник на график набросить?
При реальной вы сможете получать данные. Если случайно линии индикатора не удалите...
При реальной вы сможете получать данные. Если случайно линии индикатора не удалите...
Такс, у меня еще вопросик. получился офигенный советник. Но нужно сделать так.вообщем, когда он пересекает линию, то открывается дополнительный ордер в эту сторону, а потом закрывается по профиту.. Как сделать так, чтобы после закрытия по профиту, Дополнительный ордер не открывался снова? пока не обновится линия индикатора?
Добрый день! нужна небольшая помощь с кодом, который:
открывает 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 ошибка. Но пока он пытается, с множеством попыток, закрыть ордера из можно закрыть вручную, и это не вызывает ошибок, они закрываются.
Что я делаю не так?
А вообще, то что вы пишите, нельзя допускать к торговле на реальном счёте, это только для тестера
А вообще, то что вы пишите, нельзя допускать к торговле на реальном счёте, это только для тестера
Помогло, спасиб.
А вообще, то что вы пишите, нельзя допускать к торговле на реальном счёте, это только для тестера
Можно подробнее почему "нельзя допускать к торговле.."?
Можно подробнее почему "нельзя допускать к торговле.."?
Нет проверок на ошибки, и если вдруг будет закрытие и сервер выдаст критическую ошибку, то советник всё-равно будет продолжать долбить сервер, а это пахнет баном со стороны ДЦ на последующую автоторговлю.