Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я Вам показал путь для начинающих - через торговые классы. Не хотите - ну что ж, я умываю руки.
Поэтому я хочу попробовать сформировать запрос сам, как было в MQL4: OrderModify(ticket,price, ....), указать тикет, чтобы избежать проблем в будущем, опасность в том, что в запросе на закрытие, тикета тоже нет, пока позиции закрываются вроде нормально, но если он начнет закрывать позиции "от фонаря", то будет беда, попробую найти исходники формул в include
Внимательней смотрите документацию. Я вам сказал что там есть неточности. Как для модификации так и для закрытия нужно указывать тикет. Это видно в примерах функций что приведены ниже каждого типа запроса.
Вот пример заполнения запроса на закрытие позиции
Это тоже из примера в документации.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2017.02.08 14:19
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"
string ToString( const MqlTradeRequest &Request )
{
return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) + TOSTRING(Request.tp) +
TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
TOSTRING(Request.position) + TOSTRING(Request.position_by));
}
string ToString( const MqlTradeResult &Result )
{
return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
TOSTRING(Result.retcode_external));
}
#include <MT4Orders.mqh>
#define PRINT(A) A; Print(#A + "\n" + ToString(MT4ORDERS::LastTradeRequest) + ToString(MT4ORDERS::LastTradeResult));
#define Point _Point
#define Bid (::SymbolInfoDouble(_Symbol, ::SYMBOL_BID))
#define Ask (::SymbolInfoDouble(_Symbol, ::SYMBOL_ASK))
void OnStart()
{
Print(TOSTRING(AccountInfoString(ACCOUNT_SERVER)));
// Открыли позицию
const int TicketPosition = PRINT(OrderSend(NULL, OP_BUY, 1, Ask, 100, 0, 0, "My Position"))
if (OrderSelect(TicketPosition, SELECT_BY_TICKET))
{
// Установили SL/TP
PRINT(OrderModify(OrderTicket(), OrderOpenPrice(), Bid - 100 * Point, Bid + 100 * Point, 0))
// Закрыли позицию
PRINT(OrderClose(OrderTicket(), OrderLots(), Bid, 100))
}
// Установили отложенный ордер
const int TicketOrder = PRINT(OrderSend(NULL, OP_BUYLIMIT, 1, Ask - 100 * Point, 100, 0, 0, "My Order"))
if (OrderSelect(TicketOrder, SELECT_BY_TICKET))
{
// Удалили ордер
PRINT(OrderDelete(OrderTicket()))
}
}
Внимательней смотрите документацию. Я вам сказал что там есть неточности. Как для модификации так и для закрытия нужно указывать тикет. Это видно в примерах функций что приведены ниже каждого типа запроса.
Вот пример заполнения запроса на закрытие позиции
Это тоже из примера в документации.
Я уже давно прошел период начинающего, именно для них нужны CTradы, чтобы понять как все функционирует, но когда вы нормально поваритесь в MQL5, вы начинаете понимать, что время затрачиваемое на выполнение внешних библиотек и уж тем более нагрузка на систему, делает эти библиотеки инструментом чайников, если вы к 20 экспертам подключите внешние библиотеки, то у вас проц вспотеет, не говоря уже о том, что CTrade, также не указывает тикеты, как по вашему сервер закрывает неидентифицированную позицию, на угад что ли, авось прокатит? CTtade то формирует свои запросы через базовый request и отправляет его через OrderSend, это тото же нос, но только в профиль
Проверка:
советник даёт команду на закрытие позиции и указывает ТИКЕТ:
... m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol ...
и смотрим на метод CTrade::PositionClose - входящий параметр "ticket"
этот тикет мы заполняем поле position структуры m_request.
и отправляем торговый запрос через OrderSend.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.07.11 10:50
Если возникает проблема с тем же Filling, запустите этот советник и создайте нужный вам ордер вручную (F9 в терминале). Сформированный торговый запрос будет распечатан советником.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.07.11 11:02
Вручную выставляем
Получаем в логе сформированный торговый запрос
Модифицируйте Ваши позиции руками и смотрите в логе, как сам Терминал сформировал соответствующие OrderSend.
Внимательней смотрите документацию. Я вам сказал что там есть неточности. Как для модификации так и для закрытия нужно указывать тикет. Это видно в примерах функций что приведены ниже каждого типа запроса.
Вот пример заполнения запроса на закрытие позиции
Это тоже из примера в документации.
У меня точно такой же запрос, но order остается в ноль, он не меняется, данные из request.position не отображаются в запросе и в этом проблема, ни тикетов, ни ордеров, ни позиций в запросе нет, request формирует запрос не для хеджинга, а для нетинга, возможно надо выполнять проверку на соответствие запроса хеджингу, хотя тикет можно указывать и при нетинге, но request эту наиважнейшую инфу игнорирует
order:0
не тот тикет модифицирует
Проверка:
советник даёт команду на закрытие позиции и указывает ТИКЕТ:
и смотрим на метод CTrade::PositionClose - входящий параметр "ticket"
этот тикет мы заполняем поле position структуры m_request.
и отправляем торговый запрос через OrderSend.
Как вставить тикет в запрос формируемый request, почему вы ссылаетесь на документацию, хотя до этого писали, что в документации неточности и ошибки, я без документации могу пошагово проанализировать тот же CTrade, пока времени нет, думал люди смогут помочь, а люди ссылки кидают, я документацию и без ваших подсказок, перед постановкой вопроса изучаю, читать умею, можно ли вручную сформировать запрос в MQL5, в обход request, аналогично тому, как это делалось в MQL4?
Именно об этом я и говорю, вручную сформировать запрос!!! Именно на примеры ручного формирования запроса я давал ссылки.
А что значит "в обход request"? Зачем изгаляться выворачивая весь язык программирования как это сделал fxsaber в соей библиотеке??? Там ведь как ни крути на выходе точно такое-же заполнение структуры и отправка запроса по правилам mq5, но никак не mql4.