Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Не знаю как сделать закртытие на следующий день??? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Ср Авг 04, 2010 5:54 pm Ответить с цитатой Вернуться к началу

Привет. Подскажите как сделать чтобы закрытие происходило на следующий день если не сработали стопы раньше??

код взят из этого сайта. спасибо автору.
но вот как подстроить под мою задачу не знаю((((.

EndDay = Day() != Ref(Day(),1);
Cur_ED = IIf(EndDay == 1, Close, 0);
Sell = EndDay;
One = False;
PredD = 0;
IfPredD = False;
for( i = 0; i < BarCount-1; i++ )
{
if(Cur_ED[i] != 0)//в конце дня
{
if (NOT IfPredD) IfPredD = True;
PredD = Cur_ED[i]; //присваиваем закрытие курса в конце дня
One = False;
}
else
{
if ((Close[i] <= PredD - x)AND
(IfPredD)) //если уже был предыдущий день
{
if (NOT One)
{
//открываем позицию максимум один раз за текущий день
One = True;
Buy[i] = 1; //открываем позицию
}
}
}
}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Авг 04, 2010 6:43 pm Ответить с цитатой Вернуться к началу

Код все таки лучше вставлять вот так
Код:

EndDay = Day() != Ref(Day(),1);
Cur_ED = IIf(EndDay == 1, Close, 0);
Sell = EndDay;
One = False;
PredD = 0;
IfPredD = False;
for( i = 0; i < BarCount-1; i++ )
{
  if(Cur_ED[i] != 0)//в конце дня
  {
    if (NOT IfPredD)
      IfPredD = True;
    PredD = Cur_ED[i]; //присваиваем закрытие курса в конце дня
    One = False;
  }
  else
  {
    if ((Close[i] <= PredD - x) AND (IfPredD)) //если уже был предыдущий день
    {
      if (NOT One)
      {
        //открываем позицию максимум один раз за текущий день
        One = True;
        Buy[i] = 1; //открываем позицию
      }
    }
  }
}

В таком виде он вообще не работает. Sad
Ты бы точно объяснил что надо...
Потому, что я не понял.
Если надо чтобы сделка закрывалась на следующий день после открытия в конце дня, то так
Код:

EndDay = Day() != Ref(Day(),1);

Buy = DayOfWeek() == 2;
pos = Ref(Flip(Buy, EndDay), -1);
Sell = pos == 0 AND EndDay;

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Ср Авг 04, 2010 6:53 pm Ответить с цитатой Вернуться к началу

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

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

Код:

EndDay  =  Day() != Ref(Day(),1); //заполняем массив единицами в местах, где даты меняются
Cur_ED = IIf(EndDay == 1, Close, 0); //заполняем массив курсами в местах, где элементы массива ar_EndDay == 1
 
Sell = endday; //в конце дня всегда закрываем позицию, если даже и не было до этого открытой позиции, в этом случае Equity(1) удалит лишние все лишние закрытия
One = False; //- если эту переменную используем, то у нас максимум - одна сделка в день, иначе - любое количество сделок в день
PredD = 0;
IfPredD = False;
for( i = 0; i < BarCount-1; i++ )
{
  if(Cur_ED[i] != 0)//в конце дня
  {
    if (NOT IfPredD) IfPredD = True;
    PredD = Cur_ED[i]; //присваиваем закрытие курса в конце дня
    One = False;
  }
  else
  {
    if ((Close[i] <= PredD - x)AND
        (IfPredD)) //если уже был предыдущий день
    {
       if (NOT One)
       {
         //открываем позицию максимум один раз за текущий день
         One = True;
         Buy[i] = 1; //открываем позицию
       } 
    }
  }
}
 



//устанавливаем стоп при достижении потери z
ApplyStop(stopTypeLoss, stopModePoint, z, 1, False, 1);
//устанавливаем стоп при достижении прибыли y
ApplyStop(stopTypeProfit, stopModePoint, y, 0, False, 1);
 
//активируем стопы (вычисляем остановки) и удаляем лишние сигналы
Equity(1);




PlotShapes(IIf(Buy==1, shapeUpArrow, shapeNone), colorGreen);
 
//показываем закрытые позиции на графике в виде стрелок
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), colorRed);
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Авг 04, 2010 7:00 pm Ответить с цитатой Вернуться к началу

Ну я же в предыдущем сообщении дал код который закрывает на следующий день.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Ср Авг 04, 2010 7:04 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ну я же в предыдущем сообщении дал код который закрывает на следующий день.


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

20.07.2010 поз открылась, по идеи должна была 21 закрыться, но закрытие произлошло 22.
перед стопами вставил такой код
Код:

pos = Ref(Flip(Buy, EndDay), -1);
Sell = pos == 0 AND EndDay;
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Авг 04, 2010 7:16 pm Ответить с цитатой Вернуться к началу

Проверил на газпроме.
Открыл позу в 12 часов 20/07/10 Закрылась в конце дня 21го
Код:

EndDay = Day() != Ref(Day(),1);

Buy = DateNum() == 1100720 AND TimeNum() == 120000;
pos = Ref(Flip(Buy, EndDay), -1);
Sell = pos == 0 AND EndDay;
Equity(1);
Plot(Sell, "", colorRed);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Чт Авг 05, 2010 10:35 am Ответить с цитатой Вернуться к началу

Спасибо, вам Олег. вроде как работает, а той проскок был глюк.

А можно вот глядя на первый код, сделать тоже самое только без цыклов. Этот код не мой, хотелось бы как то попроще сделать.

Суть его в том, что от закрытия предыдущего дня производиться покупка если курс упал на Х пунктов и закрывается по стопам или в конце второго дня. И на оборот если поднялся то продаем. Одна сделка в день только.

Или без цыклов ни как?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Авг 05, 2010 11:55 am Ответить с цитатой Вернуться к началу

Типа так. Не проверял, но по идее такой код должен блокировать больше одной покупки в день.
Код:

EndDay = Day() != Ref(Day(),1);

Buy1 = ...; // правила покупки
pos = Flip(Buy1, EndDay);
Buy =  Buy1 AND pos == 0;
...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Чт Авг 05, 2010 3:04 pm Ответить с цитатой Вернуться к началу

все таки происходит перескок, тоесть открылась сделка 12.07.2010 а закрылась 14.07 по профиту, хотя должна была закрыться 13.07 в конце дня.

Там вроде должен был прикрепиться файл по тем данным где я проводил тестирование. Тест проводился по коду размещенному выше в даной теме.


Можете сказать где глюк?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Авг 05, 2010 11:25 pm Ответить с цитатой Вернуться к началу

Проверил на этих данных.
Вот этот код
Код:

EndDay = Day() != Ref(Day(),1);

Buy = DateNum() == 1100712;
pos = Ref(Flip(Buy, EndDay), -1);
Sell = pos == 0 AND EndDay;
Equity(1);
Plot(Sell, "", colorRed);

Закрылась 13го....
А у тебя 14го во сколько закрылась?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Пт Авг 06, 2010 8:17 am Ответить с цитатой Вернуться к началу

закрытие 14.07 в 15:13, сработал профит, но должно закрыться 13 в конце дня.

Может в коде самой системы какой то глюк? уже не знаю, что и думать...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Авг 06, 2010 8:26 am Ответить с цитатой Вернуться к началу

Могу предположить вот что.
13-го на последнем баре дня тоже был сигнал на покупку, он собственно и заблокировал выход 13-го...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Пт Авг 06, 2010 8:44 am Ответить с цитатой Вернуться к началу

000 писал(а):
Могу предположить вот что.
13-го на последнем баре дня тоже был сигнал на покупку, он собственно и заблокировал выход 13-го...



Спасибо. поработаю над этой версией.
Посмотреть профиль Отправить личное сообщение
Serg



Зарегистрирован: 04.08.2010
Сообщения: 14

СообщениеДобавлено: Сб Авг 07, 2010 7:52 am Ответить с цитатой Вернуться к началу

000 писал(а):
Могу предположить вот что.
13-го на последнем баре дня тоже был сигнал на покупку, он собственно и заблокировал выход 13-го...



Да, Олег вы правы...действительно есть сигнал на покупку 13, и поэтому оно считает от этой даты.

Подскажите как разрешить этот вопрос?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Авг 08, 2010 12:18 am Ответить с цитатой Вернуться к началу

Код:

Buy = DateNum() == 1100720 AND TimeNum() == 120000;
Sell = 0;
EndDay = Day() != Ref(Day(),1);
pos = 0;
NumED = 0;
 
for( i = 0; i < BarCount-1; i++ )
{
  if(Buy[i] AND pos == 0)
  {
    pos = 1;
  }
  else if(pos == 1)
  {
    Buy[i] = 0;
    if(EndDay[i])
    {
      NumED ++;
      if(NumED == 2)
      {
        Sell[i] = 1;
        pos = 0;
        NumED = 0;
      }
    }
  }
}


_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen