Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 657
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вроде все по делу и даже со ссылками... Просто когда кто-то заявляет, что прочитал документацию и просит убрать неттинг (который, кстати, используется на ФОРТС)... тут без сарказма никуда.
Смотри, чтобы тебя не послали. )
поздно, ты уже там.
Пример для хедж-счёта:
Первая операция - Buy 0.02, вторая операция - Sell 0.01. Итого две позиции: Buy 0.02 и Sell 0.001. Затем закрываем позицию Sell 0.01 и закрываем позицию Buy 0.02:
//| TestEA.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade m_trade; // trading object
CPositionInfo m_position; // trade position object
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
static long counter=0;
counter++;
if(counter%300==0 && counter<700)
{
static int number=0;
number++;
if(number==1)
m_trade.Buy(0.02);
if(number==2)
m_trade.Sell(0.01);
}
if(counter>7000)
{
int positions= PositionsTotal();
if(positions == 0)
return;
int positions_total=PositionsTotal();
for(int i=positions_total-1;i>=0;i--)
if(m_position.SelectByIndex(i))
m_trade.PositionClose(m_position.Ticket(),-1);
}
}
//+------------------------------------------------------------------+
и "Журнал":
Trades 2016.02.25 00:13:35 deal #2 buy 0.02 EURUSD at 1.10167 done (based on order #2)
Trade 2016.02.25 00:13:35 deal performed [#2 buy 0.02 EURUSD at 1.10167]
Trade 2016.02.25 00:13:35 order performed buy 0.02 at 1.10167 [#2 buy 0.02 EURUSD at 1.10167]
TestEA (EURUSD,H1) 2016.02.25 00:13:35 CTrade::OrderSend: instant buy 0.02 EURUSD at 1.10167 [done at 1.10167]
Trade 2016.02.25 00:30:17 instant sell 0.01 EURUSD at 1.10157 (1.10157 / 1.10164 / 1.10157)
Trades 2016.02.25 00:30:17 deal #3 sell 0.01 EURUSD at 1.10157 done (based on order #3)
Trade 2016.02.25 00:30:17 deal performed [#3 sell 0.01 EURUSD at 1.10157]
Trade 2016.02.25 00:30:17 order performed sell 0.01 at 1.10157 [#3 sell 0.01 EURUSD at 1.10157]
TestEA (EURUSD,H1) 2016.02.25 00:30:17 CTrade::OrderSend: instant sell 0.01 EURUSD at 1.10157 [done at 1.10157]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 PositionClose #3 POSITION_TYPE_SELL 0.01
Trade 2016.02.25 02:12:06 instant buy 0.01 EURUSD at 1.10131, close #3 (1.10123 / 1.10131 / 1.10123)
Trades 2016.02.25 02:12:06 deal #4 buy 0.01 EURUSD at 1.10131 done (based on order #4)
Trade 2016.02.25 02:12:06 deal performed [#4 buy 0.01 EURUSD at 1.10131]
Trade 2016.02.25 02:12:06 order performed buy 0.01 at 1.10131 [#4 buy 0.01 EURUSD at 1.10131]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 CTrade::OrderSend: instant buy 0.01 position #3 EURUSD at 1.10131 [done at 1.10131]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 PositionClose #2 POSITION_TYPE_BUY 0.02
Trade 2016.02.25 02:12:06 instant sell 0.02 EURUSD at 1.10123, close #2 (1.10123 / 1.10131 / 1.10123)
Trades 2016.02.25 02:12:06 deal #5 sell 0.02 EURUSD at 1.10123 done (based on order #5)
Trade 2016.02.25 02:12:06 deal performed [#5 sell 0.02 EURUSD at 1.10123]
Trade 2016.02.25 02:12:06 order performed sell 0.02 at 1.10123 [#5 sell 0.02 EURUSD at 1.10123]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 CTrade::OrderSend: instant sell 0.02 position #2 EURUSD at 1.10123 [done at 1.10123]
Что именно не понятно? То что, для закрытия позиции нужно открыть противоположный ордер таким-же объёмом?
Кто знает - в "POSITION_PROFIT" включена комиссия и своп?
Если нет - то какой параметр нужен, чтобы узнать сумму начисленной комиссии по ордеру в MQL5?
Кто знает - в "POSITION_PROFIT" включена комиссия и своп?
Если нет - то какой параметр нужен, чтобы узнать размер начисленной комиссии по ордеру в MQL5?
POSITION_PROFIT - это просто прибыль позиции (без вычета комиссий, свопов ...). Узнать накопленный своп позиции можно так:
POSITION_SWAP
Накопленный своп
double
А вот итоговую комиссию и итоговый своп, можно будет узнать после закрытия позиции, в истории сделок:
DEAL_COMMISSION
Комиссия по сделке
double
DEAL_SWAP
Накопленный своп при закрытии
double
Кто знает - в "POSITION_PROFIT" включена комиссия и своп?
Если нет - то какой параметр нужен, чтобы узнать сумму начисленной комиссии по ордеру в MQL5?
Ну если сказать по-русски, то ордер не может быть ни с прибылью, ни с убытком, это всего лишь приказ на дальнейшее исполнение. После исполнения приказа(ордера), вы получаете свою позицию в рынке по выбранной вами цене.
POSITION_PROFIT - это просто прибыль позиции (без вычета комиссий, свопов ...). Узнать накопленный своп позиции можно так:
А вот итоговую комиссию и итоговый своп, можно будет узнать после закрытия позиции, в истории сделок:
Ну вот неправильно всё это, вернее недоделано.
Зачем мне знать комиссию после закрытия, вернее знать нужно, но в любой момент времени, предположим, счёт с комиссией и работает трал или безубыток, как мне рассчитать так, чтоб первое срабатывание было на уровень, при котором перекрывается комиссия и свопы в случае отката цены и закрытия. Плюсовать 1пп на перекрытие комиссии, а как-же быть со свопами, ведь позиция может висеть в рынке неделю и за это время набежит свопа на 3пп и при срабатывании безубытка закрытие будет с минусом.
Или Я чего-то недопонимаю в расчётах?
Ну если сказать по-русски, то ордер не может быть ни с прибылью, ни с убытком, это всего лишь приказ на дальнейшее исполнение. После исполнения приказа(ордера), вы получаете свою позицию в рынке по выбранной вами цене.
Ну вот неправильно всё это, вернее недоделано.
Зачем мне знать комиссию после закрытия, вернее знать нужно, но в любой момент времени, предположим, счёт с комиссией и работает трал или безубыток, как мне рассчитать так, чтоб первое срабатывание было на уровень, при котором перекрывается комиссия и свопы в случае отката цены и закрытия. Плюсовать 1пп на перекрытие комиссии, а как-же быть со свопами, ведь позиция может висеть в рынке неделю и за это время набежит свопа на 3пп и при срабатывании безубытка закрытие будет с минусом.
Или Я чего-то недопонимаю в расчётах?
Кто знает - в "POSITION_PROFIT" включена комиссия и своп?
Если нет - то какой параметр нужен, чтобы узнать сумму начисленной комиссии по ордеру в MQL5?
Библиотеку MT4Orders не навязываю. Но, может, будет проще просто вызвать старый добрый OrderCommission?
Все же работает не только на хэдж-счетах, но и на нетто.
Я так понимаю, что в "POSITION_PROFIT" уже всё включено (своп, профит, комиссия) . и мне этого достаточно, чтобы сделать вывод о том - выгодно ли мне крыть