расчет Мин/Мах цены от цены открытия до наст.момента (по времени, а не по барам)

 

Добрый день! заранее извиняюсь за "глупые" вопросы, но буду благодарен за ответ спецов программистов.

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

1- Возможно ли в МТ4 просчитать максимальную (минимальную) цену с момента открытия ордера (именно по времени) с учетом того, что ордер открылся уже после прохождения барного максиума (миниума)? (получается что то вроде выборки тикового массива, а его в мт4 вроде нет:-( )

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

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

буду рад за любую конкретную помощь............

Всем больших профитов и с наступающим!!! :-)

 

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

 
coaster писал(а) >>

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

я не не просто плохой программист, а скорее очень плохой :-) если можно, то поподробнее.........

Я так понимаю,что это ближе к третьему пункту?

 
tobish_san >>:

я не не просто плохой программист, а скорее очень плохой :-) если можно, то поподробнее.........

Я так понимаю,что это ближе к третьему пункту?


      Думаю, что для контроля нескольких открытых позиций без пары массивов всё же не обойтись. :) В МТ5 такой роскоши уже не будет. Если не "отключусь" - выложу.
 

Основные блоки кода:

(Проверьте, я не проверял, а Вам полезно будет)

//---- объявление массивов
int Max[];
int Min[];

//---- фиксация времени старта
static bool Start=true;
static int StartTime;
if (Start) {StartTime=TimeCurrent(); Start=false;}

//---- контроль ордеров
double oop;
int ticket;
int total=OrdersTotal();
for(int pos=total-1;pos>=0;pos--)
    {
     if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) || OrderType()>1 || OrderOpenTime()<=StartTime) continue;
     ticket=OrderTicket();     
     oop=OrderOpenPrice();
     if ((Bid-oop)/Point>Max[ticket]) Max[ticket]=(Bid-oop)/Point;
     if ((oop-Bid)/Point>Min[ticket]) Min[ticket]=(oop-Bid)/Point;     
    }

Здесь массив Max[] возвращает по тикету ордера максимальное отклонение цены в пунктах до High от уровня открытия.

Соответственно Min[] возвращает модуль максимального отклонения цены в пунктах до Low от уровня открытия.

Если чего-то не пойдёт или будут вопросы - "звоните" - вместе откорректируем. )))

 
coaster писал(а) >>

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

И как потом с этим жить?

 
tobish_san писал(а) >>

1- Возможно ли в МТ4 просчитать максимальную (минимальную) цену с момента открытия ордера (именно по времени) с учетом того, что ордер открылся уже после прохождения барного максиума (миниума)? (получается что то вроде выборки тикового массива, а его в мт4 вроде нет:-( )

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

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

буду рад за любую конкретную помощь............

Всем больших профитов и с наступающим!!! :-)

2 - Да. Можно пропустить бар открытия - будет другая погрешность.

3 - Не стоит заморачиваться.

Можно ипользовать глобальные переменные. Сразу после открытия ордера создать глобальную переменную в имени кторой есть тикет, затем на каждом тике фиксировать максимум минимум цены. Еще, хорошо бы фиксировать время последнего проверенного тика, чтобы в случае перезагрузки по минутным барам пройтись от этого времени. Но не получится таким трейлинго подцепить любой ордер, например открытый вручную. Лучше всего по минуткам пройтись пропустив бар открытия.

 
Integer >>:

2 - Да. Можно пропустить бар открытия - будет другая погрешность.

3 - Не стоит заморачиваться.

Можно ипользовать глобальные переменные. Сразу после открытия ордера создать глобальную переменную в имени кторой есть тикет, затем на каждом тике фиксировать максимум минимум цены. Еще, хорошо бы фиксировать время последнего проверенного тика, чтобы в случае перезагрузки по минутным барам пройтись от этого времени. Но не получится таким трейлинго подцепить любой ордер, например открытый вручную. Лучше всего по минуткам пройтись пропустив бар открытия.

Человеку код нужен. См.п.3

Плюс, натаскаться по MQL, не помешало бы.

Integer >>:

И как потом с этим жить?

Успел привыкнуть (МТ5) к наличию только одного открытого ордера. В этом случае без массивов можно обойтись.

 
coaster писал(а) >>

1. Человеку код нужен. См.п.3

2. Успел привыкнуть (МТ5) к наличию только одного открытого ордера. В этом случае без массивов можно обойтись.

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

2. Это не делает такой подход жизнеспособным.

 
Integer >>:

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

2. Это не делает такой подход жизнеспособным.

Пошел реальный флуд.

 
coaster писал(а) >>

Пошел реальный флуд.

Да что ты говоришь!

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