Торговый автомат Амиброкер+Квик

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

pip-sus

Member
очччень стьюпид вопрос

поставил на РТС фуч робота...он начал писать (точнее Квик)
TRANS_ID=3086342328;STATUS=4;TRANS_NAME="Ввод заявки"; DESCRIPTION="[FORTS] Цена не кратна минимальному шагу цены.";
в ответ на просьбы ами

TRANS_ID=31151141900;PRICE=137502;QUANTITY=1;OPERATION=B;CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=RIM0; ACCOUNT=SPBFUT00188;

Вижу по цене 137502 что она не кратна минимальному шагу...в ами поставил тиксайз=5....не помогло...блин что-то совсем не могу сообразить что кому еще написать нужно
 

Karlitos

New member
Re: очччень стьюпид вопрос

поставил на РТС фуч робота...он начал писать (точнее Квик)

Вижу по цене 137502 что она не кратна минимальному шагу...в ами поставил тиксайз=5....не помогло...блин что-то совсем не могу сообразить что кому еще написать нужно
В шапке надо поставить.
Код:
StepPr=5;      // минимальный шаг цены контракта
А в нижней части кода должно быть так.
Код:
 if (ifbuy) { 
    price= StepPr*int((BuyPrice[BarCount-1]+Otstup)/StepPr);
 

nightcarrier

New member
Здравствуйте. Посмотрев материалы форума, хотел предложить альтернативный подход к созданию автомата Ami+Quik:
1. Не формировать транзакцию в Ами, а просто отправлять в текстовый файл имя тикера (1-я строчка) с соответствующей пометкой (напр. 1=Buy, -1=Short, 2=Cover, -2=Sell – это 2-я строчка).
2. Дальше работает прога на Qpile: определение размера позиции, надбавка к цене последней сделки (=имитация рыночной заявки), выставление заявки (send_transaction). Ему это намного проще по определению: имеется прямой доступ ко всем показателям счета, наличия позиций и т.д.
3. Периодический запуск Ами осуществляется не через индикатор а через скан бэктестера (как уже обсуждалось выше).
4. Обратная связь Квика с Ами также через текстовый файл, в который Qpile записывает размер позиции и время последней сделки в формате Ами.
Преимуществом такого подхода может стать большая свобода при торговле портфелем бумаг плюс варьирование размера позиции.

Хотя, конечно, у взаимодействия 2-х программ есть и минусы. Кому нибудь создавала проблему скорость передачи данных из Квика в Ами? Если делать полноценного робота для интрадей, даже на сравнительно крупные таймфреймы - может помешать.

Предыстория: сделал робота, торгующего 15 минутные свечки. Технические решения - с форума (работает через АА, сигналит на открытии свечи, по данным с предыдущего бара).

Все бы хорошо, но, как правило, первая заявка уходит секунд через 10 после начала свечи. То есть не в 11:00:03 (хотя бы...), а в 11:00:10 например. Грешил на Квик с Купайлом, потом замерил - действительно свечка начинает формироваться в Ами через несколько секунд после начала интервала. Первая мысль, естественно, - не было сделок. Ан нет! По тикам с Финама - были сделки в первые же секунды. Почему в интрадее думать о секундах свысока не стоит вполне понятно - любой скользяк = деньги из твоего кармана.

Дока на Ами (и на Квик тоже) вопросы увеличения скорости передачи особо не развивает. Сам думаю проблему решать:
А) Уменьшением размера базы в Ами до минимального уровня, либо
Б) Снижением количества получаемых Квиком бумаг.
Прошу откликнуться если кто уже сталкивался с аналогичной проблемой.
 

Tikubase

New member
Размер заявки!

Всем привет!
Меху отдельный респект за прогу, пользуюсь, реально облегчила жизнь, но есть один косяк.
У моей системы переменный объем сделки, то есть размер заявки рассчитывается в теле системы, до надписи "руками не трогать". Лоты рассчитываются правильно, проверял, но когда робот формирует заявку и отправляет в три-файл, лоты не вернные в 70% случаев, бывают очень сильные отклонения. Я иногда руками добиваю, но хочу исправить. Все что мог перепробовал не помогает.
Кто еще сталкивался с такими проблемами?
 

leroy87

New member
Такой вопрос.

Какой функция в Ami можно записывать в файл? Из кода робота я не смог этого вытащить пока.

И еще вопрос по поводу систем, можно ли в качестве индикатора использовать другой инструмент. То есть зайти в ГМК если Газпром выше... Поддерживает или Ami такое или как в Метастоке только через запись в файл?
 

ramer

New member
Re: Размер заявки!

