Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Собираем робота своими руками (Ami + TWS) Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Окт 23, 2013 5:41 pm Ответить с цитатой Вернуться к началу

По моему нет.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Окт 25, 2013 8:30 pm Ответить с цитатой Вернуться к началу

проверку исполнения ордера в 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

СообщениеДобавлено: Ср Окт 30, 2013 6:06 pm Ответить с цитатой Вернуться к началу

странный феномен наблюдаю при этом условии:

Код:

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

СообщениеДобавлено: Ср Окт 30, 2013 10:32 pm Ответить с цитатой Вернуться к началу

именно скан или бар?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Ср Окт 30, 2013 10:42 pm Ответить с цитатой Вернуться к началу

000 писал(а):
именно скан или бар?

скан, хочу проверку погонять - жестко потестиовать.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Окт 30, 2013 10:49 pm Ответить с цитатой Вернуться к началу

Пиши в конце кода в статическую переменную. Есл в ней ноль, то пиши 1, если 1 то пиши 0. И в зависимости от того, что там шорт или ковер.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Ср Окт 30, 2013 11:12 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Ср Окт 30, 2013 11:19 pm Ответить с цитатой Вернуться к началу

Вроде нет.
Код:

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

СообщениеДобавлено: Чт Окт 31, 2013 1:00 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Чт Окт 31, 2013 6:46 am Ответить с цитатой Вернуться к началу

Да.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Чт Окт 31, 2013 1:03 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Да.


что ф-ция за значения такие возвращает-то?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Окт 31, 2013 9:05 pm Ответить с цитатой Вернуться к началу

Либо номер заявки в системе либо код ошибки. Код ошибки в роботе преобразуетя в текст и выводится в таблицу АА.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Ноя 01, 2013 5:04 pm Ответить с цитатой Вернуться к началу

Код:
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

СообщениеДобавлено: Пт Ноя 01, 2013 5:41 pm Ответить с цитатой Вернуться к началу

Как это не работает? У тебя косяк в другом месте.
Берем вот такой код.
Код:

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

СообщениеДобавлено: Пт Ноя 01, 2013 5:49 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Как это не работает? У тебя косяк в другом месте.
Берем вот такой код.

Пихаем в АА. Ставим последний бар и Explore. Каждый следующий прогон сигналы меняются местами.


вставил так же в код, в самый верх, Short и Cover меняются местами, но сигналы не проходят, покупка-продажа не совершается.

edit: о, заработало! благодарю)
забыл убрать:
Код:

Short = ExRem( Short, Cover );
Cover = ExRem( Cover, Short );

))
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen