Автор |
Сообщение |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
Помогите, не могу сообразить как создать таймер задержки исполнения сигнала Buy/Sell.
Задача такова. При торгах on-line возникает дребезг сигнала (то появится - то исчезнет). Нужно генерировать ордер на сделку, только если сигнал Buy/Sell устойчив 3-5 сек. |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А если он потом пропадет и больше не появится? Тогда ами не будет знать что открыта поза и не станет ее закрывать... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
А если он потом пропадет и больше не появится? Тогда ами не будет знать что открыта поза и не станет ее закрывать... |
Ами выполняет только аналитику : признак тренда (TrendUPW, TrendDOW, TrendFLET ) и момент BUY/SEL . Все остальные (трейдерские ) функции возложены на Квик... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
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 ? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
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
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
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++ )
{ .. запускать? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тот код который я прислал никаких ошибок не выдает.
А если ты его умудрился криво скрестить со своим кодом, то я не виноват.
Ошибка 6 обозначает, что ты в функцию if() пытаешься засунуть массив. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
Тот код который я прислал никаких ошибок не выдает.
А если ты его умудрился криво скрестить со своим кодом, то я не виноват.
Ошибка 6 обозначает, что ты в функцию if() пытаешься засунуть массив. |
Да, безусловно, твой код верен, но но у меня сигналы - производные массива, и получаются массивом... И воткнуть их в твой код не получается ... Или я что то не понимаю... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тебе же надо только последнее значение этого массива (актуальный сигнал)? Ну так уже давно придумали функцию LastValue() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
Тебе же надо только последнее значение этого массива (актуальный сигнал)? Ну так уже давно придумали функцию LastValue() |
Вооот! И троекратное - спасибо!!! А то я затупилБ и споткнулся на очевидном... Теперь все работает.. )) |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
Доброго дня!
В развитие темы таймера - вопрос о паузе (остановке исполнения кода) на заданное время (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") ;
}
Увы , этот вариант не работает ... В чем ошибка? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
DennyV8
Зарегистрирован: 11.01.2022
Сообщения: 100
|
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. |
Добрый день,
нашел на форуме такой код, хотел его применить, но не знаю куда его вписать в Ваш код робота с главной страницы, попробовал пару вариантов, но увы ).
Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Привет. А что собственно требуется? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Привет. А что собственно требуется? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
DennyV8
Зарегистрирован: 11.01.2022
Сообщения: 100
|
000 писал(а): |
Привет. А что собственно требуется? |
Приветы, да уж передумал так делать ))
Хотел тоже отфильтровать переменный сигнал на текущем баре, но подумал все эти паузы только ухудшат ситуацию )) |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
|