Всем привет!
Меху отдельный респект за прогу, пользуюсь, реально облегчила жизнь, но есть один косяк.
У моей системы переменный объем сделки, то есть размер заявки рассчитывается в теле системы, до надписи "руками не трогать". Лоты рассчитываются правильно, проверял, но когда робот формирует заявку и отправляет в три-файл, лоты не вернные в 70% случаев, бывают очень сильные отклонения. Я иногда руками добиваю, но хочу исправить. Все что мог перепробовал не помогает.
Кто еще сталкивался с такими проблемами?
Как я понял у тебя проблемы с ценой. Если так, то я делаю по фьючу на РТС так:


//////////// Формируем транзакцию.//////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
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); ///// выставление заявки кратное 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);

//////// buy //////////
Ch=С;

if (ifbuy) {
price=Ch[BarCount-1]+10; /// + 10 пунктов к рыночной
makeandsave("B",1,price);
}
if (ifcover) {
price=Ch[BarCount-1]+10;
makeandsave("B",4,price);
}
///////// sell ///////////
CL=С;

if (ifsell) {
price=Cl[BarCount-1]-10;
makeandsave("S",2,price);
}
if (ifshort) {
price=Cl[BarCount-1]-10;
makeandsave("S",3,price);
}
}

Хотя можно и другой вариант:


//////// buy //////////
Ch=(C+O)/2;

if (ifbuy) {
price=Ch[BarCount-1];
makeandsave("B",1,price);
}
if (ifcover) {
price=Ch[BarCount-1];
makeandsave("B",4,price);
}
///////// sell ///////////
CL=(C+L)/2;

if (ifsell) {
price=Cl[BarCount-1];
makeandsave("S",2,price);
}
if (ifshort) {
price=Cl[BarCount-1];
makeandsave("S",3,price);
}
}
 

Arahan

New member
Подскажите, пожалуйста, в чем может быть причина очень долгого выставления заявок роботом. В связи с чем, идет дикое проскальзывание. Запустил простенькую системку, (просто пересечение скользящих), вот что получилось:

Было три входа

Сделка должна произойти на закрытии свечи, то есть по факту поступления сигнала.

Закрытие свечи 22:40 заявки дошли только в 22:40:07 (Семь секунд задержки)
Закрытие свечи 22:55 заявки дошли только в 22:55:04
Закрытие свечи 23:35 заявки дошли только в 23:35:13

Еще заметил, сильные тормоза при выводе данных из Квика в Ами. В квике график изменился в нутрии свечи, а в Амиброкере он меняется только секунды через 2-3. А некоторые изменения цены в нем вообще не отображаются. Они как бы перескакиваются. Может в этом проблема?
 

Arahan

New member
А есть еще какие-то варианты? Или может быть можно как-то ускорить выставление заявок? Свой скрипт, к сожалению не потяну написать(
 

umberto99

New member
всем привет.
хочу поблагодарить всех за эту тему. очень много узнал полезного. особенно большое спасибо mehanizator'у.
подскажите, пожалуйста, как реализовать в AFL такое условие - продавать если цена sell >= цене buy, на примере вот этих простейших правил

Код:
Buy =  Cross(C, MA(C, 5));
Sell = Cross(MA(C, 5), C);
 

nightcarrier

New member
сильные тормоза при выводе данных из Квика в Ами. В квике график изменился в нутрии свечи, а в Амиброкере он меняется только секунды через 2-3. А некоторые изменения цены в нем вообще не отображаются. Они как бы перескакиваются. Может в этом проблема?
Попробуйте изменить настройки Preferences, вкладка Intraday, "Time Refresh..." на меньшее количество секунд
 

umberto99

New member
всем привет.
хочу поблагодарить всех за эту тему. очень много узнал полезного. особенно большое спасибо mehanizator'у.
подскажите, пожалуйста, как реализовать в AFL такое условие - продавать если цена sell >= цене buy, на примере вот этих простейших правил

Код:
Buy =  Cross(C, MA(C, 5));
Sell = Cross(MA(C, 5), C);
кто нибудь может подсказать? как их этих логических выражений вытащить цену покупки и продажи?
 

mehanizator1

New member
ну если просто цену вытащить то функция valuewhen
но то что вы хотите сделать так просто не реализуется, надо делать пошаговый перебор элементов массивов.
 

Doctor

New member
Добрый день. Сильно меня не бейте, если задам вопрос не совсем по теме. Вопрос - можно ли прописать в данном роботе правило работы по параболику? Т.е. продажа - когда появляется сигнал сверху, покупка - когда сигнал снизу. Хотелось бы протестировать такого робота на истории, для меня необязательно, что бы заявки выставлялись в квик. Спасибо.
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху