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



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

СообщениеДобавлено: Чт Май 21, 2015 4:28 pm Ответить с цитатой Вернуться к началу

Добрый день, подскажите, если не сложно!
Написал некую системку и хочу её торговать с 12.00 до 15.00. Код такой:

Цитата:
...
TradeTime = TimeNum() >= 120000 AND TimeNum() <= 150000;
...
Buy = Cond1 and TradeTime;
...
Sell = 0 and TradeTime;
...
ApplyStop( stopTypeProfit , stopModePercent, 1, exitatstop = 1 , volatile = False, ReEntryDelay = 0 );
ApplyStop( stopTypeLoss, stopModePoint, s, ExitAtStop = 1, volatile = False, ReEntryDelay = 0);
...

Закрытие происходит или по стопу или по тейк профиту. Стоп рассчитываю в пунктах, а тейк просто =1%.

Мне нужно, чтобы даже если стоп или тейк профит наступает раньше 12.00 или позже 15.00, то чтобы сделка не совершалась, и система ждала до тех пор пока не настанет 12.00. Если после 12.00 цена будет ниже стопа, то закрытие происходит по рынку. Насколько я понимаю логику, то в Applystop не учитывается TradeTime, поэтому у меня стопы срабатывают до 12.00. А я этого не хочу.
Подскажите плз, что надо добавить в коде, чтобы получить то, что я описал выше..
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 21, 2015 11:01 pm Ответить с цитатой Вернуться к началу

Уффф. В общем так.
При помощи ApplyStop() такую задачу не решить.
Ту надо при покупке сразу "запоминать" уровни тейка и стопа и далее по этим уровням генерить Sell.
В общем мне кажется, что без написания цикла не обойтись.

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


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

СообщениеДобавлено: Чт Май 21, 2015 11:21 pm Ответить с цитатой Вернуться к началу

Типа как то так
Код:

TradeTime = TimeNum() >= 120000 AND TimeNum() <= 150000;
s = 1; // размер стопа
p = 1; // размер профита в %
Cond1 = 1; // условия покупки



Buy = Sell = 0;
pos = 0; // текущая позиция
stopLev = profitLev = 0; // уровни стопа и профита

for( i = 1; i < BarCount; i++ )
{
   if(TradeTime[i] == 1)
   {
      if(pos == 1)
      {
         if(L[i] < stopLev OR H[i] > profitLev)
         {
            Sell[i] = 1;
            pos = 0;
            if(L[i] < stopLev AND O[i] > stopLev)
               SellPrice[i] = stopLev;
            else if(H[i] > profitLev AND O[i] < profitLev)
               SellPrice[i] = profitLev;
            else
               SellPrice[i] = C[i];
         }
      }
      else
      {
         if(Cond1[i] == 1)
         {
            Buy[i] = 1;
            pos = 1;
            stopLev = C[i] + s;
            profitLev = C[i]*(100+p);
         }
      }
   }
}

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



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

СообщениеДобавлено: Вс Май 24, 2015 2:12 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Уффф. В общем так.
При помощи ApplyStop() такую задачу не решить.
Ту надо при покупке сразу "запоминать" уровни тейка и стопа и далее по этим уровням генерить Sell.
В общем мне кажется, что без написания цикла не обойтись.


???

Код:
TP = 0.2; // % take profit
SL = 20 * ticksize; // point stop

starttime = 120000;
endtime = 150000;

tn = TimeNum();
TradeTime = tn >= starttime AND tn <= endtime;

Cond1 = Cross( MACD(), Signal() );

Buy = Cond1 and TradeTime;
Sell = Cross( tn, endTime );

Short = Cover = 0;

ApplyStop (stopTypeProfit, stopModePercent, TP, exitatstop = 1, volatile = False, ReEntryDelay = 0);
ApplyStop (stopTypeLoss, stopModePoint, SL, ExitAtStop = 1, volatile = False, ReEntryDelay = 0);
Посмотреть профиль Отправить личное сообщение
fujis84



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

СообщениеДобавлено: Вс Май 24, 2015 2:21 pm Ответить с цитатой Вернуться к началу

SPR писал(а):
Добрый день, подскажите, если не сложно!
Написал некую системку и хочу её торговать с 12.00 до 15.00. Код такой:

Код:
...
TradeTime = TimeNum() >= 120000 AND TimeNum() <= 150000;
...
Buy = Cond1 and TradeTime;
...
Sell = 0 and TradeTime;
...
ApplyStop( stopTypeProfit , stopModePercent, 1, exitatstop = 1 , volatile = False, ReEntryDelay = 0 );   
ApplyStop( stopTypeLoss, stopModePoint, s, ExitAtStop = 1, volatile = False, ReEntryDelay = 0);   
...



Код:
Sell = 0 and TradeTime;


нулю и Tradetime оба вместе -> это нонсенс
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Май 24, 2015 6:37 pm Ответить с цитатой Вернуться к началу

fujis84 писал(а):


