Примеры: Управление ордерами – это просто - страница 2

 
komposter писал(а):
Не совсем понимаю, в чем проблема...

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

Если у вас возникают трудности в написании экспертов, обратитесь к опытному программисту.
Мои координаты есть в моем профиле, других разработчиков вы можете найти на многочисленых форумах (в том числе на этом).

Удачи ;)


Cпасбио за ответ.
Именно так и есть, логика советника довольно сложная из двух тактик независимых друг от друга поэтому и обратился к вам за помощью, поскольку я не являюсь профессиональным программистом, то многие коды сложные коды мне достаточно только увидеть на простом примере и в дальнейшем я уже сам потихоньку сделаю.
В своем первом варианте где я вынужден был использовать три функции OneTypeOrdersInit с различными магиками при наличиии семафора у меня получился, но код оказался громоздким.
Поэтому в своем самообучении при написании именно сложных советников у меня есть временные затруднения, которые я непременно со временем разрешу.
Работа с функцией массивов у меня тоже пошла, но не в оригинальном виде, как у вас, а пришлось немного видоизменить. Вот почему я и обратился к вам и попросил пример, которого мне будет достаточно увидеть, чтобы понять где у меня ошибка. Для меня важно один раз увидеть, чем семь раз услышать, сами понимаете без базового образования приходится все постигать методом проб и ошибок.
С уважением, Вячеслав.
 
Vyacheslav:
Именно так и есть, логика советника довольно сложная из двух тактик независимых друг от друга
Если в эксперте 2 независимых стратегии, проще 2 раза использовать функцию OneTypeOrdersInit с разными мейджиками.
Это будет и проще, и компактнее. Единственный недостаток - чуть медленнее.
Потому что, используя массивы, всё равно придется различать ордера одной стратегии от другой, а это - дополнительное усложнение кода.
 
komposter:
Если в эксперте 2 независимых стратегии, проще 2 раза использовать функцию OneTypeOrdersInit с разными мейджиками.
Это будет и проще, и компактнее. Единственный недостаток - чуть медленнее.
Потому что, используя массивы, всё равно придется различать ордера одной стратегии от другой, а это - дополнительное усложнение кода.
Спасибо за разъяснения.
Да, я так именно и делал в тех экспертах где у меня более 2-х независимых тактик и групп ордеров, и все они управляемы семафором.
Но код в данном случае получается грамоздким, каждый магик со своими функциями, а это очень много.
Я понимаю, что трудно давать какие либо советы, не зная конкретного алгоритма советника. Но когда я закончу излагать на одном из форумов тему, где будет расписано все в деталях и выложен код, я вас приглашу заглянуть, если у вас выкроется время, то буду благодарен вашей помощи.
С уважением, Вячеслав.
 
как могу я получить от последних данных по заказа? не от сперва и 2-ое, только всегда получать последнюю информацию.

            case OP_BUY:
             _BuyTicket     = OrderTicket();
             _BuyLots       = NormalizeDouble( OrderLots(), 1 );
             _BuyOpenPrice  = NormalizeDouble( OrderOpenPrice(),
                                               Digits );
             _BuyStopLoss   = NormalizeDouble( OrderStopLoss(), 
                                               Digits );
             _BuyTakeProfit = NormalizeDouble( OrderTakeProfit(),
 

egt520 писал(а):
как могу я получить от последних данных по заказа? не от сперва и 2-ое, только всегда получать последнюю информацию.

Замените эту строку
    for ( int z = _OrdersTotal - 1; z >= 0; z -- )
на эту:
    for ( int z = 0; z < _OrdersTotal; z ++ )
 
Если Вас не затруднит, дайте ответ на такой вопрос, я думаю Вы продумывали эту тему.

Наши ордера появляются/удаляются на торговом сервере в нашем активном (ON_TRADE) пуле ордеров разными путями.
1) Немедленное исполние распоряжения на открытие ордера - в результате в пуле появляется ордер со всеми окончательно заполненными полями, за исключением поля OrderClosePrice. Остальные поля либо фиксированы, либо сопровождаются торговым сервером. Поле OrderOpenTime - отображает реальное время (время торговой платформы) открытия ордера. Здесь маленький вопрос-вероятно, он помещается в хвост пула, т.е. ему присваивается следующий по порядку номер ?
2) Установка отложенного ордера - в результате в пуле появляется ордер со всеми окончательно заполненными полями, за исключением поля OrderCloseTime. Здесь маленький вопрос OrderOpenTime - хранит ,скорее всего, время установки отложенного ордера ? И такой же вопрос как и в 1) - ему присваивается следующий по порядку номер в хвосте ?
3) При закрытие ордера (принудительно или по срабатыванию) происходит его удаление из активного пула и перевод в исторический пул(ON_HISTORY) - тут все ясно. И опять же тот самый вопрос-порядок следования ордеров в активном пуле остается прежним ? т.е., происходит простое поджатие ордеров, иди остается "дырка", а нумерация сохраняется прежней ?
4) При срабатывание отложенного ордера, что реально происходит в активном пуле-просто меняются значения полей в том же самом элементе активного пула ? а порядок и нумерация ордеров сохраняются ?

Короче вопросы такие:
- при добавление ордера в пул, он просто ставится в хвост пула, получая следующий в порядке возрастания номер(самый первый номер это нулевой) ?
- при вычеркивание/изменение(как в случае со срабатыванием отложеннонго ордера) как это отражается на порядке и нумерации ордеров в пуле ?

В Вашей функции AllOrderInit нулевые элементы массивов, представляют последний по номеру ордер в активном пуле. Что это за ордер -самый поздний по времени открытия/установки ?

С уважением - С.Д.
 
Sart:
Если Вас не затруднит, дайте ответ на такой вопрос, я думаю Вы продумывали эту тему.
Вы могли бы сами проследить за появлением и исчезновением ордеров - это не сложно ;)

Sart:
- при добавление ордера в пул, он просто ставится в хвост пула, получая следующий в порядке возрастания номер(самый первый номер это нулевой) ?
Да

Sart:
- при вычеркивание/изменение(как в случае со срабатыванием отложеннонго ордера) как это отражается на порядке и нумерации ордеров в пуле ?
Закрытый/удаленный ордер перемещается в историю ("ON_HISTORY"), а все ордера, находящиеся в списке открытых ордеров "выше" закрытого, перемещаются "вниз".

Sart:
В Вашей функции AllOrderInit нулевые элементы массивов, представляют последний по номеру ордер в активном пуле. Что это за ордер -самый поздний по времени открытия/установки ?
Просто распечатайте время открытия и посмотрите сами ;)
Я, если честно, не проверял.

Кстати, возможно, порядок зависит от сортировки списка ордеров в терминале.
 
спасибо помогло в изучении языка .. просто респект !!!!
 

event handling function not found.

Сможете исправить, или уже код устарел?


 
Arseniy Suharev:

event handling function not found.

Сможете исправить, или уже код устарел?


Устарел.

Но можно заменить

int start()

на

void OnTick()

и должно взлететь.