crowly:
Никак не удается открыть ордер с установленными стопом и профитом.
вероятно вы работаете на брокере с Маркет исполнением.
проверьте - можете ли вы открывать ордера со стопами в самом терминале. F9 - открыть рыночный ордер.
Если у вас таки маркет исполнение, и терминал это подтверждает, то нельзя открывать ордера со стопами. Их можно выставлять только у уже открытых ордеров.
sergeev:
Да, так и есть. Спасибо! Буду переделывать.
вероятно вы работаете на брокере с Маркет исполнением.
проверьте - можете ли вы открывать ордера со стопами в самом терминале. F9 - открыть рыночный ордер.
Если у вас таки маркет исполнение, и терминал это подтверждает, то нельзя открывать ордера со стопами. Их можно выставлять только у уже открытых ордеров.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день!
Никак не удается открыть ордер с установленными стопом и профитом. Перепробовал несколько способов - ни один не работает (например этот https://www.mql5.com/ru/articles/639). Ордера открываются но стоп и профит не выставляются. Подскажите пожалуйста, как открыть ордер со стопом и профитом для тестирования?
#include<Trade\Trade.mqh>
CTrade trade;
int OnInit()
{
//--- зададим MagicNumber для идентификации своих ордеров
int MagicNumber=123456;
trade.SetExpertMagicNumber(MagicNumber);
//--- установим допустимое проскальзывание в пунктах при совершении покупки/продажи
int deviation=10;
trade.SetDeviationInPoints(deviation);
//--- режим заполнения ордера, нужно использовать тот режим, который разрешается сервером
trade.SetTypeFilling(ORDER_FILLING_RETURN);
//--- режим логирования: лучше не вызывать этот метод вообще, класс сам выставит оптимальный режим
trade.LogLevel(1);
//--- какую функцию использовать для торговли: true - OrderSendAsync(), false - OrderSend()
trade.SetAsyncMode(true);
return(0);
}
void OnTick()
{
if(!PositionSelect(_Symbol)){
double volume=0.1; // укажем объем торговой операции
string symbol=_Symbol; // укажем символ, на котором проводится операция
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой
double point=SymbolInfoDouble(symbol,SYMBOL_POINT); // пункт
double bid=SymbolInfoDouble(symbol,SYMBOL_BID); // текущая цена для закрытия LONG
double SL=bid-50*point; // ненормализованное значение SL
SL=NormalizeDouble(SL,digits); // нормализуем Stop Loss
double TP=bid+100*point; // ненормализованное значение TP
TP=NormalizeDouble(TP,digits);
double open_price=SymbolInfoDouble(symbol,SYMBOL_ASK);
string comment=StringFormat("Buy %s %G lots at %s, SL=%s TP=%s",
symbol,volume,
DoubleToString(open_price,digits),
DoubleToString(SL,digits),
DoubleToString(TP,digits));
if(!trade.Buy(volume,symbol,open_price,SL,TP,comment))
{
//--- сообщим о неудаче
Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
". Описание кода: ",trade.ResultRetcodeDescription());
}
else
{
Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
" (",trade.ResultRetcodeDescription(),")");
}}}