В общем случае - Приёмник не знает по какой торговой системе работает источник сигналов. Поэтому выставление стопов - это ещё не гарантия, что при отсутствии связи не нарушится работа системы у приёмника (даже если стопы на сервере и сработают). Может на самом деле стопы у источника будут отсутствовать на момент, когда на приёмнике ордер закроется по ним.
А поэтому в любом случае надо будет держать связь с источником.
Как можно ускорить срабатывание экспертов??? Даже при минимальной загруженности терминалов и спокойном рынке на копирование сдлеки уходит от 5 до 10 секунд... Можно ли как-то упростить код, исключить ненужное... если возможно? Сам в коде практически не разбираюсь. Программисты - помогите...
Автор молодец: придумал хорошее решение, выложил исходник. Спасибо ему! Вот только, если поставить отложенный ордер, а потом удалить, то получим в результате пустой файл в папке-источнике и ордер в копируемом терминале не удалится.
Выглядит это так: приемник находит пустой файл и читает строки: k=FileReadArray(handle,buffer,0,1000);
В результате k=0 а это значит, что строк нет и обрабатывать нечего, а по факту нужно удалить ордера, которые были выставлены ранее.
Для этого в функции FileLoad добавил вот это:
if (k==0) {
Print ("Delete all orders! File with orders is empty.");
for (i = total-1; i >= 0; i--) {
Print ("Delete all orders. for i = " +i);
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
OrderDelete(OrderTicket() );
}
} // for
И еще в самом начале получил ошибку с сообщением о том, что открыто слишком много файлов в Советнике-источнике ExpertSource.mq4. Поисправлял места, где файл нужно было закрывать и через полдня скрипт, вроде бы заработал.
Одно из таких мест здесь:
handle=FileOpen(FileName,FILE_BIN|FILE_WRITE);
if(FileWriteArray(handle, buffer, 0, j)>0) {
FileClose(handle);
// Но если FileWriteArray(handle, buffer, 0, j) <= 0 то файл не// закроется. А потом не отработает FileDelete(FileName);
j = _lopen(Path+slash+FileName,OF_READ);
if(j<0) {//Файл не перезаписываем!
CopyFileA(TerminalPath()+"\experts\files"+slash+FileName, Path+slash+FileName, 0);
} else {
_lclose(j);
FileDelete(FileName); // Не получится удалить, так// как файл еще не закрыт после handle=FileOpen(FileName,FILE_BIN|FILE_WRITE);Print("Файл ордеров удалён, потому что файл, находящийся у получателя, ещё не обработан.");
}
}
Лучше сразу получить результат выполнения FileWriteArray(handle, buffer, 0, j)>0 в переменную и закрыть файл так:
handle=FileOpen(FileName,FILE_BIN|FILE_WRITE);
int iArrayElements = FileWriteArray(handle, buffer, 0, j);
FileClose(handle);
Print("FileWriteArray=" +iArrayElements );
if(iArrayElements >= 0) {
j = _lopen(Path+slash+FileName,OF_READ);
if(j<0) { //Если файла в приемнике нет, то копируем из источника.
CopyFileA(TerminalPath()+"\experts\files"+slash+FileName, Path+slash+FileName, 0);
Print("Файл ордеров скопирован из источника в приемник.");
} else { // Файл в приемнике еще не обработан.
_lclose(j);
FileDelete(FileName);
Print("Файл ордеров удалён, потому что файл, находящийся у получателя, ещё не обработан.");
}
}
Что-то еще правил наверное, но уже не вспомню точно. Вот только на разных серверах гонять копирование проблематично из за разницы в котировках и условиях выставления ордеров.
Быть может, доведу до ума и опубликую. Вообще очень плохо пониаю MQL, но делать нечего - нужно включать мозги и решать задачи. :-)
Кстати, видел продает такой скрпит KimIV (Игорь) по цене 1000 USD и 1200 за позможность зеркалить сделки.
Полагаю, что это явно перебор, хотя, может кто-то так и зарабатывает. Мне скрипт нужен по банальной причине: торгую очень много, но больше в минус. Если лосей перевернуть и удвоить объем в деньгах, то получим на выходе профит, превосходящий лосей. Этого будет достаточно, чтобы постепенно тренироваться.
Но четко перевернуть технически очень сложно из-за проскальзывания и прочих форс-мажорных факторов даже при использовании отложенных ордеров. Потому это абсолютно не Грааль и цена ему баксоов 100, как максимум.
Не могу разобратся с "получателем": ExpertReceiver
Цитирую из описания: "FileName - Имя файла в каталоге TerminalPath()+"\experts\files", с которого будут считываться данные о изменениях в ордерах." ---- не совсем понятно, что именно вписывать в настройки получателя. Я так понимаю, нужно в получателе создать полный путь к Orders.txt который находится в папке терминала "сигнальщика"? Делал по всякому уже, не получается что то... В первом терминале (сигнальщике) все работает, все настроил, открываю ордер и в файле Orders.txt появляется запись о открытии ордера, с этим все в порядке. Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
con-dor:
Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
con-dor:
Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
Просто "Orders.txt" (без кавычек)
Всем привет, у меня такая проблема с этим копировщиком:
Советник-источник ExpertSource.mq4 пишет файл Orders.txt не туда, куда сказали в переменной Path, а в свой каталог(TerminalPath())! а ведь должен писать в каталог ("D:\MetaTraderПолучатель\experts\files") где стоит ExpertReceiver.mq4.
Уважаемый разработчик, проясните свет на эту проблему, может я что не так сделал?
con-dor:
Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
Просто "Orders.txt" (без кавычек)
Всем привет, у меня такая проблема с этим копировщиком:
Советник-источник ExpertSource.mq4 пишет файл Orders.txt не туда, куда сказали в переменной Path, а в свой каталог(TerminalPath())! а ведь должен писать в каталог ("D:\MetaTraderПолучатель\experts\files") где стоит ExpertReceiver.mq4.
Уважаемый разработчик, проясните свет на эту проблему, может я что не так сделал?
ExpertSource должен писать файл Orders.txt сначала в свой каталог, а после этого должен его копировать от туда в папку, которую Вы назначили в переменную Path.
Если не копирует - значит ищите корень проблемы в правах доступа пользователя Windows и программы "terminal.exe" к папке Path.
Попробуйте создать на диске D папку test и попробовать снова. Если файл там не появится, то не знаю.... у меня всё работает.
В общем случае - Приёмник не знает по какой торговой системе работает источник сигналов. Поэтому выставление стопов - это ещё не гарантия, что при отсутствии связи не нарушится работа системы у приёмника (даже если стопы на сервере и сработают). Может на самом деле стопы у источника будут отсутствовать на момент, когда на приёмнике ордер закроется по ним.
А поэтому в любом случае надо будет держать связь с источником.
Ваши советники не работают для роботов. Только для ручной торговли. :((( Разочарован.
Ваши советники не работают для роботов. Только для ручной торговли. :((( Разочарован.
Неправ. Я разобрался все работает отлично, полноценный советник. Спасибо Автору, то что нужно, вещь.
Автор молодец: придумал хорошее решение, выложил исходник.
Спасибо ему!
Вот только, если поставить отложенный ордер, а потом удалить,
то получим в результате пустой файл в папке-источнике и ордер
в копируемом терминале не удалится.
Выглядит это так: приемник находит пустой файл и читает строки:
k=FileReadArray(handle,buffer,0,1000);
В результате
k=0
а это значит, что строк нет и обрабатывать нечего, а по факту нужно удалить
ордера, которые были выставлены ранее.
Для этого в функции FileLoad добавил вот это:
И еще в самом начале получил ошибку с сообщением о том, что открыто слишком много файлов в Советнике-источнике ExpertSource.mq4.
Поисправлял места, где файл нужно было закрывать и через полдня скрипт, вроде бы заработал.
Одно из таких мест здесь:
Лучше сразу получить результат выполнения FileWriteArray(handle, buffer, 0, j)>0
в переменную и закрыть файл так:
Что-то еще правил наверное, но уже не вспомню точно.
Вот только на разных серверах гонять копирование проблематично
из за разницы в котировках и условиях выставления ордеров.
Быть может, доведу до ума и опубликую. Вообще очень плохо пониаю MQL,
но делать нечего - нужно включать мозги и решать задачи. :-)
Кстати, видел продает такой скрпит KimIV (Игорь) по цене 1000 USD и
1200 за позможность зеркалить сделки.
Полагаю, что это явно перебор, хотя, может кто-то так и зарабатывает.
Мне скрипт нужен по банальной причине: торгую очень много, но больше
в минус. Если лосей перевернуть и удвоить объем в деньгах, то получим
на выходе профит, превосходящий лосей. Этого будет достаточно, чтобы
постепенно тренироваться.
Но четко перевернуть технически очень сложно из-за проскальзывания
и прочих форс-мажорных факторов даже при использовании отложенных
ордеров. Потому это абсолютно не Грааль и цена ему баксоов 100,
как максимум.
А вот проверить идею на демке будет не лишним.
ExpertReceiver
Цитирую из описания: "FileName - Имя файла в каталоге TerminalPath()+"\experts\files", с которого будут считываться данные о изменениях в ордерах." ---- не совсем понятно, что именно вписывать в настройки получателя. Я так понимаю, нужно в получателе создать полный путь к Orders.txt который находится в папке терминала "сигнальщика"? Делал по всякому уже, не получается что то...
В первом терминале (сигнальщике) все работает, все настроил, открываю ордер и в файле Orders.txt появляется запись о открытии ордера, с этим все в порядке. Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
Просто "Orders.txt" (без кавычек)
Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
Просто "Orders.txt" (без кавычек)
Всем привет, у меня такая проблема с этим копировщиком:
Советник-источник ExpertSource.mq4 пишет файл Orders.txt не туда, куда сказали в переменной Path, а в свой каталог(TerminalPath())! а ведь должен писать в каталог ("D:\MetaTraderПолучатель\experts\files") где стоит ExpertReceiver.mq4.
Уважаемый разработчик, проясните свет на эту проблему, может я что не так сделал?
Но вот что в получателе вписывать? Пробовал писать полный путь сигнальщика, например у меня это (без кавычек): "C:\MT4Terminals\MetaTraderSignal\experts\files" или же: "C:\MT4Terminals\MetaTraderSignal\experts\files\Orders.txt" ничего не получается. Или надо вот это " TerminalPath()+"\experts\files" " ---- сюда еще вписывать или как быть? Не могли бы Вы мне пояснить какой путь мне вписать к файлу.
Просто "Orders.txt" (без кавычек)
Всем привет, у меня такая проблема с этим копировщиком:
Советник-источник ExpertSource.mq4 пишет файл Orders.txt не туда, куда сказали в переменной Path, а в свой каталог(TerminalPath())! а ведь должен писать в каталог ("D:\MetaTraderПолучатель\experts\files") где стоит ExpertReceiver.mq4.
Уважаемый разработчик, проясните свет на эту проблему, может я что не так сделал?
ExpertSource должен писать файл Orders.txt сначала в свой каталог, а после этого должен его копировать от туда в папку, которую Вы назначили в переменную Path.
Если не копирует - значит ищите корень проблемы в правах доступа пользователя Windows и программы "terminal.exe" к папке Path.
Попробуйте создать на диске D папку test и попробовать снова. Если файл там не появится, то не знаю.... у меня всё работает.