прошу помощи в оптимизации МТС

  • Автор темы ramer
  • Дата начала

ramer

New member
Добрый день, ВСЕМ ФОРУМЯНАМ. Окажите помощь.
Есть проблема при выгрузке TRI-файла - дублирующие заявки формируются. По несколлько сигналов на покупку и продажу:
TRANS_ID=52253195400;PRICE=116140;QUANTITY=1;OPERATION=S;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=52253195900;PRICE=116145;QUANTITY=1;OPERATION=S;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=51253203400;PRICE=116215;QUANTITY=1;OPERATION=B;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=51253203900;PRICE=116180;QUANTITY=1;OPERATION=B;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=52253212400;PRICE=116260;QUANTITY=1;OPERATION=S;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=51253213400;PRICE=116390;QUANTITY=1;OPERATION=B;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=51253213900;PRICE=116355;QUANTITY=1;OPERATION=B;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;
TRANS_ID=51253232900;PRICE=116755;QUANTITY=1;OPERATION=B;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIU9; ACCOUNT=SPBFUT1051Q; CLIENT_CODE=SPBFUT1051Q;

Хотя изначально хотел последовательность: если есть сигнал buy, то до появления сигнала sell все осталные buy игнорируются. Ложняки как на 1 мин. так и на других фреймах. И фильтры ставлю, а результ один - выстреливают ложняки. Ты многим сомтрю на форумах. Подскажи что не так у меня. А вообще, есть у кого люди по переписке которые МТС в АМИ создали и уних ложняки не выстреливают? Если да то к кому обратиться, к какому гуру?. А то вроде МТС наклипаю, а с ложняками справится не могу и как следствие полу-автомат. Вот мой код:

///////// Установки аккаунта /////////// лучше всего на 15 мин
TickerID=615; // уникальный для каждого индикатора номер
Ticker="RTS-9.09"; // название бумаги в Амиброкере. На другой бумаге работать не будет
TimeFrame=1; // таймфрейм в минутах. На других таймфреймах работать не будет
Classcode="SPBFUT"; // код класса бумаги
Seccode="RIU9"; // код бумаги
Account="SPBFUT0051Q"; // ваш аккаунт на бирже
Client="SPBFUT1051Q"; // код клиента
Zapis=ParamToggle("Записывать транзакции в файл?","No|Yes",1);
Lots=1; // сколько лотов желаете торговать
FileName="c:/01robot_RTS_ID6(30).tri"; // слэши прямые!!! имя файла с транзакциями для квика
Otstup=0.01; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
Point=0; // количество знаков после запятой в цене

////////// Правила системы ///////////////
SetBarsRequired(100000,100000);

SetChartBkColor(ParamColor("Outer panel color ",colorLightGrey));

Period = Param("Period",21,1,100,1);
Hull = WMA( 2*WMA(C,int(Period/2))- WMA(C,Period),int(sqrt(Period)));
Plot(C,"close",colorDarkRed,121);
for( i = 1 ; i < BarCount-1; i++ )
{
if (hull <hull[i-1] && hull <hull[i+1])
Lpml=1;
else
Lpml =0;
if (hull >hull[i-1] && hull >hull[i+1])
Lpmh=1;
else
Lpmh =0;
}
Equity(1,0);
RD =ExRem(Lpml,Lpml);
GR =ExRem(LpmH,Lpmh);

bz=Cross(C,Hull);
cz=Cross(Hull, C);
Buy =bz ;
Sell = cz;
Short = 0 ;
Cover = 0 ;
Equity(1,0);
Filter=Buy OR Sell OR Short OR Cover;
Buy=ExRem(Buy,Buy);
Sell=ExRem(Sell,Sell);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
//удаляет данные сигнала, после того как он прошел, считаем чистую позицию
Equity(1,0);
BuySellL= IIf(BarsSince(Buy) < BarsSince(Sell),1,0);
BuySellS= IIf(BarsSince(Short) < BarsSince(Cover),1,0);
BuySell= BuySellL + BuySellS ;

Plot(Hull,"Hull "+Period+" days",6,5);
PlotShapes(IIf(RD!=0,shapeUpArrow,shapeNone),colorGreen,1,hull,-25);
PlotShapes(IIf(GR!=0,shapeDownArrow,shapeNone),colorRed,1,hull,-25);
AlertIf( Buy, "SOUND c:/WINDOWS/Media/ding.wav", "Длинная позиция",0,1+2+4+;
AlertIf( Sell, "SOUND c:/WINDOWS/Media/Windows XP - finish.wav", "Выход из длинной позиции",0,1+2+4+;

//////////// Формируем транзакцию.//////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
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) {
sprice=5*round(sprice/5);
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 ((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]==1, 1, 0);
ifsell=IIf(Sell[BarCount-1]==1, 1 ,0);
ifshort=IIf(Short[BarCount-1]==1, 1, 0);
ifcover=IIf(Cover[BarCount-1]==1, 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);
}
}

С надеждой на скорый ответ и помощь, ramer.
 

Andres

New member
Так у тебя же здесь в условиях:
bz=Cross(C,Hull);
cz=Cross(Hull, C);

используется close, который постоянно менятся внутри одного бара, он может несколько раз пересечь твой Hull в одном баре, да и Hull наверно пересчитывается. В ветке "Торговый автомат Амиброкер+Квик" где то это обсуждалось, поищи. Как вариант можно использовать high and low вместо close, и может ref(hull,-1). Или фильтр по времени, чтобы сигналы проверялись только на последних секунде(-ах) бара.
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху