Автор |
Сообщение |
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Как это не работает? У тебя косяк в другом месте.
Берем вот такой код.
Код: |
Filter = 1;
stat = Nz(StaticVarGet( "trigger" ));
if(stat == 1)
{
Short = 1;
Cover = 0;
}
else
{
Short = 0;
Cover = 1;
}
Sell = Buy = 0;
if( stat )
StaticVarSet( "trigger", 0 );
else
StaticVarSet( "trigger", 1 );
AddColumn(Short, "Short");
AddColumn(Cover, "Cover");
|
Пихаем в АА. Ставим последний бар и Explore. Каждый следующий прогон сигналы меняются местами. |
а что делает Filter = 1; ?
у меня только с ним AddColumn срабатывают.
ещё проверка исполнения ордера идёт через while-цикл и если цикл пуст через 40 сек вылетает сообщение (ниже).
10-ти миллисекундная задержка типа
Код: |
for (dummy=0; dummy<1; dummy++) ibc.Sleep(10); |
решит эту проблему или ами будет всеравно ругаться через н-кругов цикла? подозреваю, что ругаться будет. сколько повторов делает ами? или как тогда решить этот неприятный момент? как ни как надо, чтооб все выходные если что крутился.
eidt: сейчас пытался через if for в while-цикле сделать бесконечный цикл. не получилось. ами ругается. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
|
Посмотреть профиль Отправить личное сообщение |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
что-то у меня Equity(1) не хочет работать
в этом виде:
Код: |
SetOption( "ActivateStopsImmediately", True ); //stop at the openbar
ApplyStop( stopTypeLoss, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );
ApplyStop( stopTypeProfit, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );
Equity( 1 );
|
|
Последний раз редактировалось: MrDrJOKER (Пт Ноя 08, 2013 1:47 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Лучше без Equity(). Не надежная функция. Придумай по другому. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Лучше без Equity(). Не надежная функция. Придумай по другому. |
но в принципе Equity( 1 ); должна располагаться в коде ниже ф-ций ApplyStop, как я понимаю. правильно? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Чтбы активировать ApplyStop() (т.е. чтобы функция ApplyStop выдала Sell или Cover) необходимо использовать Equity().
Да, ее надо располагать ниже ApplyStop. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
хорошо ... вообще ж стопы через ApplyStop круглосуточно работают, независимо от временных ограничений прописаных тобой в условиях продажи и покупки?
т.е. если сработает вне торговых часов, то нужно лимитники кидать в рынок, т.к. маркет ордера платформа не пропустит. следовательно стопы надо отличать от обычны сигналов. как-то так:
Код: |
StopCondition = Iif( Sell_Price + 1.00 < LastValue ( C ) , 4 , 0 ) ;
|
следовательно, чему будет равен сигнал на выходе этой формулы при срабатывании StopCondition?
Код: |
Cover = ( Ref ( O , -1 ) < Ref ( C , -1 ) OR StopCondition ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ;
|
4 или 1? могу я так сделать различие стопов и обычных сигналов? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
MrDrJOKER писал(а): |
что-то у меня Equity(1) не хочет работать
в этом виде:
Код: |
SetOption( "ActivateStopsImmediately", True ); //stop at the openbar
ApplyStop( stopTypeLoss, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );
ApplyStop( stopTypeProfit, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );
Equity( 1 );
|
|
при такой конструкции, где должны быть условия входа/выхода в коде? выше этих ф-ций стопов или ниже? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
MrDrJOKER писал(а): |
хорошо ... вообще ж стопы через ApplyStop круглосуточно работают, независимо от временных ограничений прописаных тобой в условиях продажи и покупки?
т.е. если сработает вне торговых часов, то нужно лимитники кидать в рынок, т.к. маркет ордера платформа не пропустит. следовательно стопы надо отличать от обычны сигналов. как-то так:
Код: |
StopCondition = Iif( Sell_Price + 1.00 < LastValue ( C ) , 4 , 0 ) ;
|
следовательно, чему будет равен сигнал на выходе этой формулы при срабатывании StopCondition? |
Как это стоп сработает вне торговых часов? Это может быть только если стоп по закрытию и срабатывает на следующем баре.
StopCondition будет равен 4 а вот чему будет равен Sell после функции Equity() я не уверен. Возможно 1. Это надо проверять.
Код: |
Cover = ( Ref ( O , -1 ) < Ref ( C , -1 ) OR StopCondition ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ;
|
4 или 1? могу я так сделать различие стопов и обычных сигналов?[/quote]
До equity() можешь. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
MrDrJOKER писал(а): |
MrDrJOKER писал(а): |
что-то у меня Equity(1) не хочет работать
в этом виде:
Код: |
SetOption( "ActivateStopsImmediately", True ); //stop at the openbar
ApplyStop( stopTypeLoss, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );
ApplyStop( stopTypeProfit, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );
Equity( 1 );
|
|
при такой конструкции, где должны быть условия входа/выхода в коде? выше этих ф-ций стопов или ниже? |
Вроде это не важно. Главное чтобы до ф-ции Equity(), но я предпочитаю писать стопы после сигналов. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
такая штука
Код: |
ibc = GetTradingInterface( "IB" );
StopCondition = IIf( ibc.GetPositionSize( Ticker ) != 0 AND LastValue ( C ) >= ( Nz( ibc.GetPositionInfo( Ticker, "Avg. Cost" ) ) + 0.02 ) , 1 , 0 ) ;
Short = Ref ( O , -1 ) >= Ref ( C , -1 ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ;
Cover = StopCondition OR ( Ref ( O , -1 ) < Ref ( C , -1 ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ) ;
|
когда тестю этот вариант стопа, то так работает, а если делаю такое усовие выхода, то даже в шорт не становится:
Код: |
Cover = StopCondition ;
|
ну как так?
и главный косяк, который я заметил в таком решении, стоп начинает срабатывать только на следующем баре! может есть у кого объяснение почему? или как заставить на этом баре работтать? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А тыт там потом сигналы Sell и Cover не сдвигал случайно?
Типа
Sell = Ref(Sell, -1)
Или
Sell = Sell[BarCount -2]; |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
А тыт там потом сигналы Sell и Cover не сдвигал случайно?
Типа
Sell = Ref(Sell, -1)
Или
Sell = Sell[BarCount -2]; |
есть
Код: |
Short = ExRem( Short, Cover );
Cover = ExRem( Cover, Short );
|
да, в ExRem дело было.
но так дело не пойдёт. как мне теперь выход на баре входа сделать?
ами теперь на одном баре после срабатывания стопа соответственно сразу снова в позицию входит, если ExRem убрать. |
Последний раз редактировалось: MrDrJOKER (Пн Ноя 11, 2013 11:29 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
а попонятней решения нет?))
глядел его, что-то мне там вот с этими сдвигами сигналов не всё понятно.
Код: |
//////////////Система///////////////
Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));
|
ок, сигналы мы создали.
Код: |
///////////Конец Системы////////////
Buy1 = Buy1[BarCount - 2] AND L[BarCount - 1] > C[BarCount - 2]*(1 - Stop/100);
Sell1 = Sell1[BarCount - 2];
Short1 = Short1[BarCount - 2] AND H[BarCount - 1] < C[BarCount - 2]*(1 + Stop/100);
Cover1 = Cover1[BarCount - 2];
|
а дальше мы сместили сигналы с позапрошлого бара на нынешний и вставили проверку , не ниже ли лоу прошлого бара чем стоп на окончании позапрошлого. мы же тем самым переписали нынешние сигналы?!
Код: |
/// стопы ///
if(pos > 0 AND L[BarCount-1] < AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 - Stop/100))
{
Sell1 = 1;
str = str + " сработал стоп при лонге";
}
else if(pos < 0 AND H[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + Stop/100))
{
Cover1 = 1;
str = str + " сработал стоп при шорте";
}
|
прорверяем наличие открытой позиции, а далее лоу предыдущего бара сравниваем с уровнем стопа от нынешней цены.
Код: |
if(Buy1[BarCount-1] AND pos == 0) {
str = str + " Buy";
sd = "Buy";
orders("B", round(C[BarCount-1]) + Otstup, Lots);
AS_WRITE_FILE("log.quik", str);
}
|
а далее идёт исполнение сигналов взятых с прошлого бара.
почему с прошлого, если мы в самом начале сигналы на 2 бара вперёд сдвинули? на прошлом баре ничего не появилось ...
и это всё работает?
устал я, не врубаюсь в систему эту сейчас ... но зато придумал проверку для своей системы, которая может помочь. нужно при срабатывания шорта сделать дополнительную проверку, а не был ли хай нынешнего бара выше стопа)) (чтоб фильтровать последующие сигналы после стопа на том же баре) ... блин, как же я его сравню, если он привязывается к цене сделки? а она исчезнет, после закрытия позиции. вариант, разве что, пытаться проверить в списке ордеров, когда по времени прошел прошлый ордер, но тогда на следующем баре после стопа опять откроется позиция. хана, тут без ExRem никуда, у меня ExRem - часть стратегии. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|