Автор |
Сообщение |
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Доброго дня всем)
Олег, я в легком замешательстве, т.к. не знаю даже как обозначить проблему.....Наверное опишу что творит робот, а ты может поймешь что не так....
Система показывает лонг - робот продает 1 лот, потом система показывает шорт - робот 1 лот покупает и 2 продает , я пробоват на разных системках резутьтат такой же. SOS. |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
робот:
Код: |
///// TradeBot v.1.1. Последние изменения 6.12.2004 /////
///////// Установки аккаунта ///////////
TickerID=2; // уникальный для каждого индикатора номер
Ticker="GP5"; // название бумаги в Амиброкере. На другой бумаге работать не будет
TimeFrame=5; // таймфрейм в минутах. На других таймфреймах работать не будет
Classcode="SPBFUT"; // код класса бумаги
Seccode="GZM8"; // код бумаги
Account="SPBFU"; // ваш аккаунт на бирже
Client="SPBFU"; // код клиента
Lots=1; // сколько лотов желаете торговать
FileName="C:/Documents and Settings/Алексей........./Мои документы/amibroker/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
Otstup=0.1; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
Point=0; // количество знаков после запятой в цене
|
система
Код: |
////// Убираем лишние сигналы /////////////
Buy = LastValue(Buy);
Short = LastValue(Short);
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
procedure savetrifile(stransid,sstr) {
f=fopen(FileName,"r");
found=0;
if (f) {
while (!feof(f)) {
s=fgets(f);
if (StrFind(s,stransid)>0) {
found=1;
}
}
fclose(f);
}
if (found==0) {
f=fopen(FileName,"a");
if (f) {
fputs(sstr+"\n",f);
fclose(f);
}
}
}
function makeandsave(sOper,sOperID,sprice) {
CCS="";
if (Client!="") { CCS=" CLIENT_CODE="+Client+";"; }
transid=StrFormat("TRANS_ID=%g%g%g%g;",TickerID,sOperID,LastValue(Ref(DayOfYear(),-1)),LastValue(Ref(TimeNum(),-1)));
str=StrFormat(transid+"PRICE=%1."+Point+"f;QUANTITY=%g;OPERATION="+sOper+";CLASSCODE="+Classcode+"; ACTION=NEW_ORDER; TYPE=L; SECCODE="+Seccode+"; ACCOUNT="+Account+";"+CCS,sprice,Lots);
savetrifile(transid,str);
}
if ((Now(3)==LastValue(DateNum()))AND(BarCount>1)AND(Name()==Ticker)AND(TimeFrame==Interval()/60)AND((Buy[BarCount-1]==1)OR(Sell[BarCount-1]==1)OR(Short[BarCount-1]==1)OR(Cover[BarCount-1]==1))) {
ifbuy=IIf(Buy[BarCount-1]==0,1,0);
ifsell=IIf(Sell[BarCount-1]==0,1,0);
ifshort=IIf(Short[BarCount-1]==1,1,0);
ifcover=IIf(Cover[BarCount-1]>0,1,0);
if (ifbuy) {
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B",1,price);
}
if (ifsell) {
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S",2,price);
}
if (ifshort) {
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S",3,price);
}
if (ifcover) {
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B",4,price);
}
}
//// mehanizator (c) 2004, http://www.russian-trader.ru |
|
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
сейчас сигнал на лонг был, робот его проигнорировал и стопы не сработали |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
сейчас сигнал на лонг был, робот его проигнорировал и стопы не сработали |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Сейчас сигнал шорт, робот 1 лот купил и 1 продал |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Выложи содержание .tri файла. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
TRANS_ID=22151140000;PRICE=35941;QUANTITY=1;OPERATION=S;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=21151141000;PRICE=35966;QUANTITY=1;OPERATION=B;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=22151141000;PRICE=35894;QUANTITY=1;OPERATION=S;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=23151141000;PRICE=35894;QUANTITY=1;OPERATION=S;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=21151151000;PRICE=35958;QUANTITY=1;OPERATION=B;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=23151151000;PRICE=35886;QUANTITY=1;OPERATION=S;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=24151151500;PRICE=36092;QUANTITY=1;OPERATION=B;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=21151173000;PRICE=36035;QUANTITY=1;OPERATION=B;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=22151173000;PRICE=35963;QUANTITY=1;OPERATION=S;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq;
TRANS_ID=23151173000;PRICE=35963;QUANTITY=1;OPERATION=S;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=GZM8; ACCOUNT=qqqqqqq; CLIENT_CODE=qqqqqqq; |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так. Что мы имеем?
На баре 14.10 3 исполненых сигнала Buy, Sell и Short.
На баре 15.10 2 исполненых синала Buy и Short.
На баре 17.30 3 исполненых сигнала Buy, Sell и Short.
Такое может быть в двух случаях.
1. Нет фильтра сделок
(либо
Код: |
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short); |
либо
)
Причем отсутствие такого фильтра совершенно очевидно т.к. робот совершает 2 продажи подряд.
2. Ошибка при написании стратегии для робота и в робот попадают сигналы с текущего (живого) бара и в результате сигналы при изменении бара появляются и исчезают
(в моем варианте робота этот момент решен при помощи
Код: |
Buy = Ref(Buy, -1);
Sell = Ref(Sell, -1);
Short = Ref(Short, -1);
Cover = Ref(Cover, -1);
|
А у Меха за счет стратегии не учитывающей Close.
)
Вот все, что могу сказать... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Олег, а была ли решена проблема, отсутствия пирамидинга у ами в старых версиях? |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Решена очень давно.
В хелпере тема Pyramiding (scaling in/out) and mutliple currencies in the portfolio backtester |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Решена очень давно.
В хелпере тема Pyramiding (scaling in/out) and mutliple currencies in the portfolio backtester |
А что если воспользоваться твоей наработкой.
Код: |
/*
A - покупка 20%
BB - продажа (закрытие позы)
AA - доливка 80%
B - сокращение позы на 80%
*/
A = ...;
BB = ...;
AA = ...;
B = ...;
Buy = A;
Sell = BB;
// удаляем лишние сигналы
Buy = ExRem(Buy, Sell);
Sell = ExRem(Sell, Buy);
// определяем когда система находится в рынке по первоначальному сигналу
intrade = Flip(Buy, Sell);
// УДАЛЯЕМ ЛИШНИЕ СИГНАЛЫ НА ДОЛИВКУ
// сперва сигналы поступившие во время "вне рынка"
AA = intrade & AA;
B = intrade & B;
// затем лишние сигналы когда система уже в рынке и одна доливка уже была
AA = ExRem(AA, Buy);
B = ExRem(B, Buy);
Buy = Buy + sigScaleIn * intrade * AA + sigScaleOut * intrade * B;
Sell = Sell;
PositionSize = IIf(intrade & (AA OR B), 80, 20); |
|
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А чего в ней моего? Там как раз используются ф-ции sigScaleIn и sigScaleOut |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Доброе утро!
Олег, это не 1 и не 2-я проблема: эквити (1) у меня есть, и сигнал у меня появляется на открытии свечи, следующей за выполнением условий бай\шорт. Может я тебе в личку скину весь код, а ты глянешь что не так, А? |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Давай. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Олег,при отправке сигналов цена ухоит на 0.2 больше чем должна была, причем в блэк тесте все пучком, совпалает до сотых если в ручную считать, отступ не причем проверял, это может быть из-за отсутствия в коде:
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);
Просто вставляю в код и на графике перестают отображаться сигналы. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|