Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пока код имеет вид:
это будет "четвёрочный" вид. Всё таки вопрос про MQL5. Не нужно тащить хвосты старого терминала.
Но Вы правильно заметили, что СБ не умеет делать частичное закрытие. Вот так получается в Вашем случае! Теперь либо ждите исправления от разработчиков, либо сами вносите, либо создавайте наследуемый класс от СБ и добавляйте туда перегрузку. Но это уже будет не СБ!
Что править на "чистом" MQL5 - Вы уже разобрались. У всех остальных, кто не связывался с СБ, это работало изначально. И Hedging к частичному закрытию никакого отношения не имеет.
Ознакомьтесь с понятием перегрузки. Даже в СБ есть
Но Вы правильно заметили, что СБ не умеет делать частичное закрытие. Вот так получается в Вашем случае! Теперь либо ждите исправления от разработчиков, либо сами вносите, либо создавайте наследуемый класс от СБ и добавляйте туда перегрузку. Но это уже будет не СБ!
Что править на "чистом" MQL5 - Вы уже разобрались. У всех остальных, кто не связывался с СБ, это работало изначально. И Hedging к частичному закрытию никакого отношения не имеет.
С перезагрузкой, наследованием я знаком. Но, всё равно, спасибо, что лишний раз упомянули.
Вы ни как не можете понять, что Вы человека, который изначально изучает MQL5 и потом видит Ваш старообрядный
просто вгоняете в ступор. Мало того, такой Ваш код порождает путаницу, так как, Вы сами даже нашли:
Как говорится найдите две разницы :).
С перезагрузкой, наследованием я знаком. Но, всё равно, спасибо, что лишний раз упомянули.
Вы ни как не можете понять, что Вы человека, который изначально изучает MQL5 и потом видит Ваш старообрядный
просто вгоняете в ступор.
Вгоняется в ступор человек, не знакомый с понятием перегрузки. ЛЮБОЙ старожил на этом форуме скажет, что мой код выше - это самый понятный пример на MQL5. Т.е. взглянув на код, старожил МГНОВЕННО скажет, что этот код делает. Тут же, не задумываясь! В этом и сила. И именно по этой причине в таком стиле народ пишет и обсуждает ТС на форумах так активно. Потому что все понятно! И этот код ничуть по чистоте не уступает СБ. Превосходит только в скорости понимания и количестве понимающих.
Для очень непонятливых - ещё раз: "четвёрочный " стиль написания неприемлем, так как не все учили сначала МТ4, а потом МТ5. Таким написанием Вы только путаете тех, кто учил начиная с МТ5. Хотите писать в стиле "четвёрки" - пожалуйста, на форуме появился новый раздел.
Ибо человек взглянув в справку MQL5, видит это:
Функция OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер.
bool OrderSend(
MqlTradeRequest& request, // структура запроса
MqlTradeResult& result // структура ответа
);
что никоим образом не совпадает с "четвёрочным стилем".
Поэтому, не прикрывайтесь терминами ООП, а просто не путайте людей.
Для очень непонятливых - ещё раз: "четвёрочный " стиль написания неприемлем, так как не все учили сначала МТ4, а потом МТ5. Таким написанием Вы только путаете тех, кто учил начиная с МТ5. Хотите писать в стиле "четвёрки" - пожалуйста, на форуме появился новый раздел.
Ибо человек взглянув в справку MQL5, видит это:
Функция OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер.
bool OrderSend(
MqlTradeRequest& request, // структура запроса
MqlTradeResult& result // структура ответа
);
что никоим образом не совпадает с "четвёрочным стилем".
Поэтому, не прикрывайтесь терминами ООП, а просто не путайте людей.
Новичек в первую очередь обратит внимание на #include <MT4Orders.mqh>. Вы не пишите на чистом MQL5, а используете, как сами выяснили, неполноценную СБ, которая вызывается абсолютно так же, как и упомянутая библиотека.
Не буду спорить с Вами, где и чему какое место. Но, в отличие от Вас, сделал огромный шаг навстречу той массе людей, которая знает MQL4, но не может перейти на MQL5. Фактически, многие тысячи людей могут существенно проще перейти с четверки на пятерку. И, когда это сделают "не чисто", то смогут уже погружаться в дебри "чистого" MQL5.
Скинул ссылку на этот пост stringo, Rosh и Renat, чтобы они со своей колокольни, при желании, разрулили данную ситуацию. Если не вмешаются, значит ничего плохого, как поспешно можно оценить, я не делаю, предлагая кроссплатформенный код, по производительности ничуть не уступающий СБ. А по возможностям, как выяснилось, даже превосходящий на данный момент.
Пока решение такое - свой класс с одним методом, производный от класса стандартной библиотеки CTrade:
//| CPartialClosing.mqh |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CPartialClosing : public CTrade
{
private:
public:
CPartialClosing();
~CPartialClosing();
bool PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX,const double partial_volume=0);
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CPartialClosing::CPartialClosing()
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CPartialClosing::~CPartialClosing()
{
}
//+------------------------------------------------------------------+
//| Close specified opened position |
//+------------------------------------------------------------------+
bool CPartialClosing::PositionClose(const ulong ticket,const ulong deviation,const double partial_volume=0)
{
//--- check stopped
if(IsStopped(__FUNCTION__))
return(false);
//--- check position existence
if(!PositionSelectByTicket(ticket))
return(false);
string symbol=PositionGetString(POSITION_SYMBOL);
//--- clean
ClearStructures();
//--- check
if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
//--- prepare request for close BUY position
m_request.type =ORDER_TYPE_SELL;
m_request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
}
else
{
//--- prepare request for close SELL position
m_request.type =ORDER_TYPE_BUY;
m_request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
}
//--- setting request
m_request.action =TRADE_ACTION_DEAL;
m_request.position =ticket;
m_request.symbol =symbol;
m_request.volume =(partial_volume==0) ? PositionGetDouble(POSITION_VOLUME) : partial_volume;
m_request.magic =m_magic;
m_request.deviation=(deviation==ULONG_MAX) ? m_deviation : deviation;
//--- close position
PrintFormat("PositionClose #%I64d %s %.2f",ticket,EnumToString((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)),m_request.volume);
return(OrderSend(m_request,m_result));
}
//+------------------------------------------------------------------+
В методе PositionClose(const ulong ticket,const ulong deviation,const double partial_volume=0) третий параметр по-умолчанию равен нулю. При обычном привычном программировании приказ на закрытие будет выглядеть так:
то есть третий параметр даже не мешает.
А вот как будет выглядеть вызов с указанием объёма частичного закрытия:
Прочтя такой ответ, тысячи людей, знающих MQL4, ни за что не захотят переходить на MQL5. А те, кто не знает MQL4/5, захотят изучить MQL4, а не MQL5.
Зачем дискредитируете замечательный MQL5? Его же можно подавать очень изящно и с огромным положительным эффектом.
Прочтя такой ответ, тысячи людей, знающих MQL4, ни за что не захотят переходить на MQL5. А те, кто не знает MQL4/5, захотят изучить MQL4, а не MQL5.
Зачем дискредитируете замечательный MQL5? Его же можно подавать очень изящно и с огромным положительным эффектом.
По теме есть что сказать? Например есть версия не использовать специальный класс с одним методом, а просто заполнение структур
MqlTradeResult m_result; // result data
для отсылки команды
По теме есть что сказать?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Hedging. Частичное закрытие.
fxsaber, 2016.11.02 17:43
либо ждите исправления от разработчиков, либо сами вносите, либо создавайте наследуемый класс от СБ и добавляйте туда перегрузку. Но это уже будет не СБ!