Вопрос OrderModify() - страница 2

 
WhooDoo22:

Ах-ха! Я поменял номер билета с 0 на 1, и все заработало как часы. Да, я ошибался, Уильям... Проблема была в функции OrderSelect(). Очевидно, что функция OrderSelect() должна выбрать билет. Если номер билета равен 0, какой билет выберет эксперт? :O "?". Спасибо вам обоим за помощь.

Спасибо.

Номер билета НИКОГДА не будет равен 0 ... это не действительный номер билета.


Пожалуйста, обратитесь к этой теме:https://www.mql5.com/en/forum/142545
 

Саймон, я понимаю, что 0 не является действительным номером билета, ПОСКОЛЬКУ 0 означает, что нет билетов для выбора. 1 представляет билет И конкретный номер билета, который пытается выбрать функция OrderSelect().

Я прочитаю эту тему. Спасибо, что опубликовали ее.

Спасибо.

 
WhooDoo22:

Я понимаю, что 0 не является действительным номером билета, ПОСКОЛЬКУ 0 означает, что нет билетов для выбора. 1 представляет билет И конкретный номер билета, который функция OrderSelect() выбирает в данный момент.

Нет, это неправильно. ноль как номер билета ничего не значит, это ИНВАЛИД. OrdersTotal() == 0 означает, что нет ордеров ... очевидно, что вы смешиваете результаты от разных функций и номера билетов против позиций ордеров.


Не делайте то же самое, что делали раньше... ...если не хотите получить точно такой же результат. Вы не можете считать, что у вас есть правильный номер билета... ... вам нужно найти его в пуле заказов, а затем выбрать его...

Если вы хотите научиться, выполните это упражнение:

  • откройте новый демо-счет у любого брокера
  • разместите рыночный ордер на 0,1 лота без TP или SL
  • напишите код, который будет находить правильный номер тикета для этого ордера, затем использовать номер тикета для выбора ордера, затем модифицировать его так, чтобы он имел TP и SL и, наконец, закрыть его.

 
RaptorUK:

Нет, это неправильно. ноль как номер билета ничего не значит, это ИНВАЛИД. OrdersTotal() == 0 означает, что нет заказов ... очевидно, что вы смешиваете результаты различных функций и номера билетов.

Если вы хотите научиться, выполните это упражнение:

  • откройте новый демо-счет у любого брокера
  • разместите рыночный ордер на 0.1 лота без TP или SL
  • напишите код, который будет находить правильный номер тикета для этого ордера, затем использовать номер тикета для выбора ордера, затем изменить его так, чтобы он имел TP и SL и, наконец, закрыть его.


Вы попробовали это упражнение? Покажите ваш код, когда вы его выполните...
 

Саймон,

Я буду кодировать этот проект. Это должно быть проще простого. Я уже сделал большую часть работы. ;)

Да, я не против сделать это упражнение, видя вашу последовательную поддержку.

Спасибо.

 

Саймон,

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

Разница между тем, что я сейчас создаю, и этим проектом заключается в следующем...

Текущий проект:

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){

Этот проект:

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

Причина, по которой я использовал "if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){", заключается в том, что я имею дело с пулом ордеров, а не с предопределенной специфической переменной тикета.

Моя текущая сборка для тома II использует предопределенные переменные, потому что я должен выбрать определенные тикеты для запуска стратегии тома II. Этот проект был разработан для простого закрытия ордера в мгновение ока.

На самом деле у меня возникла пара вопросительных знаков над головой, когда я кодировал выполнение функции, содержащей Ask/Bid цену. Это потому, что обычно при отправке/закрытии ордеров я просто ввожу "Ask"/"Bid", но я понял, что мне нужно определить переменную, которая могла бы быть либо ценой Ask, либо ценой Bid в зависимости от того, был ли ордер на рынке ордером на продажу или покупку. Затем я просто вставил обычное "if orders total is greater than zero", и все готово. Это должно практически полностью покрыть все.

Спасибо.

Файлы:
 

Хорошо, это не то, что я хотел, но я должен был быть более ясным с моим требованием. Ваш код не устанавливает SL и TP... но в любом случае позвольте мне пересмотреть мое требование. . .

Используя тот же самый демо-счет ...

  • разместите один рыночный ордер на 0.1 лота без TP или SL на GBPUSD, один на USDJPY и один на EURUSD ... забудьте порядок, в котором вы разместили эти ордера
  • без учета порядка, в котором были размещены сделки, и без предварительного знания количества размещенных ордеров напишите код, который найдет правильный номер тикета для ордера, размещенного на USDJPY
  • вывести номер билета в журнал в форме "Номер билета для USDJPY = "
  • затем используйте номер билета для выбора ордера, затем измените его так, чтобы у него были TP и SL и, наконец, закройте его.

затем, когда вы закончите, пожалуйста, покажите ваш код и строку из журнала, показывающую номер билета.

 

Саймон,

Ах, извините, я не полностью прочитал ваши первые инструкции и не закодировал то, что вы просили. Ну что ж, вы добавили новый список требований, так что я займусь делом.

Прежде чем я это сделаю, я изложу то, что я собираюсь сделать...

1. Найти номер тикета ордера, размещенного на USDJPY.

2. Вывести номер билета в журнал в виде "Номер билета по USDJPY = ".

3. Используйте номер билета для выбора ордера И измените ордер так, чтобы у него были TP и SL, и закройте его.

4. Покажите код и строку из журнала, показывающую номер тикета.


С учетом сказанного, я хочу уточнить, что мы находимся на одной и той же странице.

Да, я могу сделать 1. (очевидно, я не могу использовать "валютные функции" для выделения тикетов, верно?)

Да, я могу сделать 2.

3. Не имеете ли вы в виду, использовать функцию OrderSelect() для выбора ордера И изменить его так, чтобы у него были TP и SL и закрыть его?

4. Очевидно, я покажу код ;)... строка из журнала, показывающая номер тикета (то, что вы могли попросить, это "визуальный снимок" журнала, показывающий номер тикета. Не важно)

Пожалуйста, сначала опубликуйте ответ, прежде чем я приступлю к выполнению задания.


Спасибо.

 
WhooDoo22:


С учетом сказанного, я хочу уточнить, что мы на одной волне.

Да, я могу сделать 1. (очевидно, я не могу использовать "валютные функции" для выделения тикетов, верно?)

Да, я могу сделать 2.

3. Не имеете ли вы в виду, использовать функцию OrderSelect() для выбора ордера И изменить его так, чтобы у него были TP и SL и закрыть его?

4. Очевидно, я покажу код ;)... строка из журнала, показывающая номер тикета (то, что вы могли попросить, это "визуальный снимок" журнала, показывающий номер тикета. Не важно)

Вы можете использовать любые функции, которые вам нравятся, пока то, что вы кодируете, соответствует требованиям. ... и при этом вы не нарушаете то, что дано в качестве условия, например,"без какого-либо рассмотрения порядка, в котором были размещены сделки, и без предварительного знания количества размещенных ордеров". :-)
 
Как дела? Нужны какие-либо разъяснения или подсказки?