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

 

Саймон,

Я пытаюсь придумать, как мне это сделать, но ничего не приходит в голову. Я просматриваю словарь в MetaEditor в поисках возможных путей. Я рассматриваю возможность совместного использования функций OrderSymbol() и OrderSelect(). Если вы даете мне вариант с подсказкой, очевидно, я его приму. Что за подсказка? ;) Я считаю это скорее обсуждением, чем вызовом. Если вы считаете это вызовом, я соглашусь на отсутствие подсказок. Я полностью уверен в своих силах.

Спасибо.

 

Зачем вам использовать MarketInfo() ? чтобы сказать вам что?


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


Код, необходимый для выполнения этого требования, содержит многие аспекты того, что вам нужно было сделать с помощью кода, который вы поместили в Code Base.


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

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

В любом случае, я убежден, что вы научитесь в процессе.

 

Саймон,

Ричард Бхауэр прислал мне пересмотренную версию того, что я разместил ранее. Это определенно НЕ мой стиль кодирования, но я думаю, что он впечатляет. Я решил поделиться с вами, чтобы узнать, имеет ли этот код какое-либо отношение к продвигаемому вами методу выбора и закрытия ордеров. Еще раз спасибо Ричарду. Кроме того, причина, по которой я решил попробовать OrderSymbol(), заключается в том, что я писал советников, использующих несколько ордеров OrderSend("GBPUSD"...); или любую валютную пару. Я предположил, что могу просто попробовать аналогичный процесс для закрытия ордеров. По-видимому, работа по выбору ордера (чтобы закрыть его) выполняется в функции OrderSelect(). В предыдущем сообщении вы упомянули в качестве подсказки, что нужно попробовать запустить цикл для поиска нужного номера билета (я предполагаю, что сначала запускается цикл, и когда билет найден, переходим к следующему блоку кода, содержащему сначала функцию OrderSelect(). Внутри функции OrderSelect() будет находиться переменная, использованная в предыдущем блоке кода цикла для поиска номера нужного билета. Функция OrderSelect() будет использовать эту переменную для выбора билета. Как только билет выбран, все остальное довольно просто. Я прочитаю ваш ответ утром.

Спасибо.

Файлы:
 
WhooDoo22:

По-видимому, работа по выбору ордера (для его закрытия) выполняется в функции OrderSelect().

Ознакомьтесь с документацией следующих функций: OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice(), все они имеют следующее описание:Примечание: Ордер должен быть предварительно выбран функциейOrderSelect().

OrderClose() не имеет этого утверждения, потому что вы передаетеномер билета в OrderClose() в качестве первого параметра ... со всеми функциями, перечисленными выше, вы этого не делаете, поэтому для их использования вам сначала нужно выбрать интересующий вас ордер, что является задачей OrderSelect(). . Затем вы можете найти размер позиции с помощью OrderLots() или цену открытия с помощью OrderOpenPrice(), но сначала его нужно выбрать.


Вы должны усвоить эту концепцию и понять ее. . .

WhooDoo22:

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

Как вы найдете правильный номер билета внутри петли? Вы не знаете, какой номер билета правильный... какая информация у вас есть, которую вы можете использовать?
 

Саймон,

Следующие функции, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() должны быть предварительно выбраны функцией OrderSelect().

Функция OrderClose() не обязана быть предварительно выбрана функцией OrderSelect(), так как функция OrderClose() передает номер тикета в качестве первого параметра.

Назначение функции OrderSelect() - выбрать заказ.

Концепции поняты, я просмотрю документацию.

Как найдете...

RE: Все еще работаю над этим.

Спасибо

 

Саймон,

Кажется, вы продолжаете указывать на "номер билета". Я понимаю это. Но дело вот в чем: я знаю только два способа изолировать билеты с помощью функции OrderSelect(). Я могу использовать способ "Order pool", где нет конкретной переменной номера билета, или я могу использовать другой способ, где я могу использовать конкретное имя переменной билета "ticket", "bababab22", "lambchops", что угодно, чтобы изолировать билет. Я считаю, что использование способа "Order pool" является наиболее практичным, поэтому я рассматриваю возможность использования этой функции таким образом. Мне это нравится.


Кроме того, я просмотрел ревизию Роберта и заметил, что когда он закрывал ордера, он просто использовал функцию OrderSelect(), (ту, где вы выбираете из пула ордеров) и единственное условие "если", используемое помимо очевидного сигнала закрытия, было размер лота и если ордер был покупка/продажа. Вот и все. Мне это нравится, но сейчас задача не в этом. В этой задаче, да, конечно, я мог бы напечатать то же самое, но ничего бы не узнал. Что сейчас сложно, так это как я могу научиться тому, чему вы хотите научить, если я не знаю, чему вы пытаетесь меня научить. Я думаю, если бы вы могли быть более прямым в своих мыслях, я бы смог быстрее понять, чем вы хотите поделиться. Я постараюсь быть более понятливым.

Спасибо.

 
WhooDoo22:

Саймон,

Кажется, вы продолжаете указывать на "номер билета". Я понимаю это. Но вот в чем дело, я знаю только два способа изолировать билеты с помощью функции OrderSelect(). Я могу использовать способ "Order pool", где нет конкретной переменной номера билета, или я могу использовать другой способ, где я могу использовать конкретное имя переменной билета "ticket", "bababab22", "lambchops", что угодно, чтобы изолировать билет. Я считаю, что использование способа "Order pool" является наиболее практичным, поэтому я рассматриваю возможность использования этой функции таким образом. Мне это нравится.

В этом случае вы не можете сохранить номер билета в переменной, поскольку ордера выставляются вручную, поэтому код не знает номера билетов, пока не обнаружит их, поэтому вы можете использовать только первый вариант, используя цикл и OrderSelect().

Сохранение номеров билетов - это большое неудобство и его следует избегать, если только вы не должны это делать, то есть нет никакого возможного способа избежать этого ... почему? Потому что ваш код должен быть в состоянии восстановиться после перезапуска MT4, так что это означает сохранение информации о билетах в файлы и в идеале копирование файлов на второй компьютер для дополнительной резервной копии. Затем, когда код перезапускается, он должен прочитать файл, получить номера билетов и попытаться продолжить с того места, где он остановился ... . Такая сложность не нужна большинству людей, но часто они думают, что сохранение номеров билетов - это более простой вариант... и им на самом деле не нужно сохранять информацию в файлы и т.д. и т.п... а потом, когда все идет не так, они жалеют, что не сделали этого.

Итак, я переделал свою версию кода в соответствии с моими требованиями, я добавил несколько проверок для обнаружения нескольких ордеров USDJPY и модификации и закрытия всех ордеров USDJPY ... вот несколько снимков экрана, чтобы показать, как работает окончательная версия.


Ордера, которые я разместил вручную ...

Все заказы

Ордера USDJPYi, модифицированные моим кодом (обратите внимание на TP и SL) и закрытые, а также номер тикета. Также обратите внимание на смесь ордеров на покупку и продажу.

Закрытые ордера USDJPYi

Остальные ордера ...

Оставшиеся заказы

 

Саймон,

В этом случае вы не можете хранить номер билета в переменной...

RE: Итак, вы собираетесь использовать маршрут "пул заказов" для этого примера, правильно?

// order pool example

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

Сохранение номеров билетов - это большое неудобство...

RE: Согласен.

Сохранение информации о билетах в файлах и, в идеале, копирование файлов на 2-й ПК для дополнительного резервного копирования...

RE: Да, но сохранение информации о билетах в файлы, это отдельная группа блоков кода для моей ситуации в настоящее время. Я бы не начинал кодировать это, пока не будут написаны основы.

Я закодировал свою версию кода, чтобы удовлетворить мое требование...

RE: Да, я вижу это. Кажется, хорошо. :)


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

Спасибо.

 
WhooDoo22:

Саймон,

В этом случае вы не можете хранить номер билета в переменной...

RE: Итак, вы собираетесь использовать маршрут "пул заказов" для этого примера, правильно?


Есть ли другой вариант?
 

Саймон,

Нет, насколько я знаю, нет. Кажется, есть только два варианта, и этот вариант кажется лучшим для второго тома. Кроме того, он кажется менее сложным, и я ни капли не возражаю против этого. ;)

Итак, вернемся к этой задаче, я понимаю, что вы использовали метод пула ордеров для выделения ордера на паре usdjpy, но какое условие вы использовали для выделения ордера на usdjpy?

Спасибо.

Причина обращения: