Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Другой вариант робота Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 11:14 am Ответить с цитатой Вернуться к началу

Код:
///////// Установки ///////////

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

СообщениеДобавлено: Пн Июн 09, 2008 12:20 pm Ответить с цитатой Вернуться к началу

Цитата:

Это робот которого я закинул в сканер, т.е. твой, название бумаг соответствует названию в квике, тайм часовой, в информациии о символе задавал следующие параметры, название, 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

СообщениеДобавлено: Пн Июн 09, 2008 12:23 pm Ответить с цитатой Вернуться к началу

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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 12:27 pm Ответить с цитатой Вернуться к началу

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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 12:29 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Июн 09, 2008 1:02 pm Ответить с цитатой Вернуться к началу

Напиши какой базовый фрейм в БД, какой фрейм установлен в настройках АА и какую бумагу пробуешь гонять.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 1:03 pm Ответить с цитатой Вернуться к началу

Еще тут изменение внес
"PRICE=" +NumToStr(sprice, format = 1.2, separator=False)+"; " +
чтоб 2 знака после запятой, а не 3, но это так проблему не решает.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 1:04 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Напиши какой базовый фрейм в БД, какой фрейм установлен в настройках АА и какую бумагу пробуешь гонять.


База 1 час, в настройках час, пробую, ГП, рося, сбер, ГМК, лук. Но сейчас проблема уже с ценой.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 09, 2008 1:23 pm Ответить с цитатой Вернуться к началу

Попробуй эту строку
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
Заменить на
Otstup = LastValue(C)+Otstup;
Это не правильно. Просто проверяем где не проходит цена.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 09, 2008 1:27 pm Ответить с цитатой Вернуться к началу

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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 1:31 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Июн 09, 2008 1:39 pm Ответить с цитатой Вернуться к началу

Попробуй из кода убрать все Plot и AlertIf

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 1:40 pm Ответить с цитатой Вернуться к началу

Так работает:
Код:

//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////

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

СообщениеДобавлено: Пн Июн 09, 2008 1:43 pm Ответить с цитатой Вернуться к началу

Блиииин.
Цитата:

TimeFrame = 360; // таймфрейм в секундах.

СКОЛЬКО СЕКУНД В ЧАСЕ!?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 1:45 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Блиииин.
Цитата:

TimeFrame = 360; // таймфрейм в секундах.

СКОЛЬКО СЕКУНД В ЧАСЕ!?


В 1 мин 60 сек, в 1 часе 60 мин. Ответ 360, а что.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen