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


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

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

Олег, подскажи пожалуста, какие необходимо внести изменения, чтоб у робота не накладывались друг на друга сигналы (в меховском при появлении сигналов от 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
Сообщения: 8898

СообщениеДобавлено: Пн Май 12, 2008 8:38 am Ответить с цитатой Вернуться к началу

Цитата:

Олег, подскажи пожалуста, какие необходимо внести изменения, чтоб у робота не накладывались друг на друга сигналы (в меховском при появлении сигналов от 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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Май 12, 2008 9:24 am Ответить с цитатой Вернуться к началу

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 бумаг, но при этом сигналы и лоты для каждой остовались индивидуальными. Smile Что то ты раскрывал на сайте меха, но на своем родном ни слова. Sad

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


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

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

Цитата:

Что то ты раскрывал на сайте меха, но на своем родном ни слова.

А это потому, что в планах сделать более продвинутого робота. Для моего сайта Smile

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


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

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

000 писал(а):
Цитата:

Что то ты раскрывал на сайте меха, но на своем родном ни слова.

А это потому, что в планах сделать более продвинутого робота. Для моего сайта Smile


И где оно? Smile

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


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

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

Цитата:

И где оно?

В планах. Идея использует SQL. Это для многих будет слишком сложно. А сделать проще пока не дошли руки.

Если мне за это будут платить, то я целыми днями буду разные вкусности писать и размещать на сайте. Но пока что самому платить приходится за хостинг и семью кормить надо. )

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


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

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

000 писал(а):
Цитата:

И где оно?

В планах. Идея использует SQL. Это для многих будет слишком сложно. А сделать проще пока не дошли руки.

Если мне за это будут платить, то я целыми днями буду разные вкусности писать и размещать на сайте. Но пока что самому платить приходится за хостинг и семью кормить надо. )


А сам говорил времени свободного навалом. В кредит писать как понимаю не будеш, ну а как насчет "потомки оценят, золотыми буквами впишут в историю...". Smile

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


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

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

Цитата:

ну а как насчет "потомки оценят, золотыми буквами впишут в историю

А я и не отказываюсь. Но хобби - это хобби, оно не работа и делается по настроению. Smile

Цитата:

А сам говорил времени свободного навалом

Времена меняются... Smile

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



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

СообщениеДобавлено: Вт Май 13, 2008 3:32 pm Ответить с цитатой Вернуться к началу

commenced писал(а):
Поэтому я и попросил рассказать подробнее, как подготовить список бумаг, как забить кол-во лотов, чтоб робот торговал одну систему для 1000 бумаг, но при этом сигналы и лоты для каждой остовались индивидуальными. Smile Что то ты раскрывал на сайте меха, но на своем родном ни слова. Sad


Доброго времени. Так вроде обсуждали этот вопрос.
Количество лотов и порчее можно засунуть в фундаментальные данные,я по крайней мере сделал так под работу в режиме Анализатора. Сигналы не пропадают, правда приходится жертвовать
временем на интервал срабатывания Анализатора (например 1 секунда), для меня это не принципиально.Если интересно поделюсь-не вопрос. У меня есть встречный вопрос- я написал строку для звукового оповещения -
AlertIf(Buy, "SOUND C:\\My Music\\ааа.WAV", "Buy", 1,12,0);
так сказать для работы в ручном режиме- не нужно мне пока 1000 акций в режиме роботаSmile
Так вот, срабатывает оповещение некорректно, иногда тупо повторяется на каждом проходе анализатора, несмотря на запрет оповещать на одном баре (цифирь 12), а иногда нормально оповещает
1 раз как и положенно. В чем дело не пойму.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Май 13, 2008 7:10 pm Ответить с цитатой Вернуться к началу

Цитата:
написал строку для звукового оповещения -
AlertIf(Buy, "SOUND C:\\My Music\\ааа.WAV", "Buy", 1,12,0);
так сказать для работы в ручном режиме- не нужно мне пока 1000 акций в режиме робота
Так вот, срабатывает оповещение некорректно, иногда тупо повторяется на каждом проходе анализатора, несмотря на запрет оповещать на одном баре (цифирь 12), а иногда нормально оповещает
1 раз как и положенно. В чем дело не пойму.

Я не знаю ибо звук из компа вообще удалил. Ибо нефиг Smile

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



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

СообщениеДобавлено: Вт Май 27, 2008 8:19 pm Ответить с цитатой Вернуться к началу

Олег, помоги пожалуйста, стоп и трейлинг не срабатывают(хотя трейлинг точно не знаю, до этого дело не дошло - как только увидел что стоп не сработал, позицию закрыл)
Что не так?

_________________
Алексей
Посмотреть профиль Отправить личное сообщение
диван



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

СообщениеДобавлено: Вт Май 27, 2008 8:40 pm Ответить с цитатой Вернуться к началу

Код:
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

СообщениеДобавлено: Вт Май 27, 2008 8:41 pm Ответить с цитатой Вернуться к началу

Код:
////// Убираем лишние сигналы /////////////

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

СообщениеДобавлено: Вт Май 27, 2008 8:44 pm Ответить с цитатой Вернуться к началу

Код:
////// Убираем лишние сигналы /////////////

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

СообщениеДобавлено: Вт Май 27, 2008 8:48 pm Ответить с цитатой Вернуться к началу

Неубирает:
////// Убираем лишние сигналы /////////////

Buy = LastValue(Buy);
Short = LastValue(Short);

она лишние сигналы, за это отвечат функция ExRem().

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen