
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: 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));
void OnStart()
{
// Открыли позицию
const int TicketPosition = PRINT(OrderSend(NULL, OP_BUY, 1, SymbolInfoDouble(Symbol(), SYMBOL_ASK), 100, 0, 0, "My Position"))
if (OrderSelect(TicketPosition, SELECT_BY_TICKET))
{
// Установили SL/TP
PRINT(OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - 100 * _Point, OrderOpenPrice() + 100 * _Point, 0))
// Закрыли позицию
PRINT(OrderClose(OrderTicket(), OrderLots(), SymbolInfoDouble(Symbol(), SYMBOL_BID), 100))
}
// Установили отложенный ордер
const int TicketOrder = PRINT(OrderSend(NULL, OP_BUYLIMIT, 1, SymbolInfoDouble(Symbol(), SYMBOL_ASK) - 100 * _Point, 100, 0, 0, "My Order"))
if (OrderSelect(TicketOrder, SELECT_BY_TICKET))
// Удалили ордер
PRINT(OrderDelete(OrderTicket()))
}
Так кто мешает? Раз не получается сделать с АПИ, посмотрите, как открывается позиция в СБ. Это займет 2 минуты и не надо писать на форум и ждать помощи ))
Советую посмотреть код, который генерят эти мастера. Пойдет только для курсовой работы на 1-2 курсе. ИМХО, нормальные люди это не используют.
А вот курсовую так написанную я-бы не рискнул сдавать, особенно если принимать будешь ты.
Ошибка 10013 - самая дурная ошибка МТ5. Как удалось выяснить после 3х часов копания в этой проблеме - у некоторых брокеров на одном Мт5 настройки символов в части Symbol Properties TRADE_EXECUTION могут различаться, т.е.у обычных FX-символов вполне может стоять SYMBOL_TRADE_EXECUTION_INSTANT, а у CFD быть может выставлено значение SYMBOL_TRADE_EXECUTION_MARKETЮ, хотя по своей сути этот все тот же Форекс.
Поэтому что бы избежать ошибки 10013 тут нужно использовать вспомогательную функцию
у некоторых брокеров на одном Мт5 настройки символов в части Symbol Properties TRADE_EXECUTION могут различаться