Торговый робот на связке Quik — AmiBroker
Для тех кто юзает робота от механизатора
http://www.russian-trader.ru/articles/automate.php
хочу поделиться парой секретов которые нашел сам.
Многие замечали что робот перестает работать если Ами свернуть в трей.
Так вот этим страдает 5-я версия. 4-я работает нормально.
Для пятой версии в код робота вставляем строку:
RequestTimedRefresh(1,False); // 1 — пререзапускает чарт каждую секунду, False — делает это даже при сворачивании в трей
Кстати в обоих версиях робот не работает если чарт не на активной закладке.
Если вы используете функцию Scan — от бэктестера, то она работает только если робот один и загружен в бэктестер.
Если роботов несколько то возникает другая проблема.
В функции savetrifile(stransid,sstr) операции проверки наличия записи в файле и добавления новой записи разделены по времени и при работе нескольких роботов заявки могут или пропадать или добавляться много раз.
Для решения этой проблемы я немного модифицировал процедуру:
procedure savetrifile(stransid,sstr)
{
f = 0; n = 100; found=1; // found=1 добавлено по умолчанию, чтобы в случае неудачи открытия файла вторая часть процедуры не добавляла повторно ту же заявку.
while(n > 0 AND f == 0) // это просто несколько попыток открыть файл, если в данный момент он открыт другим роботом или квиком
{
f=fopen(FileName,«r»);
n--;
}
if(f)
{
found = 0;
while(!feof(f))
{
s = fgets(f);
if(StrFind( s, stransid) > 0) found = 1;
}
fclose(f);
}
if (found == 0)
{
f = 0; n = 100;
while(n > 0 AND f == 0)
{
f = fopen(FileName, «a»);
n--;
}
if (f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}
Загружаете тиковые данные в AMI или минутки?
Выполняете ли тест на статических данных или же подаете на вход динамические данные?
Вопросы не праздные, т.к. сам разбираюсь с AMI и пытаюсь
понять как правильно симулировать торговлю на исторических данных.