???

Код:
TP = 0.2; // % take profit
SL = 20 * ticksize; // point stop

starttime = 120000;
endtime = 150000;

tn = TimeNum();
TradeTime = tn >= starttime AND tn <= endtime;

Cond1 = Cross( MACD(), Signal() );

Buy = Cond1 and TradeTime;
Sell = Cross( tn, endTime );

Short = Cover = 0;

ApplyStop (stopTypeProfit, stopModePercent, TP, exitatstop = 1, volatile = False, ReEntryDelay = 0);
ApplyStop (stopTypeLoss, stopModePoint, SL, ExitAtStop = 1, volatile = False, ReEntryDelay = 0);

Ну. Стоп сработает в любое время. Не обязательно с 12 до 3

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



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

СообщениеДобавлено: Вс Май 24, 2015 10:29 pm Ответить с цитатой Вернуться к началу

000 писал(а):
fujis84 писал(а):


???

Код:
TP = 0.2; // % take profit
SL = 20 * ticksize; // point stop

starttime = 120000;
endtime = 150000;

tn = TimeNum();
TradeTime = tn >= starttime AND tn <= endtime;

Cond1 = Cross( MACD(), Signal() );

Buy = Cond1 and TradeTime;
Sell = Cross( tn, endTime );

Short = Cover = 0;

ApplyStop (stopTypeProfit, stopModePercent, TP, exitatstop = 1, volatile = False, ReEntryDelay = 0);
ApplyStop (stopTypeLoss, stopModePoint, SL, ExitAtStop = 1, volatile = False, ReEntryDelay = 0);

Ну. Стоп сработает в любое время. Не обязательно с 12 до 3


у вас на самом деле пытались код? Очевидно, вы еще не пробовали
Sell правило имеет приоритет. если нет SL или TP до 15:00 затем выход на endtime.
New day, new try.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Май 24, 2015 10:44 pm Ответить с цитатой Вернуться к началу

fujis84 писал(а):

у вас на самом деле пытались код? Очевидно, вы еще не пробовали
Sell правило имеет приоритет. если нет SL или TP до 15:00 затем выход на endtime.
New day, new try.

Да. Правильно. Но по вопросу было понятно, что выход ТОЛЬКО по SL или TP и ТОЛЬКО с 12 до 3. Если не было SL или TP, то в 3 часа выходить не надо.

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



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

СообщениеДобавлено: Вт Май 26, 2015 4:23 pm Ответить с цитатой Вернуться к началу

000 писал(а):
fujis84 писал(а):

у вас на самом деле пытались код? Очевидно, вы еще не пробовали
Sell правило имеет приоритет. если нет SL или TP до 15:00 затем выход на endtime.
New day, new try.

Да. Правильно. Но по вопросу было понятно, что выход ТОЛЬКО по SL или TP и ТОЛЬКО с 12 до 3. Если не было SL или TP, то в 3 часа выходить не надо.


Олег, спасибо большое! Вы правильно поняли мой вопрос. Я хоть пока и не силен в программировании, но покопавшись в описании C++, понял логику написания.

Хотел бы еще уточнить следующий момент. В этом коде проверка на временной диапазон осуществляется только для открытия/закрытия позиции. А можно ли как-нибудь изменить код, чтобы данные, которые не попадают в данный временной диапазон ( в моем примере с 12 до 15) вообще не участвовали в расчете условий для входа в позицию. То есть как будто их вообще нет. Насколько я понимаю, надо как-то аккуратно добавить условия внутрь цикла...?
Я понимаю, что я могу изначально загрузить в Ами данные только с 12 до 15 и применить код для этого тикера. Но в этом случае мне придется для каждой бумаги проделывать такую процедуру с данными. А хотелось бы "универсальный" шаблон что ли...
Премного благодарен!
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Май 26, 2015 6:10 pm Ответить с цитатой Вернуться к началу

Можно конечно написать подобный код, но это довольно геморойно и, к несчастью, сильно зависит от как именно расчитываются сигналы.
Но, есть простой способ.
Идешь в настройки базы данных, там «Intraday settings» и блок Блок «Trading hours (local time)»
http://www.amisite.ru/begin/creat_bd.php
В общем поставишь время торгов с 12 до 15 и ами остальные данные видеть не будет и учитывать не будет. И не надо ничего специального загружать.

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



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

СообщениеДобавлено: Ср Май 27, 2015 12:00 am Ответить с цитатой Вернуться к началу

000 писал(а):
Можно конечно написать подобный код, но это довольно геморойно и, к несчастью, сильно зависит от как именно расчитываются сигналы.
Но, есть простой способ.
Идешь в настройки базы данных, там «Intraday settings» и блок Блок «Trading hours (local time)»
http://www.amisite.ru/begin/creat_bd.php
В общем поставишь время торгов с 12 до 15 и ами остальные данные видеть не будет и учитывать не будет. И не надо ничего специального загружать.


Работает! Ещё раз спасибо!
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen