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

Подробнее
3 года 1 мес. назад #3704 от Jhon31
Помогите правильно отредактировать скрипт Amibroker для выставления заявок в QUIK.Создаются файлы tri. и tro. , но Quik выдает ошибку! Требуется внести изменения в код генерации заявки transid ?!Что делать?


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");

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
3 года 1 мес. назад #3705 от admin
А какую именно ошибку вам выдает квик?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
3 года 1 мес. назад #3706 от Jhon31
Неправильно указан идентификатор транзакции " 0 "!
Думаю ошибка в последних строчках кода.

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;
}
}

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
3 года 1 мес. назад - 3 года 1 мес. назад #3719 от admin
Для начала удалите ваш .tri файл

В нем записана какая то транзакция с trans_id равным 0

Потом попробуйте заново запустить этот скрипт и посмотреть на результат



в любом случае я бы очень не советовал этот скрипт использовать в реальной торговле. И не тратить на него время.
Последнее редактирование: 3 года 1 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: admin