//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//--- we work only at the time of the birth of new bardatetime time_0=iTime(m_symbol.Name(),Period(),0);
if(time_0==m_prev_bars)
return;
m_prev_bars=time_0;//--- m_trade.Buy(m_symbol.LotsMin());
}
Задача: есть два индикатора iMA. Необходимо найти: сколько баров прошло с момента последнего пересечения.
Алгоритм: если это первый запуск - используйте первую форму функции CopyBuffer
Вызов по первой позиции и количеству требуемых элементов
intCopyBuffer(
int indicator_handle, // indicator handleint buffer_num, // indicator buffer numberint start_pos, // start positionint count, // amount to copydouble buffer[] // target array to copy
);
копируем 100 элементов и ищем пересечение. Выводим номер бара и время открытия бара с пересечением.
for(int i=1; i<count-1; i++)
{
if((fast[i+1]<slow[i+1] && fast[i]>slow[i]) || (fast[i+1]>slow[i+1] && fast[i]<slow[i]))
{
Comment("Bars after the last iMA crossing: ",IntegerToString(i+1)," (",TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES),")");
m_last_crossing=rates[i+2].time;
return;
}
}
В следующий раз мы используем третью форму
Вызов по датам начала и конца требуемого временного интервала
intCopyBuffer(
int indicator_handle, // indicator handleint buffer_num, // indicator buffer numberdatetime start_time, // start date and timedatetime stop_time, // end date and timedouble buffer[] // target array to copy
);
Counting of elements of copied data (indicator buffer with the index buffer_num) from the starting position is performed from the present to the past, i.e., starting position of 0 means the current bar (indicator value for the current bar). When copying the yet unknown amount of data, it is recommended to use a dynamic array as a buffer[]...
Пример того, как создать хэндл к индикатору MACD. Пример того, как получить значения индикатора MACD на трех последних барах. Запомните главное правило: хэндл индикатора нужно создавать один раз (лучший вариант - создавать хэндл в OnInit).
Здравствуйте Владимир, спасибо за вашу большую работу, я многому научился у вас на MQL5 и хочу помочь вам с функцией (PositionClosePartial) и этим кодом, пожалуйста, посмотрите на него... так как иногда удается закрыть часть, а иногда нет и закрывает все сделки при его использовании в хеджировании:
voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
ENUM_ACCOUNT_MARGIN_MODE AccountMargin = (ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
if(AccountMargin==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)accofif=true;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_type =-1;
long deal_entry =-1;
double deal_volume =0.0;
string deal_symbol ="";
if(HistoryDealSelect(trans.deal))
{
deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
}
elsereturn;
if(deal_entry==DEAL_ENTRY_OUT)
{
ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
ulong deviation=ULONG_MAX;
switch((int)deal_type)
{
caseDEAL_TYPE_SELL:
if(Total(POSITION_TYPE_SELL) >0&& accofif)
m_trade.PositionClosePartial(PositionTicket,Lot,-1);
break;
caseDEAL_TYPE_BUY:
if(Total(POSITION_TYPE_BUY) >0&& accofif)
m_trade.PositionClosePartial(PositionTicket,Lot,-1);
break;
default:
break;
}
}
}
}
Removing an order from the list of the open ones. An order can be deleted from the open ones as a result of setting an appropriate request or execution (filling) and moving to the history. Updating a deal in the history. There may be cases when a previously executed deal is changed on a server. For example, a deal has been changed in an...
Здравствуйте Владимир, спасибо за вашу большую работу, я многому научился у вас на MQL5 и хочу помочь вам с функцией (PositionClosePartial) и этим кодом, пожалуйста, посмотрите на него... так как иногда удается закрыть часть, а иногда нет и закрывает все сделки при его использовании в хеджировании:
спасибо большое Примечание: я много искал в библиотеке MQL5 я не нашел использование PositionClosePartial и я надеюсь, что вы добавите эту функциональность в библиотеку ... с наилучшими пожеланиями
Ahmadahmad654 : большое спасибо Примечание: я много искал в библиотеке MQL5 я не нашел использование PositionClosePartial и я надеюсь, что вы добавите эту функциональность в библиотеку ... с наилучшими пожеланиями
Когда мне нужно закрыть часть позиции (на хедж-счете), я использую CTrade.PositionClosePartial
Открывайте позицию на каждой новой свече.
Сначала определяем новый бар.
Если это новый бар - открываем позицию BUY с минимальным объемом.
Полный код:
Бары после последнего пересечения iMA
Задача: есть два индикатора iMA. Необходимо найти: сколько баров прошло с момента последнего пересечения.
Алгоритм: если это первый запуск - используйте первую форму функции CopyBuffer
копируем 100 элементов и ищем пересечение. Выводим номер бара и время открытия бара с пересечением.
В следующий раз мы используем третью форму
Значение iMACD на графике
Пример того, как создать хэндл к индикатору MACD. Пример того, как получить значения индикатора MACD на трех последних барах. Запомните главное правило: хэндл индикатора нужно создавать один раз (лучший вариант - создавать хэндл в OnInit).
Полный код:
Результат:
Пример получения значений из индикатора iStochastic
Код: iStochastic get value.mq5
Не забывайте о правилах: создавайте хэндл индикатора ОДИН раз в OnInit, используйте CopyBuffer для получения данных.
Результат:
Пример Тип свечи (мы используем MqlRates)
Здравствуйте Владимир, спасибо за вашу большую работу, я многому научился у вас на MQL5 и хочу помочь вам с функцией (PositionClosePartial) и этим кодом, пожалуйста, посмотрите на него... так как иногда удается закрыть часть, а иногда нет и закрывает все сделки при его использовании в хеджировании:
Здравствуйте Владимир, спасибо за вашу большую работу, я многому научился у вас на MQL5 и хочу помочь вам с функцией (PositionClosePartial) и этим кодом, пожалуйста, посмотрите на него... так как иногда удается закрыть часть, а иногда нет и закрывает все сделки при его использовании в хеджировании:
Ошибка:
если вы поймали сделку типа'DEAL_ENTRY_OUT', то позиции уже нет.
Необходимо изменить логику.
Примечание: я много искал в библиотеке MQL5
я не нашел использование PositionClosePartial и я надеюсь, что вы добавите эту функциональность в библиотеку
... с наилучшими пожеланиями
большое спасибо
Примечание: я много искал в библиотеке MQL5
я не нашел использование PositionClosePartial и я надеюсь, что вы добавите эту функциональность в библиотеку
... с наилучшими пожеланиями
Когда мне нужно закрыть часть позиции (на хедж-счете), я использую CTrade.PositionClosePartial