Автор |
Сообщение |
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Код: |
///////// Установки ///////////
TimeFrame = 360; // таймфрейм в секундах.
Account = "L01-00100F00"; // ваш аккаунт на бирже
Client = " 21345"; // код клиента
Lots =
IIf(Name() == "GAZP", 22,
IIf(Name() == "LKOH", 3,
IIf(Name() == "GMKN",1,
IIf(Name() == "SBER03",95,
26)))); // сколько лотов желаете торговать
Otstup = 0.2; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
FileName ="D:/tranzi/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
////////// Правила системы ///////////////
Buy = условие;
BuyPrice = O;
Short = условие;
ShortPrice = O;
Sell = Short;
SellPrice = ShortPrice;
Cover=Buy;
CoverPrice = BuyPrice;
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);
Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy);
//////////////////////////////////////////////////////////////////////////////////////////////
//Звук
AlertIf( Buy, "SOUND c:/WINDOWS/Media/tada.wav", "Длинная позиция",0,1+2+4+8);
AlertIf( Sell, "SOUND c:/WINDOWS/Media/tada.wav", "Выход из длинной позиции",0,1+2+4+8);
AlertIf( Short, "SOUND c:/WINDOWS/Media/tada.wav", "Короткая позиция",0,1+2+4+8);
AlertIf( Cover, "SOUND c:/WINDOWS/Media/tada.wav", "Выход из короткой позиции",0,1+2+4+8);
//////////////////////////////////////////////////////////////////////////////////////////////
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( O, "O", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
Plot( H, "H", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
Plot( L, "L", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);
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);
}
}
//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной |
Это робот которого я закинул в сканер, т.е. твой, название бумаг соответствует названию в квике, тайм часовой, в информациии о символе задавал следующие параметры, название, Full name- от 01 до 05 по порядку, Market для каждой бумаги в соответствии с кодами класса (EQBR, EQNL и т.д.), ну и шаг, у всех бумаг он 0.01. В сканере появляются сигналы, но в три файл записи нет (перед этим гонял на меховском роботе, все гуд). Частота сканирование 1сек, сканирует последний бар, все бумаги. Да сама цена в сканере скачет, но как я понимаю, он просто отображает C ( и начинает это делать после появления сигнала) и если транзакция уже была отправлена, то он больше отправлять не будет, хоть и удобнее конечно чтоб показывал цену отправленной заявки хотябы без отступа. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Это робот которого я закинул в сканер, т.е. твой, название бумаг соответствует названию в квике, тайм часовой, в информациии о символе задавал следующие параметры, название, Full name- от 01 до 05 по порядку, Market для каждой бумаги в соответствии с кодами класса (EQBR, EQNL и т.д.), ну и шаг, у всех бумаг он 0.01. В сканере появляются сигналы, но в три файл записи нет (перед этим гонял на меховском роботе, все гуд). Частота сканирование 1сек, сканирует последний бар, все бумаги. Да сама цена в сканере скачет, но как я понимаю, он просто отображает C ( и начинает это делать после появления сигнала) и если транзакция уже была отправлена, то он больше отправлять не будет, хоть и удобнее конечно чтоб показывал цену отправленной заявки хотябы без отступа.
|
Скорее всего из за
if (TimeFrame == Interval() & FullName() != "") |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
commenced писал(а): |
Сделал как написано ниже, почему появлялись не понимаю, у меня Short=sell отрисовывался сигнал на шорт на другом баре, чем Sell, хотя такого быть не должно:
Код: |
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);
Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy); |
|
Точно сказать не могу, но вероятнее всего блок эксремов не позволяет появляться short и sell на одном баре. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Цитата: |
Это робот которого я закинул в сканер, т.е. твой, название бумаг соответствует названию в квике, тайм часовой, в информациии о символе задавал следующие параметры, название, Full name- от 01 до 05 по порядку, Market для каждой бумаги в соответствии с кодами класса (EQBR, EQNL и т.д.), ну и шаг, у всех бумаг он 0.01. В сканере появляются сигналы, но в три файл записи нет (перед этим гонял на меховском роботе, все гуд). Частота сканирование 1сек, сканирует последний бар, все бумаги. Да сама цена в сканере скачет, но как я понимаю, он просто отображает C ( и начинает это делать после появления сигнала) и если транзакция уже была отправлена, то он больше отправлять не будет, хоть и удобнее конечно чтоб показывал цену отправленной заявки хотябы без отступа.
|
Скорее всего из за
if (TimeFrame == Interval() & FullName() != "") |
Исправил так.
if (TimeFrame == Interval()/60 & FullName() != "")
заявка ушла
TRANS_ID=01130000; PRICE={EMPTY}; QUANTITY=22; OPERATION=B; CLASSCODE=EQNE; ACTION=NEW_ORDER; TYPE=L; SECCODE=GAZP; ACCOUNT=L01-00000F00; CLIENT_CODE=2435;
TRANS_ID=02120000; PRICE={EMPTY}; QUANTITY=3; OPERATION=B; CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=LKOH; ACCOUNT=L01-00000F00; CLIENT_CODE=1234;
Теперь квик ругается, не правильно указана цена, а в сканере ценауказываетя с точностью до 0.0001, хотя дя бумаг указал шаг 0.01. |
_________________ Юра
Последний раз редактировалось: commenced (Пн Июн 09, 2008 12:45 pm), всего редактировалось 4 раз(а) |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
commenced писал(а): |
Сделал как написано ниже, почему появлялись не понимаю, у меня Short=sell отрисовывался сигнал на шорт на другом баре, чем Sell, хотя такого быть не должно:
Код: |
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);
Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy); |
|
Точно сказать не могу, но вероятнее всего блок эксремов не позволяет появляться short и sell на одном баре. |
Да понимаеш такое наблюдалось только в 1 случае из 10, сейчас проблема решена, поэтому разбираться дальше не буду. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Напиши какой базовый фрейм в БД, какой фрейм установлен в настройках АА и какую бумагу пробуешь гонять. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Еще тут изменение внес
"PRICE=" +NumToStr(sprice, format = 1.2, separator=False)+"; " +
чтоб 2 знака после запятой, а не 3, но это так проблему не решает. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Напиши какой базовый фрейм в БД, какой фрейм установлен в настройках АА и какую бумагу пробуешь гонять. |
База 1 час, в настройках час, пробую, ГП, рося, сбер, ГМК, лук. Но сейчас проблема уже с ценой. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Попробуй эту строку
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
Заменить на
Otstup = LastValue(C)+Otstup;
Это не правильно. Просто проверяем где не проходит цена. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
commenced писал(а): |
000 писал(а): |
Цитата: |
Это робот которого я закинул в сканер, т.е. твой, название бумаг соответствует названию в квике, тайм часовой, в информациии о символе задавал следующие параметры, название, Full name- от 01 до 05 по порядку, Market для каждой бумаги в соответствии с кодами класса (EQBR, EQNL и т.д.), ну и шаг, у всех бумаг он 0.01. В сканере появляются сигналы, но в три файл записи нет (перед этим гонял на меховском роботе, все гуд). Частота сканирование 1сек, сканирует последний бар, все бумаги. Да сама цена в сканере скачет, но как я понимаю, он просто отображает C ( и начинает это делать после появления сигнала) и если транзакция уже была отправлена, то он больше отправлять не будет, хоть и удобнее конечно чтоб показывал цену отправленной заявки хотябы без отступа.
|
Скорее всего из за
if (TimeFrame == Interval() & FullName() != "") |
Исправил так.
if (TimeFrame == Interval()/60 & FullName() != "")
заявка ушла
TRANS_ID=01130000; PRICE={EMPTY}; QUANTITY=22; OPERATION=B; CLASSCODE=EQNE; ACTION=NEW_ORDER; TYPE=L; SECCODE=GAZP; ACCOUNT=L01-00000F00; CLIENT_CODE=2435;
TRANS_ID=02120000; PRICE={EMPTY}; QUANTITY=3; OPERATION=B; CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=LKOH; ACCOUNT=L01-00000F00; CLIENT_CODE=1234;
Теперь квик ругается, не правильно указана цена, а в сканере ценауказываетя с точностью до 0.0001, хотя дя бумаг указал шаг 0.01. |
if (TimeFrame == Interval()/60 & FullName() != "")
лучше замени на
if (TimeFrame == Interval(0) & FullName() != "")
Хотя странно это... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Попробуй эту строку
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
Заменить на
Otstup = LastValue(C)+Otstup;
Это не правильно. Просто проверяем где не проходит цена. |
Да она здесь не проходит, я уже и LastValue(C,1) пробывал и (100*TickSize), не пойму что надо и просто С. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Попробуй из кода убрать все Plot и AlertIf |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Так работает:
Код: |
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
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.2, 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()/60 & FullName() != "")
{
if(Buy)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", price);
}
if(Sell)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", price);
}
if(Short)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", price);
}
if(Cover)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", price);
}
}
//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной |
if (TimeFrame == Interval()/60 & FullName() != "") Эту строку менял на твою, не идет отправка в файл. Только Олег посмотри код внимательнее, я конечно менял сам и все такое, но я пока в себе не уверен. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Блиииин.
Цитата: |
TimeFrame = 360; // таймфрейм в секундах.
|
СКОЛЬКО СЕКУНД В ЧАСЕ!? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Блиииин.
Цитата: |
TimeFrame = 360; // таймфрейм в секундах.
|
СКОЛЬКО СЕКУНД В ЧАСЕ!? |
В 1 мин 60 сек, в 1 часе 60 мин. Ответ 360, а что. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|