Обсуждение статьи "Торговые операции на MQL5 - это просто" - страница 3

 

Подскажите, возможна ли реализация вот такой конструкции из MQL4 с использованием m_Trade.PositionModify? (m_Trade - член класса CTrade)

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

Смысл такой скрипт открывал по рынку покупку заданным количеством лот, и затем выставлял 10-ью частями тейк-профит. Я уперся в то, что без выставления стоп-лосса PositionModify выдает ошибку 10016 (Неправильные стопы в запросе). А задача ставить стоп не стоит :). В справке указано, что вроде можно не указывать значение:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

Я пробовал передавать значение полученное из предыдущего запроса на покупку (там ноль естественно), ну и те же грабли только в профиль. Вот мой код:

...
         m_Trade.Buy(Lots);//покупаем по рынку весь объем
         if(m_Trade.ResultRetcode()==10008)//если покупка удачная изменяем позицию, выставляя тейки
           {
            S="Заявка выполнена. Номер ордера: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();//получаем стоп лосс с последнего запроса
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="\nРазмещен тейк: "+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="\nПроизошла ошибка изменения позиции с кодом: "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

Заранее благодарен за помощь.

 
Николай Осипов:

Здравствуйте,
При использовании в коде функции BuyStop для торговли фьючерсом RTS-3.13 (RIH3) постоянно возникает ошибка : 
10022 TRADE_RETCODE_INVALID_EXPIRATION - Неверная дата истечения ордера


Николай, приветствую. Вы случаем не разобрались с этой проблемой? Испытываю те же трудности на RTS-6.17, не понимаю как решать.
 
Rashid Zeynalov:
Аналогичная проблема на RTS-3.13 Открытие-демо, перепробовал все (приэтом лимит ордера ставятся на ORDER_TIME_SPECIFIED_DAY  как написано в профиле символа) !!!! При том что buy-stop ордер отлично открывается в рынке в ручную. Это глюк терминала, надо писать разработчикам
Рашид, приветствую. Вы случаем не разобрались с этой проблемой? Испытываю те же трудности на реале Открытия на RTS-6.17.

 
sgtkachev:
Рашид, приветствую. Вы случаем не разобрались с этой проблемой? Испытываю те же трудности на реале Открытия на RTS-6.17.

Извините, не заметил вопроса. Попробуйте заменить у себя этот файл и сообщите о результате, пожалуйста.
Файлы:
Trade.mqh  68 kb
 

Здравствуйте

На некоторых брокерах (FoxPro например) при попытке открытии позиции ошибка 10030. Описание кода: invalid fill. На других (например Alpari) работает без этих строчек

В блоке инициализации советника писал разные значения в коде:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

Не помогает. Как решить проблему? Или это класс CTrade устарел и не соответствует последним обновлениям терминала и надо писать торговые операции по стандартной схеме через структуру?


UPD: Сообщением выше Рашид выложил файл библиотеки, он решил мою проблему. Печаль, что в стандартной библиотеке ошибка. Буду сейчас изучать сравнивать, чтобы понять можно ли без замены библиотеки прямо в советника внести некие изменения, чтобы всё работало

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
Konstantin Efremov:

UPD: Сообщением выше Рашид выложил файл библиотеки, он решил мою проблему. Печаль, что в стандартной библиотеке ошибка. Буду сейчас изучать сравнивать, чтобы понять можно ли без замены библиотеки прямо в советника внести некие изменения, чтобы всё работало

Эти правки уже попали в стандартную библиотеку. Решил ответить тем, кто прочитает статью только сейчас.

 

Всем доброго дня!

Продолжаю изучение языка программирования MQL5. Перерыл почти весь сайт в поисках толковой для меня информации. В основной массе вся информация, найденная на сайте, предназначена для людей, уже имеющих базовое представление о программировании.

И вот! Нашел ещё одну ВЕЛИКОЛЕПНУЮ статью, которая помогла во многом разобраться и доработать свой советник! Жаль что автор не продолжил писать эту серию статей и ограничился только 2012 годом. Но всё-равно, выражаю БОЛЬШОЕ УВАЖЕНИЕ этому человеку и говорю ему такое же БОЛЬШОЕ СПАСИБО от лица всех начинающих!

С уважением, Владимир.

Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
MetaQuotes Language 5 (MQL5) - язык программирования технических индикаторов, торговых роботов и вспомогательных приложений для автоматизации торговли на финансовых рынках. MQL5 является современным языком высокого уровня и разработан MetaQuotes Software Corp. для собственной торгово-информационной платформы. Синтаксис языка максимально близок...
 

В статье при открытии лимитных и стоповых ордеров везде

double price=1000*point;

Интересно, кто пишет, что статья им помогла так и вставляют код из статьи?