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



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

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

Помогите, не могу сообразить как создать таймер задержки исполнения сигнала Buy/Sell.
Задача такова. При торгах on-line возникает дребезг сигнала (то появится - то исчезнет). Нужно генерировать ордер на сделку, только если сигнал Buy/Sell устойчив 3-5 сек.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

А если он потом пропадет и больше не появится? Тогда ами не будет знать что открыта поза и не станет ее закрывать...

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



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

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

000 писал(а):
А если он потом пропадет и больше не появится? Тогда ами не будет знать что открыта поза и не станет ее закрывать...


Ами выполняет только аналитику : признак тренда (TrendUPW, TrendDOW, TrendFLET ) и момент BUY/SEL . Все остальные (трейдерские ) функции возложены на Квик...
Посмотреть профиль Отправить личное сообщение
AleksP



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

СообщениеДобавлено: Чт Авг 15, 2019 1:28 pm Ответить с цитатой Вернуться к началу

AleksP писал(а):
000 писал(а):
А если он потом пропадет и больше не появится? Тогда ами не будет знать что открыта поза и не станет ее закрывать...


Ами выполняет только аналитику : признак тренда (TrendUPW, TrendDOW, TrendFLET ) и момент BUY/SEL . Все остальные (трейдерские ) функции возложены на Квик...


На сайте Ами есть пример описание таймера
http://www.amibroker.org/userkb/2007/11/10/high-precision-delay-and-interval-timing/
, но он запускается ручным нажатием кнопки
>> " if( ParamTrigger("1 - Start", "START") ) setDelay( "Timer1", MSecDelay1, 0 );" , а нужен автоматический старт таймера при первом появлении сигнала.
Вопрос : возможна ли эмуляция ParamTrigger на языке AFL ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Авг 15, 2019 2:18 pm Ответить с цитатой Вернуться к началу

Код:

Buy = 1;
RealBuy = 0;
BT = Nz(StaticVarGet( "Time" ));
if(Buy)
{
   if(BT == 0)
      StaticVarSet( "Time", Now( format = 4 ) );
   else
   {
      if(Now( format=4 ) - BT > 15)
      RealBuy = 1;
   }
}
else
   StaticVarSet( "Time", 0 );

Если Buy продержится 15 сек, то переменная RealBuy станет равной 1.

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



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

СообщениеДобавлено: Чт Авг 15, 2019 4:12 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Код:

Buy = 1;
RealBuy = 0;
BT = Nz(StaticVarGet( "Time" ));
if(Buy)
{
   if(BT == 0)
      StaticVarSet( "Time", Now( format = 4 ) );
   else
   {
      if(Now( format=4 ) - BT > 15)
      RealBuy = 1;
   }
}
else
   StaticVarSet( "Time", 0 );

Если Buy продержится 15 сек, то переменная RealBuy станет равной 1.



Спасибо за помощь! По формуле - кажется то что надо, но при исполнении выдает ошибку Error 6.

Order_BUY = StaticVarGet("Order_BUY");
Buy = IIf(Order_BUY > 0, 1, 0);
RealBuy = 0;
BT = Nz(StaticVarGet( "Time" ));
if(Buy) >> Error 6
{ ...
Надо вновь весь полный цикл for( i = 0; i < BarCount; i++ )
{ ..
запускать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Авг 15, 2019 4:31 pm Ответить с цитатой Вернуться к началу

Тот код который я прислал никаких ошибок не выдает.
А если ты его умудрился криво скрестить со своим кодом, то я не виноват.
Ошибка 6 обозначает, что ты в функцию if() пытаешься засунуть массив.

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



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

СообщениеДобавлено: Чт Авг 15, 2019 4:44 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Тот код который я прислал никаких ошибок не выдает.
А если ты его умудрился криво скрестить со своим кодом, то я не виноват.
Ошибка 6 обозначает, что ты в функцию if() пытаешься засунуть массив.


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


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

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

Тебе же надо только последнее значение этого массива (актуальный сигнал)? Ну так уже давно придумали функцию LastValue()

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



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

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

000 писал(а):
Тебе же надо только последнее значение этого массива (актуальный сигнал)? Ну так уже давно придумали функцию LastValue()


Вооот! И троекратное - спасибо!!! А то я затупилБ и споткнулся на очевидном... Теперь все работает.. ))
Посмотреть профиль Отправить личное сообщение
AleksP



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

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

Доброго дня!
В развитие темы таймера - вопрос о паузе (остановке исполнения кода) на заданное время (5-8 сек.).

На QPILE это реализовано так:


FUNC FUN_PAUSE(PAUSE_TIME)
' функция реализации временной паузы

PST = GET_DATETIME()
FIRST_SYS_TIME = 0+GET_VALUE(PST, "HOUR")*3600000 + GET_VALUE(PST, "MIN")*60000 + GET_VALUE(PST, "SEC")*1000 + GET_VALUE(PST, "MILLISEC")

FOR PST_FLAG FROM 0 TO 1
PST = GET_DATETIME()
SECOND_SYS_TIME = 0+GET_VALUE(PST, "HOUR")*3600000 + GET_VALUE(PST, "MIN")*60000 + GET_VALUE(PST, "SEC")*1000 + GET_VALUE(PST, "MILLISEC")
DIFF_TIME=(SECOND_SYS_TIME-FIRST_SYS_TIME)
IF DIFF_TIME<= PAUSE_TIME*1000
PST_FLAG = -1

END IF
END FOR
END FUNC


А вот мой перевод этого кода на AFL:

_FLAG = 0;
PAUSE_TIME = 8;

StaticVarSet( "FIRST_Time", Now( format = 4 ) );

FOR ( i = 0 ; _FLAG < 0; i++ )
{
FIRST_Time = Nz(StaticVarGet( "FIRST_Time" ));
SECOND_TIME = Now(format = 4);

if( SECOND_TIME <= FIRST_Time + PAUSE_TIME ) _FLAG = -1;

printf("_FLAG = "+ NumToStr(_FLAG ,1.0)+"\n") ;

}

Увы , этот вариант не работает ... В чем ошибка?
Посмотреть профиль Отправить личное сообщение
DennyV8



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

СообщениеДобавлено: Сб Фев 19, 2022 1:42 am Ответить с цитатой Вернуться к началу

000 писал(а):
Код:

Buy = 1;
RealBuy = 0;
BT = Nz(StaticVarGet( "Time" ));
if(Buy)
{
   if(BT == 0)
      StaticVarSet( "Time", Now( format = 4 ) );
   else
   {
      if(Now( format=4 ) - BT > 15)
      RealBuy = 1;
   }
}
else
   StaticVarSet( "Time", 0 );

Если Buy продержится 15 сек, то переменная RealBuy станет равной 1.



Добрый день,

нашел на форуме такой код, хотел его применить, но не знаю куда его вписать в Ваш код робота с главной страницы, попробовал пару вариантов, но увы ).

Спасибо.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Фев 27, 2022 9:54 am Ответить с цитатой Вернуться к началу

Привет. А что собственно требуется?

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


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

СообщениеДобавлено: Вс Фев 27, 2022 9:54 am Ответить с цитатой Вернуться к началу

Привет. А что собственно требуется?

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



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

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

000 писал(а):
Привет. А что собственно требуется?

Приветы, да уж передумал так делать ))

Хотел тоже отфильтровать переменный сигнал на текущем баре, но подумал все эти паузы только ухудшат ситуацию ))
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen