Разясните логику работы с CTrade мтод sell - страница 2

 
0x41:

Можете объяснить как я должен действовать - не могу понять.

Я хочу разместить рыночный ордер на продажу, согласно документации я вызываю метод sell

atrade.Sell(0,5,asymbol.Name()); // atrade == CTrade


Но он возвращает булевой тип, ладно это понятно, но как мне модифицировать этот ордер в будущем? и как его проверить?

Есть методы ResultRetcode и ResultDeal - но они не принимают ни каких параметров, как я могу быть уверен что я проверяю именно нужный ордер?

Во общем я хочу установить рыночный ордер на продажу, проверить что он установился, и потом установить для ордера TP как мне это сделать с использованием  CTrade?

Вот в обычном MQL я делал все по id тикета, а тут такова нет. (точнее скорее всего есть я просто не понимаю как  с этим работать).

Можете разъяснить этот вопрос?

Спасибо!

Кроме методов ResultRetcode и ResultDeal есть ещё

   void              Result(MqlTradeResult &result) const;

в котором заполняется структура MqlTradeResult. Но и это ещё не всё… Выставление ордера происходит в функции

   return(OrderSend(m_request,m_result));

именно здесь заполняется структура MqlTradeResult и возвращается результат true или false. Так-что получив true смело можно читать либо всю структуру, либо отдельно нужное поле используя методы ResultRetcode и ResultDeal или другие.

 
Alexey Viktorov #:

Вот на все 100 согласен с этими словами.

автор этих поделок сам это знает. И его цель не показать правильный код, а заполнить CodeBase своими поделками. Куда смотрит администрация¿ Видимо решили за один год в CodeBase напихать кодов больше чем на mql4 много лет писа́ли.

Алексей! Откуда Вы знаете, что автор этих поделок сам это знает? И откуда Вы знаете его цель ?

 
zvezdocheet #:

Алексей! Откуда Вы знаете, что автор этих поделок сам это знает? И откуда Вы знаете его цель ?

Частное мнение. Если есть желание спросите у него… хотя вряд-ли получите честный ответ. Я-бы соврал без зазрения совести.

 
0x41:

Можете объяснить как я должен действовать - не могу понять.

Я хочу разместить рыночный ордер на продажу, согласно документации я вызываю метод sell

atrade.Sell(0,5,asymbol.Name()); // atrade == CTrade


Но он возвращает булевой тип, ладно это понятно, но как мне модифицировать этот ордер в будущем? и как его проверить?

Есть методы ResultRetcode и ResultDeal - но они не принимают ни каких параметров, как я могу быть уверен что я проверяю именно нужный ордер?

Во общем я хочу установить рыночный ордер на продажу, проверить что он установился, и потом установить для ордера TP как мне это сделать с использованием  CTrade?

Вот в обычном MQL я делал все по id тикета, а тут такова нет. (точнее скорее всего есть я просто не понимаю как  с этим работать).

Можете разъяснить этот вопрос?

Спасибо!

У меня работает так: https://www.mql5.com/ru/articles/2513

/--- 3. пример покупки по указанному символу с заданными SL и TP
   double volume=1;           // укажем объем торговой операции
   string symbol="Si-6.16";   // укажем символ, на котором проводится операция
   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт
   double bid=SymbolInfoDouble(symbol,SYMBOL_BID);             // текущая цена для закрытия LONG
   double SL=bid-100*point;                                    // ненормализованное значение SL
   SL=NormalizeDouble(SL,digits);                              // нормализуем Stop Loss
   double TP=bid+100*point;                                    // ненормализованное значение TP
   TP=NormalizeDouble(TP,digits);                              // нормализуем Take Profit
//--- получим текущую цену открытия для LONG позиций
   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(),")");
     }

выставляю с нулями и ТР и СЛ, далее модифицирую:

//--- количество знаков после запятой
   int    digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
//--- значение пункта
   double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
//--- получим текущую цену Bid
   double price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
//--- вычислим и нормализуем уровни SL и TP
   double SL=NormalizeDouble(price-100*point,digits);
   double TP=NormalizeDouble(price+100*point,digits);
//--- все готово, делаем попытку модифицировать позицию на покупку
   if(!trade.PositionModify(_Symbol,SL,TP))
     {
      //--- сообщим о неудаче
      Print("Метод PositionModify() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод PositionModify() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }

проверка - если вам нужна - сами.

С чего начать при создании торгового робота для Московской биржи MOEX
С чего начать при создании торгового робота для Московской биржи MOEX
  • www.mql5.com
Многие трейдеры на Московской бирже хотели бы автоматизировать свои торговые алгоритмы, но не знают с чего начать. Язык MQL5 предлагает не только огромный набор торговых функций, но и готовые классы, которые максимально облегчают первые шаги в алготрейдинге.
 

Странный вопрос. Смотрим документацию.

Sell

Открывает короткую позицию с заданными параметрами.

bool  Sell(
   double        volume,          // объем позиции
   const string  symbol=NULL,     // символ
   double        price=0.0,       // цена исполнения
   double        sl=0.0,          // цена Stop Loss
   double        tp=0.0,          // цена Take Profit
   const string  comment=""       // комментарий
   )

А вот что пишет автор

atrade.Sell(0,5,asymbol.Name());


Он хочет создать ордер нулевого размера по символу "5" с ценой исполнения asymbol.Name()?

ИМХО, ничего удивительного, что ничего не работает.. Может быть, так заработает? atrade.Sell(0.5, _Symbol) ?

Ну и код обработки анализировать. В конце концов есть дебагер. ***, но есть.

 
knodit #:

Странный вопрос. Смотрим документацию.

Sell

Открывает короткую позицию с заданными параметрами.

А вот что пишет автор

atrade.Sell(0,5,asymbol.Name());


Он хочет создать ордер нулевого размера по символу "5" с ценой исполнения asymbol.Name()?

ИМХО, ничего удивительного, что ничего не работает.. Может быть, так заработает? atrade.Sell(0.5, _Symbol) ?

Ну и код обработки анализировать. В конце концов есть дебагер. ***, но есть.

да, кстати, там вместо . идет у него ,

В справке все есть... и статьях.

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionOpen
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionOpen
  • www.mql5.com
PositionOpen(const string,ENUM_ORDER_TYPE,double,double,double,double,const string) - CTrade - Торговые классы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5