MQL4 - automated forex trading   /  

Форум

Нужна пауза после закрытия ордера

К списку тем  | 1 2 Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
243
Gorillych 05.09.2006 20:41 
Здесь есть тема про паузу между открытиями позиций. Но мне нужно организовать паузу после закрытия позиции до открытия новой.
Попытался увидеть OrderCloseTime, но не получается.

int z= HistoryTotal();
if (OrderSelect (z,SELECT_BY_POS,MODE_HISTORY))
{
datetime oct=OrderCloseTime();
Comment ("Order Close Time is ", TimeToStr(oct,TIME_SECONDS));
}
else
Comment ("Ошибка № ", GetLastError());


Какие есть идеи?
Заранее спасибо!


Организуйте багтрекинг и техсаппорт для своей компании

В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем.


avatar
Модератор
33759
Rosh 05.09.2006 20:53 
int z= HistoryTotal();
возвращает общее количество ордеров в Истории (допустим 10). При этом список ордеров начинается с нуля. Дальше сами...

ЗЫ Даже если бы пример был корректным, не факт, что последний закрытый ордер будет находиться на позиции z.

avatar
243
Gorillych 05.09.2006 23:06 
Спасибо. Это я понял ещё из Документации (там тоже в примере 10. А чего десять?) А как мне выйти на номер последнего ордера в истории?
Я пробовал for(z=1,z<=0,z++)..., но результат тот же

avatar
Модератор
33759
Rosh 05.09.2006 23:14 
Почитайте

24. Техника скользящего стопа


avatar
243
Gorillych 05.09.2006 23:33 
Rosh писал (а):
Почитайте

24. Техника скользящего стопа

Спасибо! Прочитал. Написал необходимый минимум

for ( int z=0;z<HystoryTotal();z++)
{
if (OrderSelect (z,SELECT_BY_POS,MODE_HISTORY))
{
datetime oct=OrderCloseTime();
Comment ("Order Close Time is ", TimeToStr(oct, TIME_SECONDS));
}
else
Comment ("Ошибка № ", GetLastError());
}

При компиляции выдает ошибку: 'HystoryTotal' - function is not defined

avatar
Модератор
33759
Rosh 05.09.2006 23:41 
Попробуйте HistoryTotal(), пожалуй мне хватит.

avatar
14054
komposter 05.09.2006 23:44 
HistoryTotal()

avatar
14054
komposter 05.09.2006 23:48 
Rosh писал (а):
Попробуйте HistoryTotal(), пожалуй мне хватит.
=)))


Спасибо! Прочитал. Написал необходимый минимум

Нет, этого недостаточно.
Надо находить последний закрытый ордер, сравнивая все ордера.
Что-то типа этого:
    datetime lastclose = -1;
    int _GetLastError = 0, _OrdersTotal = HistoryTotal();
 
    for ( int z = _OrdersTotal - 1; z >= 0; z -- )
    {
        if ( !OrderSelect( z, SELECT_BY_POS, MODE_HISTORY ) )
        {
            _GetLastError = GetLastError();
            Print( "OrderSelect( ", z, ", SELECT_BY_POS, MODE_HISTORY ) - Error #", _GetLastError );
            continue;
        }
        if ( OrderMagicNumber() != _MagicNumber ) continue;
        if ( OrderSymbol() != _Symbol ) continue;
        if ( OrderCloseTime() <= lastclose ) continue;
        lastclose = OrderCloseTime();
    }




avatar
243
Gorillych 06.09.2006 14:03 
komposter писал (а):
Rosh писал (а):
Попробуйте HistoryTotal(), пожалуй мне хватит.
=)))


Спасибо! Прочитал. Написал необходимый минимум

Нет, этого недостаточно.
Надо находить последний закрытый ордер, сравнивая все ордера.


Спасибо!
Оказалось вполне достаточно исправить ошибку в HistoryTotal().

avatar
243
Gorillych 06.09.2006 14:08 
Итоговый код для паузы в 1 минуту:

for ( int z=0;z<HistoryTotal();z++)
{
if (OrderSelect (z,SELECT_BY_POS, MODE_HISTORY))
datetime oct=OrderCloseTime();
}
if(CurTime()-oct<60) return(0);

avatar
14054
komposter 06.09.2006 14:31 
Gorillych писал (а):

Спасибо!
Оказалось вполне достаточно исправить ошибку в HistoryTotal().
Насколько я помню, если история будет отсортирована не по тикету, ваш код вернёт неправильный клоустайм.
В любом случае, мой надежнее
К списку тем   | 1 2  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий