Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 След. |
Автор |
Сообщение |
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Олег, подскажи пожалуста, какие необходимо внести изменения, чтоб у робота не накладывались друг на друга сигналы (в меховском при появлении сигналов от 2х систем отправлялся один)
Код: |
TimeFrame = 60; // таймфрейм в секундах.
Account = "L01-00000000"; // ваш аккаунт на бирже
Client = ""; // код клиента
Lots = 1; // сколько лотов желаете торговать
Otstup = 2; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
FileName ="C:/Program Files/QUIK-Junior/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
////////// Правила системы ///////////////
Buy = Cross(MACD(), Signal());
Sell = Cross(Signal(), MACD());
Short = 0;
Cover = 0;
////// Убираем лишние сигналы /////////////
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);
Buy = Ref(Buy, -1);
Sell = Ref(Sell, -1);
Short = Ref(Short, -1);
Cover = Ref(Cover, -1);
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
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 (NOT found)
{
f = fopen(FileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}
function makeandsave(sOper, sprice)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+"; ";
str = transid +
"PRICE=" +NumToStr(sprice, format = 1.3, separator=False)+"; " +
"QUANTITY=" +NumToStr(Lots, format = 1.0)+"; "+
"OPERATION=" +sOper+"; "+
"CLASSCODE=" +Classcode+"; "+
"ACTION=" +"NEW_ORDER; "+
"TYPE=" +"L; "+
"SECCODE=" +Name()+"; "+
"ACCOUNT=" +Account+"; "+
CCS;
savetrifile(transid, str);
}
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", price);
}
} |
У меня система не сможет торговать одной бумагой, либо проскальзывание возрастет, либо будет исполняться частично заявки, поэтому торговать хочу бумаг 3-4. Этот робот ты вроде исправлял, т.к. с транзакциями мне пока не реально разобраться, то не подскажеш, на этом форуме как и с чем едят твое творение. Пож-ста.
За творение спасибо. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Олег, подскажи пожалуста, какие необходимо внести изменения, чтоб у робота не накладывались друг на друга сигналы (в меховском при появлении сигналов от 2х систем отправлялся один)
|
Две системы на одной бумаге?
Уже где то писал. Лучше всего делать одну транзакцию, но увеличенным лотом.
Типа так
Код: |
///// система1
BuySys1 = .....;
SellSys1 = .....;
BuySys2 = .....;
SellSys2 = ......;
Buy = BuySys1 OR BuySys2;
Sell = SellSys1 OR SellSys2;
Lots = BuySys1*Lots + BuySys2*Lots
|
Можно сделать чтобы лоты для разных систем были разные. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Цитата: |
Олег, подскажи пожалуста, какие необходимо внести изменения, чтоб у робота не накладывались друг на друга сигналы (в меховском при появлении сигналов от 2х систем отправлялся один)
|
Две системы на одной бумаге?
Уже где то писал. Лучше всего делать одну транзакцию, но увеличенным лотом.
Типа так
Код: |
///// система1
BuySys1 = .....;
SellSys1 = .....;
BuySys2 = .....;
SellSys2 = ......;
Buy = BuySys1 OR BuySys2;
Sell = SellSys1 OR SellSys2;
Lots = BuySys1*Lots + BuySys2*Lots
|
Можно сделать чтобы лоты для разных систем были разные. |
Одна система 10 бумаг, только есно что сигналы скорее всего будут разные для разных бумаг. У меха решение заключалось в этой строке:
Код: |
TickerID=1; // уникальный для каждого индикатора номер |
Т.е. можно было иметь одну систему, но для разных бумаг забивать разный TickerID и система отслеживала сигналы по этому номеру, но если одновременно возникают сигналы в 2х и более проходил только сигнал от одной системы. Поэтому я и попросил рассказать подробнее, как подготовить список бумаг, как забить кол-во лотов, чтоб робот торговал одну систему для 1000 бумаг, но при этом сигналы и лоты для каждой остовались индивидуальными. Что то ты раскрывал на сайте меха, но на своем родном ни слова. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Что то ты раскрывал на сайте меха, но на своем родном ни слова.
|
А это потому, что в планах сделать более продвинутого робота. Для моего сайта |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Цитата: |
Что то ты раскрывал на сайте меха, но на своем родном ни слова.
|
А это потому, что в планах сделать более продвинутого робота. Для моего сайта |
И где оно? |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В планах. Идея использует SQL. Это для многих будет слишком сложно. А сделать проще пока не дошли руки.
Если мне за это будут платить, то я целыми днями буду разные вкусности писать и размещать на сайте. Но пока что самому платить приходится за хостинг и семью кормить надо. ) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
В планах. Идея использует SQL. Это для многих будет слишком сложно. А сделать проще пока не дошли руки.
Если мне за это будут платить, то я целыми днями буду разные вкусности писать и размещать на сайте. Но пока что самому платить приходится за хостинг и семью кормить надо. ) |
А сам говорил времени свободного навалом. В кредит писать как понимаю не будеш, ну а как насчет "потомки оценят, золотыми буквами впишут в историю...". |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
ну а как насчет "потомки оценят, золотыми буквами впишут в историю
|
А я и не отказываюсь. Но хобби - это хобби, оно не работа и делается по настроению.
Цитата: |
А сам говорил времени свободного навалом
|
Времена меняются... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
stanislav
Зарегистрирован: 22.04.2008
Сообщения: 12
|
commenced писал(а): |
Поэтому я и попросил рассказать подробнее, как подготовить список бумаг, как забить кол-во лотов, чтоб робот торговал одну систему для 1000 бумаг, но при этом сигналы и лоты для каждой остовались индивидуальными. Что то ты раскрывал на сайте меха, но на своем родном ни слова. |
Доброго времени. Так вроде обсуждали этот вопрос.
Количество лотов и порчее можно засунуть в фундаментальные данные,я по крайней мере сделал так под работу в режиме Анализатора. Сигналы не пропадают, правда приходится жертвовать
временем на интервал срабатывания Анализатора (например 1 секунда), для меня это не принципиально.Если интересно поделюсь-не вопрос. У меня есть встречный вопрос- я написал строку для звукового оповещения -
AlertIf(Buy, "SOUND C:\\My Music\\ааа.WAV", "Buy", 1,12,0);
так сказать для работы в ручном режиме- не нужно мне пока 1000 акций в режиме робота
Так вот, срабатывает оповещение некорректно, иногда тупо повторяется на каждом проходе анализатора, несмотря на запрет оповещать на одном баре (цифирь 12), а иногда нормально оповещает
1 раз как и положенно. В чем дело не пойму. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
написал строку для звукового оповещения -
AlertIf(Buy, "SOUND C:\\My Music\\ааа.WAV", "Buy", 1,12,0);
так сказать для работы в ручном режиме- не нужно мне пока 1000 акций в режиме робота
Так вот, срабатывает оповещение некорректно, иногда тупо повторяется на каждом проходе анализатора, несмотря на запрет оповещать на одном баре (цифирь 12), а иногда нормально оповещает
1 раз как и положенно. В чем дело не пойму. |
Я не знаю ибо звук из компа вообще удалил. Ибо нефиг |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Олег, помоги пожалуйста, стоп и трейлинг не срабатывают(хотя трейлинг точно не знаю, до этого дело не дошло - как только увидел что стоп не сработал, позицию закрыл)
Что не так? |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Код: |
T1 = ;
T2 = ;
P1 = Optimize("P1", 0.3, 0.1, 4, 0.2);
P2 = Optimize("P2", 1.1, 0.1, 4, 0.2);
Buy = Ref()>EMA(C,T2) AND Cross(),-1) AND O>EMA(C,T1);
Short = Ref(EMA(C,T1)<EMA(C,T2) AND Cross(C),-1) AND O<EMA(C,T1);
Sell=0;
Cover=0;
ApplyStop(stopTypeTrailing,1,P2,2);
ApplyStop(stopTypeLoss, stopModePercent, P1);
BuyPrice = ShortPrice = O;
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
Plot(EMA(C,T1),"T1", 4,1);
Plot(EMA(C,T2),"T2", 6,1);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
|
это сама система |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Код: |
////// Убираем лишние сигналы /////////////
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) {
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 ((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]==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);
}
}
//// mehanizator (c) 2004, http://www.russian-trader.ru |
это "тело" робота |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
диван
Зарегистрирован: 01.05.2008
Сообщения: 64
|
Код: |
////// Убираем лишние сигналы /////////////
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) {
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 ((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]==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);
}
}
//// mehanizator (c) 2004, http://www.russian-trader.ru |
это "тело" робота |
_________________ Алексей |
|
Посмотреть профиль Отправить личное сообщение |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Неубирает:
////// Убираем лишние сигналы /////////////
Buy = LastValue(Buy);
Short = LastValue(Short);
она лишние сигналы, за это отвечат функция ExRem(). |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|