Автор |
Сообщение |
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
всякий раз когда нужно проверить частичный вход или выход стараюсь обходить ами стороной.но тут прижало и надо протестить. Но эта зараза опять дурит...вроде и код с их офф сайта и логика простая как барабан - а нет....
Вообщем нужна помощь знатоков
Код: |
FirstProfitTarget = 2; // profit
SecondProfitTarget = 4; // in percent
TrailingStop = 4; // also in percent
priceatbuy=0;
highsincebuy = 0;
exit = 0;
for (i = 1; i < BarCount; i++)
{
if (market_position[i] == 0)
{
if (H[i]>LL[i-1] AND L[i]<YesterdayClose[i])
{
if (ShortUpperClose[i])
{
Short[i] = 1;
ShortPrice[i] = YesterdayClose[i];
enter = YesterdayClose[i];
market_position = -1;
stopLine = hh[i];
}
} else {
if (ShorUpperClose[i])
{
Short[i] = 1;
ShortPrice[i] = YesterdayClose[i];
enter = YesterdayClose[i];
market_position = -1;
stopLine = hh[i];
}
if (Short_LL[i-1])
{
Short[i] = 1;
ShortPrice[i] = O[i];
enter = O[i];
market_position = -1;
stopLine = hh[i];
}
}
}
if (market_position[i] == -1)
{
highsincebuy = Min(Low[ i ], highsincebuy );
if( exit == 0 AND Low[ i ] <= ( 1 - FirstProfitTarget * 0.01 ) * enter )
{
// first profit target hit - scale-out
exit = 1;
Short[ i ] = sigScaleOut;
}
if( exit == 1 AND
Low[ i ] <= ( 1 - SecondProfitTarget * 0.01 ) * enter )
{
// second profit target hit - exit
exit = 2;
ShortPrice[ i ] = Min( Open[ i ], ( 1 - SecondProfitTarget * 0.01 ) * enter );
}
if (time[i-1] >= 155000)
{
Cover[i] = 1;
CoverPrice[i] = O[i];
market_position = 0;
stopLine = Null;
}
if( exit >= 2 )
{
Short[ i ] = 0;
Cover[ i ] = exit + 1; // mark appropriate exit code
exit = 0;
priceatbuy = 0; // reset price
highsincebuy = 0;
}
if (h[i]>stopLine)
{
Cover[i] = 1;
CoverPrice[i] = stopLine[i];
market_position = 0;
stopLine = Null;
}
}
}
risk = 250/IIf(hh-ShortPrice==0,250,(hh-ShortPrice));
SetPositionSize(risk,4);
SetPositionSize(risk/2, spsPercentOfPosition * ( Short == sigScaleOut ) );
|
Сорри про копипастинге код немного потерял красоту оформления |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Неплохо было бы еще написать в чем конкретно этот код дурит. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
Неплохо было бы еще написать в чем конкретно этот код дурит. |
он пропускает все промежуточные выходы и выходит только по трейдинг или в конце дня. Я специально подобрал тестовый набор чтобы срабатывали все выходы но нифига. Только два выхода срабатывают |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А как проверял? Тестер покажет только последний выход. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
А как проверял? Тестер покажет только последний выход. |
Ну он же показывает ScaleIn/Out |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В каком режиме он их показывает? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
В каком режиме он их показывает? |
в обычном он показывает 1 если был Оut
в необычном он показывает детальный лог |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В режиме Trade List scaleIn и scaleOut он никак не показывает.
Очень трудно разбирать твой код. А у тебя там еще и непонятности.
Типа.
highsincebuy у тебя изначально = 0.
Затем ты пишешь
highsincebuy = Min(Low[ i ], highsincebuy );
Ежу понятно, что 0 всегда меньше чем Low и поэтому highsincebuy всегда будет 0.
И при этом я так и не смог понять нафига этот highsincebuy вообще нужен...
Ты хоть в общих словах опиши что этот код должен делать. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
В режиме Trade List scaleIn и scaleOut он никак не показывает.
Ты хоть в общих словах опиши что этот код должен делать. |
Он не показывает сами сделки, но он показывает 1 если scaleOut имел место. не важно сколько выходов было - всегда 1. если был один выход "обычный" то 0
Идея праста как барабан - если прошли 2% - выходим половинкой и стоп в безубыток (я его пока не приписал), еще 2% - выходим остатком. В 15-50 безусловный выход.
Я там уже почистил код - но все равно зараза не работает так как надо |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
вот так попробуй
Код: |
FirstProfitTarget = 2; // profit
SecondProfitTarget = 4; // in percent
TrailingStop = 4; // also in percent
time = TimeNum();
risk = 2;
priceatbuy=0;
exit = market_position = 0;
for (i = 2; i < BarCount; i++)
{
if (market_position[i] == 0)
{
if (H[i]>LL[i-1] AND L[i]<YesterdayClose[i])
{
if (ShortUpperClose[i])
{
Short[i] = 1;
ShortPrice[i] = YesterdayClose[i];
enter = YesterdayClose[i];
market_position = -2;
stopLine = hh[i];
}
}
else
{
if (ShorUpperClose[i])
{
Short[i] = 1;
ShortPrice[i] = YesterdayClose[i];
enter = YesterdayClose[i];
market_position = -2;
stopLine = hh[i];
}
else if (Short_LL[i-1])
{
Short[i] = 1;
ShortPrice[i] = O[i];
enter = O[i];
market_position = -2;
stopLine = hh[i];
}
}
}
else if (market_position[i] == -2)
{
if (H[i] > stopLine)
{
Cover[i] = 1;
CoverPrice[i] = Max(H[i], stopLine[i]);
market_position = 0;
stopLine = Null;
}
else if (time[i-1] >= 155000)
{
Cover[i] = 1;
CoverPrice[i] = O[i];
market_position = 0;
stopLine = Null;
}
else if( Low[ i ] <= ( 1 - FirstProfitTarget * 0.01 ) * enter )
{
// first profit target hit - scale-out
Short[ i ] = sigScaleOut;
market_position = -1;
stopLine = enter; // перенос стопа в безубыток
risk[i] = 1;
}
}
else if (market_position[i] == -1)
{
if (H[i] > stopLine)
{
Cover[i] = 1;
CoverPrice[i] = Max(H[i], stopLine[i]);
market_position = 0;
}
else if (time[i-1] >= 155000)
{
Cover[i] = 1;
CoverPrice[i] = O[i];
market_position = 0;
stopLine = Null;
}
else if ( Low[ i ] <= ( 1 - SecondProfitTarget * 0.01 ) * enter )
{
Cover[i] = 1;
ShortPrice[ i ] = Min( Open[ i ], ( 1 - SecondProfitTarget * 0.01 ) * enter );
market_position = 0;
}
}
}
SetPositionSize(risk, 4)
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Привет.
Попробовал...не взлетает. он выходит сразу на первом же "выходе" всей суммой (я пробовал менять SetPositionSize(risk, 4) как в мануале написано)
Эх...блин все хорошо в ами, но кое что через жопу |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
К сожалению весь код я не вижу и немогу отладить. Думаю в цикле все ОК. Вероятно у тебя раньше ошибка... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
К сожалению весь код я не вижу и немогу отладить. Думаю в цикле все ОК. Вероятно у тебя раньше ошибка... |
да там раньше кода то и нету особо никакого.
просто описываются условия входа и все. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так дай. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
Здравствуйте,
Возник такой вопрос. У меня открыта позиция и я хочу ее закрыть в несколько приемов. Пользуюсь конструкцией:
Buy = ScaleOut
Проблема в том, что после закрытия последней части таким образом, система продолжает видеть наличие открытой позиции (о чем говорит тестер), например Открытая позиция Лонг, величина открытой позиции 0.
Есть ли какой-нибудь способ закрыть позицию полностью последним ScaleOut'ом, чтобы тестер сразу указал отсутствие открытой позиции? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|