[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 5

 
Roman.:

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

Я прогоняю визуализацию. На момент когда должен ордер удаляться он остаётся отложенным. Как установить магик номер я знаю - а вот удалить первый из двух отложенных ордеров не получается.
 
Roman.:

Видимо для этого - несколькими постами выше :-))) - "Самый простой способ определить, какой ордер из двух нужно закрыть, это по мэджик-номеру. Назначайте им разные номера при установке. В примере, который Вы выше показали не хватает этой проверки. И ещё вместо ticket напишите OrderTicket()."

OrderTicket() наверняка достанет тикет последнего отложенного ордера, а мне нужен предпоследний.
 
Andreev:

OrderTicket() наверняка достанет тикет последнего отложенного ордера, а мне нужен предпоследний.

Если Вы ставите два отложенных ордера, то проще, наверное, первому присвоить 1, а второму - 2. ))

Тогда и Вы, и Советник не будете путаться в номерах.

 

alex12, уже неплохо, что что-то писать начали. Много ошибок, но все равно неплохо.

1. Обе ошибки компиляции - потому, что в одной и той же start() Вы дважды определяете локальные переменные SL и TP. Внутри функции нужно определять их однажды, иначе ругаться будет.

Уберите тип double при втором вычислении обеих переменных - и ошибка исчезнет. Но это не всё.

2. Вы уверены, что глобальные внешние переменные с теми же именами Вам нужны? Проблема в том, что переменная SL, определенная внутри функции, является другой, чем глобальная переменная с тем же именем. Если Вы хотите, чтобы это была именно та же переменная, что и внешняя (extern), уберите double при ней везде.

3. Условием if() обычно делают именно логическое условие, хотя простые вычисления не запрещены синтаксисом. А логического условия у Вас просто нет.

Потренируйтесь сначала на простых программах, типа вычислений с выводом результатов. Тогда поймете синтаксис.

 
Andreev:

OrderTicket() наверняка достанет тикет последнего отложенного ордера, а мне нужен предпоследний.

Запоминаете время установки ордеров, далее также в цикле сравниваете время - удаляете наиболее старший, как - то так - здесь посмотрите и подключите к себе в советник.
 
Mathemat:

alex12, уже неплохо, что что-то писать начали. Много ошибок, но все равно неплохо.

1. Обе ошибки компиляции - потому, что в одной и той же start() Вы дважды определяете локальные переменные SL и TP. Внутри функции нужно определять их однажды, иначе ругаться будет.

Уберите тип double при втором вычислении обеих переменных - и ошибка исчезнет. Но это не всё.

2. Вы уверены, что глобальные внешние переменные с теми же именами Вам нужны? Проблема в том, что переменная SL, определенная внутри функции, является другой, чем глобальная переменная с тем же именем. Если Вы хотите, чтобы это была именно та же переменная, что и внешняя (extern), уберите double при ней везде.

3. Условием if() обычно делают именно логическое условие, хотя простые вычисления не запрещены синтаксисом. А логического условия у Вас просто нет.

Потренируйтесь сначала на простых программах, типа вычислений с выводом результатов. Тогда поймете синтаксис.

Большое Спасибо Вам.
 
Roman.:

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

Спасибо за сылку!!! Буду изучать :) С временем, также как и магик номером и по типу ордера (байлимит или селлимит) - хорошая идея. Но Вы, наверное, меня не совсем поняли. У меня проблема не обозначить ордер, а КАК ЕГО УДАЛИТЬ. У меня получается удалить только последний отложенный ордер вне зависимости от того, как я определяю предпоследний.
 

Andreev:

Спасибо за сылку!!! Буду изучать :) С временем, также как и магик номером и по типу ордера (байлимит или селлимит) - хорошая идея. Но Вы, наверное, меня не совсем поняли. У меня проблема не обозначить ордер, а КАК ЕГО УДАЛИТЬ. У меня получается удалить только последний отложенный ордер вне зависимости от того, как я определяю предпоследний.


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

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

 
Andreev:

Спасибо за сылку!!! Буду изучать :) С временем, также как и магик номером и по типу ордера (байлимит или селлимит) - хорошая идея. Но Вы, наверное, меня не совсем поняли. У меня проблема не обозначить ордер, а КАК ЕГО УДАЛИТЬ. У меня получается удалить только последний отложенный ордер вне зависимости от того, как я определяю предпоследний.

Правлю свой код под Ваши условия - сейчас сюда выложу.
 
Andreev:

OrderTicket() наверняка достанет тикет последнего отложенного ордера, а мне нужен предпоследний.


Пересчитывайте с каждым тиком количество отложенных ордеров.

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

Все оставшиеся (ставшие ненужными) можно удалить.

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