Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 722
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да, уж... Где-бы такого брокера найти... Ссылкой не поделишься?
Доброе время суток,
Вопрос:
Подскажите пожалуйста, почему я не могу поставить отложенник на бай:
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point;
при offset=1 выпадает ошибка:
failed buy stop 0.10 AUDNZD.m at 1.03748 [Invalid price], т.е.маленький уровень цены (в моем случае)
Когда же при постановки сразу за ним же «ордера по исполнению»
request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)
все нормально отрабатывает (т.е. ордер ставится):
order performed buy 0.10 at 1.03747 [#2 buy 0.10 AUDNZD.m at 1.03747]
Почему не принимается запрос по отложенному ордеру (1.03748), т.е. при 1.03747 – ставится, а при 1.03748 – маленькое значение? (ведь SYMBOL_ASK учитавает спред, а offset - отступ от текущей цены для установки ордера, в пунктах, увеличен на 1)
Но при offset=100: ордер отложенный BUY_STOP price = 1.03847 – уже работает
Спасибо.Доброе время суток,
Вопрос:
Подскажите пожалуйста, почему я не могу поставить отложенник на бай:
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point;
при offset=1 выпадает ошибка:
failed buy stop 0.10 AUDNZD.m at 1.03748 [Invalid price], т.е.маленький уровень цены (в моем случае)
Когда же при постановки сразу за ним же «ордера по исполнению»
request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)
все нормально отрабатывает (т.е. ордер ставится):
order performed buy 0.10 at 1.03747 [#2 buy 0.10 AUDNZD.m at 1.03747]
Почему не принимается запрос по отложенному ордеру (1.03748), т.е. при 1.03747 – ставится, а при 1.03748 – маленькое значение?
Но при offset=100: ордер отложенный BUY_STOP price = 1.03847 – уже работает
Спасибо.Вы же сами и ответили на свой вопрос.
Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях
Вы же сами и ответили на свой вопрос.
Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях
Тогда наверняка справедлива будет запись:
price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*point
хотя, если вы написали "...от текущей цены", то причем тут спред? Который входит в SYMBOL_ASK (ведь SYMBOL_ASK = цена открытия+спред).
Я прикрепил пример, который поможет Вам...
Понятно, пример помог. Спасибо.
Теперь такой вопрос.
При увеличении лота в какой-то момент чуть не хватает свободных средств, а открыть нужно увеличенным лотом.
То есть, войти максимальным лотом, сколько позволяет FreeMargin.
Как записать такое условие: если для открытия позиции расчетным лотом недостаточно средств, то функция должна вернуть максимально возможный лот для открытия позиции.
{
double Lot=FirstLot;
if(DoublingCount<=0) return Lot;
double MaxLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
double MainLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(Lot<MainLot)Lot=MainLot;
if(Lot>MaxLot)Lot=MaxLot;
double lt1=Lot;
HistorySelect(0,TimeCurrent());
if(HistoryOrdersTotal()==0)return(Lot);
double cl=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-1),ORDER_PRICE_OPEN);
double op=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_PRICE_OPEN);
long typeor=HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_TYPE);
if(typeor==ORDER_TYPE_BUY)
{
if(op>cl)
{
if(ud<DoublingCount)
{
lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
ud++;
}
else ud=0;
}
else ud=0;
}
if(typeor==ORDER_TYPE_SELL)
{
if(cl>op)
{
if(ud<DoublingCount)
{
lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
ud++;
}
else ud=0;
}
else ud=0;
}
if(lt1>MaxLot)lt1=MaxLot;
lt1=LotCheck(lt1);
return(lt1);
}
//+------------------------------------------------------------------+}
Понятно, пример помог. Спасибо.
Теперь такой вопрос.
При увеличении лота в какой-то момент чуть не хватает свободных средств, а открыть нужно увеличенным лотом.
То есть, войти максимальным лотом, сколько позволяет FreeMargin.
Как записать такое условие: если для открытия позиции расчетным лотом недостаточно средств, то функция должна вернуть максимально возможный лот для открытия позиции.
double Mgn,Lot=0,BID,ASK;
BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
Марина, может быть так?
Два варианта расчета применяете - один для открытия SELL, а другой - для открытия BUY
if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
Не, не так.
Нужно не просто вычислить максимально возможный лот, но и проверить всё это дело на минимально допустимый, потому как может произойти ситуация, что минимальный лот 0.01, а маржа позволяет открыть только 0.009, тогда замучаете сервер запросами, которые никогда не примут, а вот меры на вас могут и принять)
Не, не так.
Нужно не просто вычислить максимально возможный лот, но и проверить всё это дело на минимально допустимый, потому как может произойти ситуация, что минимальный лот 0.01, а маржа позволяет открыть только 0.009, тогда замучаете сервер запросами, которые никогда не примут, а вот меры на вас могут и принять)
Напишите полный код, как должно быть, ну и я посмотрю заодним....?
Я теперь всегда буду учиться у Вас и посматривать за Вами, чтобы ответы были в полном объеме.
Я когда то работал технадзором, не переживайте, всё будет ОК!
Вместе мы - команда!
Понятно, пример помог. Спасибо.
Теперь такой вопрос.
При увеличении лота в какой-то момент чуть не хватает свободных средств, а открыть нужно увеличенным лотом.
То есть, войти максимальным лотом, сколько позволяет FreeMargin.
Как записать такое условие: если для открытия позиции расчетным лотом недостаточно средств, то функция должна вернуть максимально возможный лот для открытия позиции.