Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По моему нет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
проверку исполнения ордера в while-цикле я вроде как решил кое-что подкорректировав, но хотелось бы более аккуратное решение реализовать.
это можно сделать, приблизительно так:
Код: |
ibc = GetTradingInterface( "IB" );
//open SHORT-Position, if we do not have waiting orders
if( LastValue( Short ) && ibc.GetPendingList( 0, "" ) == "" )
|
в этом решении получается, что ib connector будет запущен всё это время.
edit: если в panding list висят error-orders или что-то ещё, а такие появляются в этой констукции очень часто, робот прекращает исполнять сигналы. парсить и выцеживать последний ордер в списке и проверять его не вижу смысла.
вернулся к while-циклу, подправив его снова. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
странный феномен наблюдаю при этом условии:
Код: |
Short = 1 ;
Cover = Ref ( Short, -1) ;
Sell = Buy = 0;
Short = ExRem( Short, Cover );
Cover = ExRem( Cover, Short );
|
когда делаю проверку исполнения ордера в while-цикле так:
Код: |
while( OrderStatus == "NotYetTransmitted" ||
OrderStatus == "PreSubmitted" ||
OrderStatus == "Pending" ||
OrderStatus == "PendingSubmit" ||
OrderStatus == "ApiPending" ||
OrderStatus == "Submitted" ||
OrderStatus == "Inactive" )
{
for (dummy=0; dummy<100; dummy++) ibc.Sleep(10); //some sec's sleeptime
//check status of transmitted order
OrderStatus = ibc.GetStatus( OrderId, True );
}
|
то за каждый скан происходит одна транзакция, т.е. short или cover, а когда проверяю так:
Код: |
while( 0 -Nz( ibc.GetPositionInfo( Ticker, "Position" ) ) < StrToNum( SharesToShort ) )
{
for (dummy=0; dummy<10; dummy++) ibc.Sleep(10); //some sec's sleeptime
//check status of transmitted order
OrderStatus = ibc.GetStatus( OrderId, True );
}
|
то за один скан происходит как short, так и cover.
в чём там дело?
edit:
дело в усовии, а точнее в Cover = Ref ( Short, -1) ;
как бы мне сделать: скан - short, скан - cover, ... ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
именно скан или бар? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
именно скан или бар? |
скан, хочу проверку погонять - жестко потестиовать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Пиши в конце кода в статическую переменную. Есл в ней ноль, то пиши 1, если 1 то пиши 0. И в зависимости от того, что там шорт или ковер. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Пиши в конце кода в статическую переменную. Есл в ней ноль, то пиши 1, если 1 то пиши 0. И в зависимости от того, что там шорт или ковер. |
так?
Код: |
stat = StaticVarSet( "trigger", 1 );
if(stat == 1)
{
Short = 1;
Cover = 0;
}else
{
Short = 0;
Cover = 1;
}
Sell = Buy = 0;
Short = ExRem( Short, Cover );
Cover = ExRem( Cover, Short );
//open SHORT-Position
if( LastValue( Short ) )
{
StaticVarSet( "trigger", 0 );
}
//cover SHORT-Position
if( LastValue( Cover ) )
{
StaticVarSet( "trigger", 1 );
}
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вроде нет.
Код: |
stat = Nz(StaticVarGet( "trigger" ));
if(stat == 1)
{
Short = 1;
Cover = 0;
}
else
{
Short = 0;
Cover = 1;
}
Sell = Buy = 0;
if( stat )
StaticVarSet( "trigger", 0 );
else
StaticVarSet( "trigger", 1 );
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Вроде нет.
Код: |
stat = Nz(StaticVarGet( "trigger" ));
if(stat == 1)
{
Short = 1;
Cover = 0;
}
else
{
Short = 0;
Cover = 1;
}
Sell = Buy = 0;
if( stat )
StaticVarSet( "trigger", 0 );
else
StaticVarSet( "trigger", 1 );
|
|
пасиб, погоняю на днях.
ещё такой вопрос, http://www.amisite.ru/afl/exp/files/Quik_Robot1.afl тут последняя строка:
Код: |
AddTextColumn(order, "Заявка", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);
|
что она показывает, т.е. что именно возвращает ф-ция AS_QUIK_SEND_SYNC_NEWORDER? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
что ф-ция за значения такие возвращает-то? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Либо номер заявки в системе либо код ошибки. Код ошибки в роботе преобразуетя в текст и выводится в таблицу АА. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
Код: |
stat = Nz(StaticVarGet( "trigger" ));
if(stat == 1)
{
Short = 1;
Cover = 0;
}
else
{
Short = 0;
Cover = 1;
}
Sell = Buy = 0;
if( stat )
StaticVarSet( "trigger", 0 );
else
StaticVarSet( "trigger", 1 ); |
не хочет эта конструкция работать. не идут сигналы. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как это не работает? У тебя косяк в другом месте.
Берем вот такой код.
Код: |
Filter = 1;
stat = Nz(StaticVarGet( "trigger" ));
if(stat == 1)
{
Short = 1;
Cover = 0;
}
else
{
Short = 0;
Cover = 1;
}
Sell = Buy = 0;
if( stat )
StaticVarSet( "trigger", 0 );
else
StaticVarSet( "trigger", 1 );
AddColumn(Short, "Short");
AddColumn(Cover, "Cover");
|
Пихаем в АА. Ставим последний бар и Explore. Каждый следующий прогон сигналы меняются местами. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Как это не работает? У тебя косяк в другом месте.
Берем вот такой код.
Пихаем в АА. Ставим последний бар и Explore. Каждый следующий прогон сигналы меняются местами. |
вставил так же в код, в самый верх, Short и Cover меняются местами, но сигналы не проходят, покупка-продажа не совершается.
edit: о, заработало! благодарю)
забыл убрать:
Код: |
Short = ExRem( Short, Cover );
Cover = ExRem( Cover, Short );
|
)) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|