не могу в трех соснах разобраться) Надо чтоб при исполнении лимитного ордера , ТП у окттых ордеров ТП менялся. При этом трейдер сам также может откывать ордер. Что не так в коде ?
voidOnTradeTransaction(constMqlTradeTransaction& trans, constMqlTradeRequest& request, constMqlTradeResult& result)
{
Print("Запуск OnTradeTransaction type = ", trans.type," trans.order_type ", trans.order_type, " ", trans.type == TRADE_TRANSACTION_ORDER_ADD);
// Обработка сделокif (trans.type == TRADE_TRANSACTION_DEAL_ADD) {
if (trans.order_type == ORDER_TYPE_BUY) {
Print("Пользователь открыл новый ордер на покупку.");
return;
}
}
if (trans.type == TRADE_TRANSACTION_DEAL_ADD)
{
// Проверка на исполнение лимитного ордераif (trans.order_type == ORDER_TYPE_BUY_LIMIT || trans.order_type == ORDER_TYPE_SELL_LIMIT)
{
double new_tp = trans.price; // Новый TP на основе цены сработавшего ордераPrint("Сработал лимитный ордер, новый TP = ", new_tp);
UpdateTakeProfitForPositions(new_tp);
}
// Закрытие всех позиций и удаление всех ордеров, если это не закрытие по TPelseif (PositionCloseCheck(trans))
{
Print("Закрытие всех позиций и удаление всех ордеров");
CloseAllOrders(); // Закрытие всех позиций и удаление всех ордеров
isOpenOrder = false; // !!!для теста
}
}
}
//+------------------------------------------------------------------+// Проверка на закрытие позицииbool PositionCloseCheck(constMqlTradeTransaction &trans)
{
Print("Проверка закрытия позиции: trans.order = ", trans.order, ", trans.price = ", trans.price);
return trans.order > 0 && trans.price > 0;
}
// Функция для обновления TP всех открытых позицийvoid UpdateTakeProfitForPositions(double new_tp)
{
Print("начинается устанвока новых тейк профит new_tp = ", new_tp);
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
if(PositionSelect(PositionGetSymbol(i)))
{
if(PositionGetInteger(POSITION_MAGIC) == MagicNumber && PositionGetSymbol(i) == a_symbol.Name())
{
// Обновляем TP каждой позиции
a_trade.PositionModify(PositionGetSymbol(i), 0, new_tp); // Установка нового TPPrint("тейк профит new_tp = ", new_tp);
}
}
}
}
// Функция для закрытия всех ордеровvoid CloseAllOrders()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(order.SelectByIndex(i))
{
if(order.Magic() == MagicNumber && order.Symbol() == a_symbol.Name())
{
if(order.OrderType() == ORDER_TYPE_BUY_LIMIT || order.OrderType() == ORDER_TYPE_SELL_LIMIT)
{
a_trade.OrderDelete(order.Ticket());
Print("Удалён лимитный ордер: ", order.PriceOpen());
}
}
}
}
}
Для начала, следует ещё раз разобраться с ордерами, сделками, позициями. В частности, один ордер может порождать несколько сделок. По этому, КМК, лучше всего отслеживать исполнение ордера по попаданию его в историю.
Также, согласно документации, для транзакций типа TRADE_TRANSACTION_DEAL_* поле order_type не заполняется и проверять его нет смысла.
Далее, стоит разобраться неттинг/хеджинг. "Функция для обновления TP всех открытых позиций" предполагает, что на символе позиций может быть несколько, как при хеджинге. Но установка нового TP происходит с указанием символа, а не тикета позиции, т.е., как при неттинге.
//+------------------------------------------------------------------+ //| Функция устанавливает текст комментария в левом верхнем углу | //| графика. | //+------------------------------------------------------------------+ bool ChartCommentSet(conststring str,constlong chart_ID=0)
{
//--- сбросим значение ошибки ResetLastError();
//--- установим значение свойства if(!ChartSetString(chart_ID,CHART_COMMENT,str))
{
//--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- успешное выполнение return(true);
}
каким образом сделать, чтобы в нужном окне нарисовать линию ? проблема в том ,что линия рисуется в нужном окне но новое окно открывается , что нежелательно ...
база котировок установлен на диске С C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\908CDDF6DDEF089609CFD48700109B47\config\, но места совсем мало стало - как переназначить на диск D, не переустанавливая прогу ?
Котировок в папке config нет. Там находятся общие настройки и сертификаты. История котировок хранится в папке history. В том случае, если терминал установлен на диск D, то достаточно при запуске терминала указать ключ /portable. Предварительно в папку МТ нужно скопировать необходимые данные. Если речь о котировках, то скопировать папку history. Папку config тоже не помешает скопировать, но на котировки это никак не повлияет.
Если же и сам терминал установлен на диске С, то поможет только переустановка. Дело ведь несложное. Достаточно всю информацию сохранить и после установки поместить в новую папку терминала. Запускать также - с ключом /portable.
string FindFileStartingWithUnderscore()
{
// Получаем путь к папке Filesstring folderPath1 = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Files\\";
Print("Folder Path: ", folderPath," ", folderPath);
if(FileIsExist(folderPath))
{
Print("Directory exists: ", folderPath);
}
else
{
Print("Directory does not exist or access is restricted: ", folderPath);
}
// Открываем папку для поиска файловstring fileName = "";
long searchHandle = FileFindFirst("*", fileName, FILE_COMMON); // Ищем первый файл// Проверяем, что поиск прошел успешноif(searchHandle == INVALID_HANDLE)
{
Print("Error opening directory. Error code: ", GetLastError());
return"";
}
// Перебираем файлыwhile(FileFindNext(searchHandle, fileName))
{ // Проверяем, начинается ли имя файла с "_"if(StringSubstr(fileName, 0, 1) == "_")
{
Print("Found file: ", fileName);
FileFindClose(searchHandle); // Закрываем хендл поискаreturn fileName; // Возвращаем имя файла
}
}
// Если файл не найденFileFindClose(searchHandle); // Закрываем хендл поискаPrint("No file starting with '_' found.");
return"";
}
Всем привет !
почему пишет ошибку ?
Directory does not exist or access is restricted: C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\908CDDF6DDEF089609CFD48700109B47\MQL5\Files\ хотя папка есть ? доступ тоже
При работе советника он обращается к указанной папке , и надо чтоб и в режиме тестирование обращался к указа заной папке . Но проблема что при тестировании у него
TERMINAL_DATA_PATH
другой путь генерится . Когда хочу в COMMON папку то ошибку дает (режим тестирования) - Error opening file for reading. Error code: 5002
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction
Yerkin Sagandykov, 2024.10.25 22:31
не могу в трех соснах разобраться) Надо чтоб при исполнении лимитного ордера , ТП у окттых ордеров ТП менялся. При этом трейдер сам также может откывать ордер. Что не так в коде ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction
JRandomTrader, 2024.10.26 00:32
Вероятно, не так примерно всё.
Для начала, следует ещё раз разобраться с ордерами, сделками, позициями. В частности, один ордер может порождать несколько сделок. По этому, КМК, лучше всего отслеживать исполнение ордера по попаданию его в историю.
Также, согласно документации, для транзакций типа TRADE_TRANSACTION_DEAL_* поле order_type не заполняется и проверять его нет смысла.
Далее, стоит разобраться неттинг/хеджинг. "Функция для обновления TP всех открытых позиций" предполагает, что на символе позиций может быть несколько, как при хеджинге. Но установка нового TP происходит с указанием символа, а не тикета позиции, т.е., как при неттинге.
Это только то, что сразу бросилось в глаза.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction
Yerkin Sagandykov, 2024.10.26 13:50
Спасибо !
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Comment в неактивном окне
Yerkin Sagandykov, 2021.08.09 18:50
Всем привет !
прохожу по циклу по окнам, обрабатываю данные. и надо вывести информацию в этом окне, типа коммента..
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Comment в неактивном окне
Ihor Herasko, 2021.08.09 19:18
Проще всего создать графический объект. У каждой из функций ObjectXXX первым аргументом следует идентификатор чарта. Так что проблем нет.Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Comment в неактивном окне
Alexey Viktorov, 2021.08.09 21:55
Надо читать документацию и чуток думать.Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Comment в неактивном окне
Yerkin Sagandykov, 2021.08.10 14:20
Спасибо ! то что надо. будем чуток делать того и другого )
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
определение шаблона поведения цены
Yerkin Sagandykov, 2021.09.13 09:10
Всем привет !
надо описать в коде поведение цен на протяжении недели. чтоб аналогичные движения определить на истории.
возможно ли это сделать на сновании какого либо индикатора (ов) или просто мат. анализом изменения цен ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
определение шаблона поведения цены
Ihor Herasko, 2021.09.13 20:58
Вариантов масса, начиная от обычных свечных паттернов и заканчивая функцией цены. Какой использовать, Вам выбирать.Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
определение шаблона поведения цены
Алексей Тарабанов, 2021.09.13 21:44
Сингулярный анализ посмотрите.Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
определение шаблона поведения цены
Andrey Khatimlianskii, 2021.09.14 00:00
Что-то типа https://www.mql5.com/ru/code/10612
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
высчитать количество часов
Yerkin Sagandykov, 2018.03.20 13:00
Всем привет !
по логике советника мне надо понять за какое кол-во часов закрылся ордер. как высчитать ?
если в течении одного дня то примерно как в коде, а если больше дня ордер был ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
высчитать количество часов
Taras Slobodyanik, 2018.03.20 15:19
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
высчитать количество часов
FXwin, 2018.03.20 15:54
Не проверял!!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
ChartOpen - открывается новое окно
Yerkin Sagandykov, 2019.12.16 11:53
Здравствуйте !
в коде необходимо активировать существующее окно и нарисовать в нем же линию. В тестере нормально было, а в реале открывается новое окно ...
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
ChartOpen - открывается новое окно
Artyom Trishkin, 2019.12.16 12:36
А что вы хотели от ChartOpen() ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
ChartOpen - открывается новое окно
Yerkin Sagandykov, 2019.12.16 12:42
вопрос не корректный тогда с моей стороны
каким образом сделать, чтобы в нужном окне нарисовать линию ? проблема в том ,что линия рисуется в нужном окне но новое окно открывается , что нежелательно ...
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
ChartOpen - открывается новое окно
Artyom Trishkin, 2019.12.16 13:31
Найти нужный график по ChartID() при помощи поиска нужного графика. И при рисовании линии обязательно указывать идентификатор графика.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Запустить второй советник из кода
Yerkin Sagandykov, 2020.10.07 11:03
Здравствуйте !
возможно ли запустить/ остановить программно второй советник на другом инструменте ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Запустить второй советник из кода
SanAlex, 2020.10.07 11:09
можно сменить на всех открытых графиках или на данном графике
-----------------------------------
сохранив шаблон Графика с экспертом
-- вот тут, что то типа, такого химичил https://www.mql5.com/ru/forum/352360#comment_18573500
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Запустить второй советник из кода
Andrey Khatimlianskii, 2020.10.08 11:12
https://www.mql5.com/ru/code/19003Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
bases
Yerkin Sagandykov, 2024.10.23 22:16
Всем привет !
база котировок установлен на диске С C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\908CDDF6DDEF089609CFD48700109B47\config\, но места совсем мало стало - как переназначить на диск D, не переустанавливая прогу ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
bases
Ihor Herasko, 2024.10.24 08:47
Котировок в папке config нет. Там находятся общие настройки и сертификаты. История котировок хранится в папке history. В том случае, если терминал установлен на диск D, то достаточно при запуске терминала указать ключ /portable. Предварительно в папку МТ нужно скопировать необходимые данные. Если речь о котировках, то скопировать папку history. Папку config тоже не помешает скопировать, но на котировки это никак не повлияет.
Если же и сам терминал установлен на диске С, то поможет только переустановка. Дело ведь несложное. Достаточно всю информацию сохранить и после установки поместить в новую папку терминала. Запускать также - с ключом /portable.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
bases
Yerkin Sagandykov, 2024.10.24 09:29
спасибо Игорь !
но сделал через создания ярлыка mklink и физически перенес на другой диск
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
bases
Ihor Herasko, 2024.10.24 13:25
Тоже вариант ))
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction - limit order
Yerkin Sagandykov, 2024.11.04 19:46
Привет всем !
как определить что сработал лимитный ордер ? думал по комментарию ,но как то не красиво )
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction - limit order
Edgar Akhmadeev, 2024.11.04 22:41
Самый лучший способ изучить процессы - запустить их и поработать с отладчиком.
"Не давай им рыбу, дай им сеть"
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction - limit order
Denis Kirichenko, 2024.11.04 23:52
Не ленитесь, посмотрите в статьях, их есть несколько на ресурсе. К примеру Рис.15.Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction - limit order
JRandomTrader, 2024.11.05 00:26
Сорри, но вспомнилось: "Чтобы научиться программировать, возьмите дизассемблер и посмотрите, как это делают другие" ))
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OnTradeTransaction - limit order
Yerkin Sagandykov, 2024.11.05 08:23
))
почитаю статью
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
TERMINAL_DATA_PATH
Yerkin Sagandykov, 2024.11.26 18:46
Всем привет !
почему пишет ошибку ?
Directory does not exist or access is restricted: C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\908CDDF6DDEF089609CFD48700109B47\MQL5\Files\
хотя папка есть ? доступ тоже
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
TERMINAL_DATA_PATH
fxsaber, 2024.11.26 19:18
File-функции работают с путями относительно песочницы.Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
TERMINAL_DATA_PATH
Yerkin Sagandykov, 2024.12.05 20:02
Привет всем !
При работе советника он обращается к указанной папке , и надо чтоб и в режиме тестирование обращался к указа заной папке . Но проблема что при тестировании у него
TERMINAL_DATA_PATHдругой путь генерится . Когда хочу в COMMON папку то ошибку дает (режим тестирования) - Error opening file for reading. Error code: 5002