Автор |
Сообщение |
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Подскажите пожалуйста,очень нужно!!!Никак не могу организовать алгоритм.Из посторонней программы приходят сигналы в виде цифр 2-покупать, 0.2 -продавать.Торговля ведется по цене закрытия бара!!!Организовал как торговля по другому инструменту,с этим всё нормально.Но хочу чтобы включался фильтр плечей, т.е. при условии что мы торгуем по цене закрытия ниже 100 барного максимума-торговля ведется на свои(1-е плечо),а как только пробиваем 100 барный максимум плечо переключаем на 5-е.Тут что то типа пирамидинга,но чего то у меня не получается редко программирую и не могу сообразить.Тут возможны три варианта:
1) Пришел сигнал на покупку ,смотрим цена С ниже 100 барного максимума,значит входим с 1-м плечом,далее в какой то момент цена пробивает максимум и на закрытии бара мы должны добавиться до 5-го плеча,далее по сигналу на выход всё закрываем.
2)Пришел сигнал на покупку,смотрим цена С выше 100 барного максимума,значит входим с 5-м плечом и ждем сигнал на выход.
3)Пришел сигнал на покупку,смотрим цена С ниже 100 барного максимума,входим с 1-м плечом,далее цена не доходит до максимума и как обычно закрываемся по сигналу на выход.
Не пойму как тут с циклами или без них можно обойтись,во вложении приложил файл. |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Лучше всего циклом. Вечером напишу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Очень жду!!!Спасибо! |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот код
Код: |
SetBacktestMode( backtestRegularRawMulti );
SetOption( "CommissionMode", 3);
SetOption( "CommissionAmount", 8);
a = 100;//пробой максимума,за столько то баров
HH = Ref(HHV(C, a), -1);
CondBuy1 = Foreign( "NerosetL", "Close") >= 2 AND C < HH AND Hour()>11;//Торговля по сигалам другого инструмента+условия входа для Случая № 1
CondBuy2 = Foreign( "NerosetL", "Close") >= 2 AND C > HH AND Hour()>11;//Торговля по сигалам другого инструмента+условия входа для Случая № 2
Sell = Foreign( "NerosetL", "Close")<=0.2 ;//Закрытие всех позиций
pos = 0; // 0 - вне рынка, 1 - в рынке сайзом 1, 2 - в рынке сайзом 2
ps = 0; // размер лота
for( i = a; i < BarCount; i++ )
{
if(pos == 0)
{
Sell[i] = 0;
if(CondBuy1[i])
{
Buy[i] = 1;
pos = 1;
ps[i] = 1;
}
else if(CondBuy2[i])
{
Buy[i] = 1;
pos = 2;
ps[i] = 5;
}
}
else if(pos == 1)
{
if(Sell[i])
pos = 0;
else if(C[i] > HH[i])
{
Buy[i] = 1;
pos = 2;
ps[i] = 4;
}
}
else if(pos == 2)
{
if(Sell[i])
pos = 0;
}
}
|
Тут применен режим тестера backtestRegularRawMulti.
В таком режиме тестер может открывать несколько позиций по одной бумаге. Сигнал Sell закроет сразу все позиции.
Там формируется масив ps. Это типа размер позиции. Если сигнал CondBuy1, то ps == 1, если сигнал CondBuy2, то ps == 5, если сигнал добавления при пробое HHV(C, a) и уже открытой позиции, то ps == 4
Из ps сам построишь SetPositionSize();
Больше ничего делать тут не надо.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Олег,спасибо огромное!Буду разбираться! |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Вынес себе весь мозг ,но никак не получается наладить стопы.Прикручивая штатные средства ApplyStop(для тейка и стоп-лосса) получается так что при срабатывании тейк-профита следующая сделка открывается на следующем баре(хотя сигнал приходит на текущем баре) или не открывается вовсе пока по Foreign( "NerosetL", "Close") не придет сигнал Sell ,и только на новом Buy идет открытие позиции.Пытаюсь в ручную написать в цикле тейк-профит и стоп -лосс,но чего то все очень каряво выходит,то лишние сделки всплывают,то еще не понятно что.Программист из меня никакой.Тут вот какая тонкость если сработал тейк-профит или стоп-лосс на текущем баре,а сигнал Foreign( "NerosetL", "Close") приходит на открытие позиции,то значит надо на закрытии этого бара заново входить.Олег, если не сложно гляньте плиз на досуге,что я тут наковырял.Спасибо! |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Вроде все нормально.
А конкретно что не так работает? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Тут лучше глянуть на данных какие сделки проходят и как исполняются.Если не сложно конечно.При работе через Foreign( "NerosetL", "Close") 2-вход,0.2- выход и 1- ожидание. |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну уж нет. Не хочу я разбираться с таблицей в которой 14000 строк.
Даже импортнув в Ами.
Давай словами. Опиши конкретный пример. Когда и что не так.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Это просто рабочие файлы,а так достаточно первых 10 ти сделок.Получается некоторые сделки открываются и тут же закрываются на одном баре. |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
02.03.09 в 20.00 должна быть сделка,а ее нет почему то. |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
bonzamen писал(а): |
02.03.09 в 20.00 должна быть сделка,а ее нет почему то. |
В настройках тестера на закладке Report переключи Result list на Detailed log и посмотри, был ли в тестере сигнал в это время. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
bonzamen писал(а): |
Это просто рабочие файлы,а так достаточно первых 10 ти сделок.Получается некоторые сделки открываются и тут же закрываются на одном баре. |
Так может там реально срабатывает стоп? По правилам не должен т.к. вход на закрытии. Выключи опцию Allow same bar exit (single bar trade) в настройках. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
bonzamen
Зарегистрирован: 17.08.2010
Сообщения: 50
Откуда: Созвездие Альдебаран
|
Если отключить тогда первая же сделка 18.02.2009 15:00:00-
16:00:00 закрывается по тейку,и на этом всё,а должна снова входить на закрытии 16:00:00 и до 18.02.2009 23:00:00. |
_________________ Всем удачи! |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тогда надо модернизировать код. Так, чтобы если вход с пустой позиции, то стоп не работает.... Перенеси if (позиция и стоп) выше if(нет позиции и вход). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|