Скрипт для выставления заявок в QUIK

Страницы: 1
RSS
Скрипт для выставления заявок в QUIK, Скрипт для выставления заявок в QUIK
 
Помогите правильно отредактировать скрипт для выставления заявок в QUIK.Создаются файлы tri. и tro. , но Quik выдает ошибку- "Неправильно указан идентификатор транзакции: "0"!"

Buy=Sell=Short=Cover=0;


sysN = 1; // номер системы (в данном примере) или номер бумаги (в примере ООО)
TickSize = 5; // шаг цены. у фьючерса на индекс РТС он равен 5.
LongSize = 5; // в лонг торгуем 5 контрактов
ShortSize = 3; // в шорт торгуем 3 контракта
TradePrice = LastValue( Close );
ticker = Name(); // код бумаги, типа RIZ0


quik = ParamToggle( "Autotrading", "No|Yes", defaultval=1 ); // вкл/выкл сброс транзакций в .tri файл
SysPos = StaticVarGet( ticker+sysN );
SysPos = Nz(SysPos);
zero = ParamTrigger("Обнуление позиции", "Click here to null a position");
if( zero )
{
SysPos = 0;
StaticVarSet( ticker+sysN+"order1", 0 );
StaticVarSet( ticker+sysN+"order2", 0 );
StaticVarSet( ticker+sysN+"order3", 0 );
StaticVarSet( ticker+sysN+"order4", 0 );
}


///////// Проверка исполнения транзакции \\\\\\\\\
for(i = 1; i <= 4; i++)
{
order = StaticVarGet( ticker+sysN+"order"+i );
order_st = NumToStr ( order, 1.0, False );
printf( "Ошибок в позе " + i + " = " + order_st + "\n" );
if( quik && order > 0 )
{
troFile = "C:/QUIK/Transactions/orders.tro";
trof = fopen(troFile, "r");


if(trof)
{
while(!feof(trof))
{
s = fgets(trof);
if(StrCount( s, order_st) > 0)
{
ststus = StrFind(s, "STATUS=");
ststus = StrMid( s, ststus+6, 1);
ststus_num = StrToNum(ststus);


if(ststus_num == 3)
{
ordn = StrFind(s, "ORDER_NUMBER=");
ordn = StrMid( s, ordn+12, 10);
PopupWindow( "Заявка, с биржевым номером " + ordn +
",\nуспешно зарегистрирована.",
"Заявка зарегистрирована!", timeout = 86400, left = -1, top = -1 );
StaticVarSet( ticker+sysN+"order"+i, 0 );
}
else
if(ststus_num != 3 AND ststus_num != 0)
{
PopupWindow( "Транзакция с номером " + order_st +
" не зарегистрирована.\n Ошибка № " + ststus,
"Транзакция не прошла!", timeout = 86400, left = -1, top = -1 );
StaticVarSet( ticker+sysN+"order"+i, -666 );
// если в окне Interpretation стоит цифра -666, значит транзакция не прошла
}
}
}
fclose(trof);
}
}}


//////////// Формируем транзакцию \\\\\\\\\\\\\
procedure save2tri(transid, tradedir, execution, Lots, fulldir)
{
fmkdir( "C:\\QUIK" );
fmkdir( "C:\\QUIK\\Transactions" );
triFile = "C:/QUIK/Transactions/trans.tri";
Account = "XXX"; // аккаунт на бирже
Classcode = "SPBFUT";


transid = NumToStr ( transid, 1.0, False );
f = fopen(triFile, "r");
if(f)
{
while(!feof(f))
{
s = fgets(f);
if(StrCount( s, transid) > 0)
{
for( i = 2; StrCount( s, transid) == 0; i++ )
{
PopupWindow( "Транзакция с номером " + transid +
" уже есть.\n Поделили на " + i,
"Повтор номера транзакции", timeout = 86400, left = -1, top = -1 );


transid = NumToStr( round( StrToNum(transid) / i ), 1.0, False);
}
}
}
fclose(f);
}


str =
"TRANS_ID=" + transid + "; " +
"PRICE=" + NumToStr(execution, format = 1.0, separator=False) + "; " +
"QUANTITY=" + NumToStr(Lots, format = 1.0, separator=False) + "; " +
"OPERATION=" + tradedir + "; " +
"CLASSCODE=" + Classcode + "; " +
"ACTION=" + "NEW_ORDER; " +
"TYPE=" + "L; " +
"SECCODE=" + ticker + "; " +
"ACCOUNT=" + Account + "; " +
"CLIENT_CODE="+ sysN + " " + fulldir + ";"; // комментарий


f = fopen(triFile, "a");
if(f)
{
fputs(str + "\n", f);
fclose(f);
}
}


if( quik )
{
//--------------- Cover ---------------//
if( Cover[BarCount-2] && SysPos == -1 )
{
transid = Now(format = 4) * 100 + 40 + sysN;
exprice = TradePrice + TickSize * 10;
save2tri(transid,"B",exprice, ShortSize, "Cover");
StaticVarSet( ticker+sysn+"order4", transid );
SysPos = 0;
}
//---------------- Buy ----------------//
if( Buy[BarCount-2] && SysPos == 0 )
{
transid = Now(format = 4) * 100 + 10 + sysN;
exprice = TradePrice + TickSize * 10;
save2tri(transid,"B",exprice, LongSize, "Buy");
StaticVarSet( ticker+sysn+"order1", transid );
SysPos = 1;
}
//---------------- Sell ---------------//
if( Sell[BarCount-2] && SysPos == 1 )
{
transid = Now(format = 4) * 100 + 20 + sysN;
exprice = TradePrice - TickSize * 10;
save2tri(transid,"S",exprice, LongSize, "Sell");
StaticVarSet( ticker+sysn+"order2", transid );
SysPos = 0;
}
//--------------- Short ---------------//
if( Short[BarCount-2] && SysPos == 0 )
{
transid = Now(format = 4) * 100 + 30 + sysN;
exprice = TradePrice - TickSize * 10;
save2tri(transid,"S",exprice, ShortSize, "Short");
StaticVarSet( ticker+sysn+"order3", transid );
SysPos = -1;
}
}


StaticVarSet( ticker+sysN, SysPos );
printf("Текущая позиция: " + WriteVal( SysPos, 1.0) + ". \n");
 
Здравствуйте!
Проблема заключается в том, что у Вас параметр TRANS_ID ("Уникальный идентификационный номер заявки") в скрипте принимает значение, равное "0".
Минимально возможное значение, которое может принимать данный параметр, является "1".
Проверьте, в каком месте параметр принимает нулевое значение.

Цитата
str =
"TRANS_ID=" + transid + "; " +
"PRICE=" + NumToStr(execution, format = 1.0, separator=False) + "; " +
"QUANTITY=" + NumToStr(Lots, format = 1.0, separator=False) + "; " +
"OPERATION=" + tradedir + "; " +
"CLASSCODE=" + Classcode + "; " +
"ACTION=" + "NEW_ORDER; " +
"TYPE=" + "L; " +
"SECCODE=" + ticker + "; " +
"ACCOUNT=" + Account + "; " +
"CLIENT_CODE="+ sysN + " " + fulldir + ";"; // комментарий
QUIK clients support
 
Quik требует идентификатор транзакции отличный от 0. Нужно ввести правильный sysN. Как sysN определить?
 
Цитата
Jhon501 написал:
Quik требует идентификатор транзакции отличный от 0. Нужно ввести правильный sysN. Как sysN определить?
Добрый день.
Как уже сказал наш коллега, указываете любое значение начиная от 1.
Страницы: 1
Читают тему (гостей: 4)
Наверх