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


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

СообщениеДобавлено: Пн Окт 13, 2014 2:33 pm Ответить с цитатой Вернуться к началу

nemoy писал(а):

а как быть если все доливки зациклены математической формулой на предыдущие доливки, а не простым условием как в примере? и это всё приправлено такими же отливками

Все просто.
Есть сигналы на доливку - отливку. Они должны работать только когда поза открыта. Иногда в зависимости от этого меняется и сайз.

Но роботу всегда известна текущая позиция в рынке. На основе этого и поступившего сигнала он запросто может "принимать решение" как быть с очередным сигналом. Я там очень старательно и подробно написал.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.

Последний раз редактировалось: 000 (Пн Окт 13, 2014 5:11 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nemoy



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

СообщениеДобавлено: Пн Окт 13, 2014 4:12 pm Ответить с цитатой Вернуться к началу

Apple писал(а):
MICEX_SHR.LKOH и в альфе выбирать из МБ ЦК а не ММВБ
так я тоже пробовал. не грузит.
пробовал забив на экспорт подать заявку на покупку. на фортсе заявку ставит на мб(ммвб) нет
Код:


//это код для альфы со скриптом
Filter = 1;

Period      = 60*5;                                   
Account     = "00000-000";                             
PlaceCode   = "MICEX_SHR";// (FORTS или MICEX_SHR)
PCode      = "lkoh";
Dat         = Now(1) + " 23:45";

lotsS = 1;
price = 2000;


EnableScript("vbscript");   
<%

Dim AD
Set ADObj = CreateObject("ADLite.AlfaDirect")

Account = AFL("Account")
PlaceCode = AFL("PlaceCode")
PCode = AFL("PCode")
Dat = AFL("Dat")
function Order(vblots,vbprice,bs)
   OrderNo = ADObj.CreateLimitOrder(Account, PlaceCode, PCode, Dat, "sample order", "RUR", bs, vblots, vbprice, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, 10)
   if (OrderNo = 0) Then
      Msg = AD.LastResultMsg
      Order = Msg
   else
      Order = CStr(OrderNo)
   End if
     
End function
%>

script = GetScriptObject();
OrderInf = script.Order (lotsS, price, "B");

AddTextColumn(OrderInf, "Сообщение", 1.0);
Посмотреть профиль Отправить личное сообщение
nemoy



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

СообщениеДобавлено: Пн Окт 13, 2014 7:08 pm Ответить с цитатой Вернуться к началу

000 писал(а):
nemoy писал(а):

а как быть если все доливки зациклены математической формулой на предыдущие доливки, а не простым условием как в примере? и это всё приправлено такими же отливками

Все просто.
Есть сигналы на доливку - отливку. Они должны работать только когда поза открыта. Иногда в зависимости от этого меняется и сайз.

Но роботу всегда известна текущая позиция в рынке. На основе этого и поступившего сигнала он запросто может "принимать решение" как быть с очередным сигналом. Я там очень старательно и подробно написал.
я правильно понимаю по аналогии роботу с доливками, что sigScale не будет в коде робота. или я не в ту сторону копаю?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Окт 13, 2014 9:23 pm Ответить с цитатой Вернуться к началу

sigScale в роботе не надо.

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



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

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

Олег, привет я тут застопорилась в блоке файла для управления pos.
Как функцию order, которая сидит внутри скрипта запихать сюда:
if(StrToNum(order) > 100)?

отправка ордера у меня выглядит так, т.е. каждый раз заново вызываю order. функция возвращает номер транзакции, но Quik_Robot пустой.

Код:

if ( TimeFrame == Interval() )
{
    if ( Buy1[BarCount-1] AND pos == 0 )
    {
        str = str + "Buy";
        sd = "Buy";
        script = GetScriptObject();
        OrderNum = script.Order ( "B", round( C[BarCount-1] ) - Otstup, Lots )
        AS_WRITE_FILE( "log.quik", str );
    }
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Окт 14, 2014 8:36 pm Ответить с цитатой Вернуться к началу

Не, надо не так
Тут
Код:
if ( TimeFrame == Interval() )
{
    if ( Buy1[BarCount-1] AND pos == 0 )
    {
        str = str + "Buy";
        sd = "Buy";
        script = GetScriptObject();
        OrderNum = script.Order ( "B", round( C[BarCount-1] ) - Otstup, Lots )
        AS_WRITE_FILE( "log.quik", str );
    }

Не надо вызывать script.Order ( "B", round( C[BarCount-1] ) - Otstup, Lots )
Вместо этого вызывай процедуру
procedure orders(bs, pr, Lot)
в которой уже вызывается функция script.Order

И далее все по примеру.

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



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

СообщениеДобавлено: Пн Июл 27, 2015 6:36 pm Ответить с цитатой Вернуться к началу

Олег, еще раз здравствуй.

Возвращаюсь к роботу под Альфу. Изначальный вариант не работает. Перечитал ваши диалоги с Apple, пытаюсь сделать, но не получается.

код, который ты просил Apple прогнать (Вс Окт 12, 2014 12:52 am) у меня так же работает, заявка в Альфу уходит, но вот изменить квиковский робот не получается.
Вот мой код, который я исправил, посомтри пожалуйста? Торговля Сишкой.

Код:

Filter = 1;

TimeFrame      = 60*5;                                   
Account     = "33333-000";                             
PlaceCode   = "FORTS";// (FORTS ??? MICEX_SHR)
PCode      = "USD-9.15";
Dat         = Now(1) + " 23:45";

Tickers = "FORTS.USD-9.15";             // торгуемые символы через запятую без пробелов. Для контроля ошибок. Так, как они называются в Ами
/////////////

///////////////
// задаем размер лотов, коды и отступ для разных символов
/////////////

if(Name() == "FORTS.USD-9.15") {      //Символ как он называется в Ами
   PCode      = "USD-9.15";             
   PlaceCode   = "FORTS";
   Lots         = 1;
   TickS         = 1;               // Минимальный шаг цены торгуемой бумаги
   Otstup         = 20;               // Заявка будет выставлена хуже текущей цены на Otstup рублей
}
else if(Name() == "SBER") {   //Символ как он называется в Ами
   SecCode         = "SBER03";            
   Class         = "EQBR";
   Lots         = 2;
   TickS         = 0.01;               // Минимальный шаг цены торгуемой бумаги
   Otstup         = 1;               // Заявка будет выставлена хуже текущей цены на Otstup рублей
}


EnableScript("vbscript");   
<%

Dim AD
Set ADObj = CreateObject("ADLite.AlfaDirect")

Account = AFL("Account")
PlaceCode = AFL("PlaceCode")
PCode = AFL("PCode")
Dat = AFL("Dat")
function Order(vblots,vbprice,bs)
   OrderNo = ADObj.CreateLimitOrder(Account, PlaceCode, PCode, Dat, "sample order", "RUR", bs, vblots, vbprice, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, 10)
   if (OrderNo = 0) Then
      Msg = AD.LastResultMsg
      Order = Msg
   else
      Order = CStr(OrderNo)
   End if
       
End function
%>



//////////////Система///////////////

Buy1= 1;
Short1= Cross(MA(C,3) , C);
Cover1 = Buy1;
Sell1 = Short1;


///////////Конец Системы////////////

Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);

////////////////////////////////////

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + "  " + Name();
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");

///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");

///////////    Функции  ////////////

procedure orders(bs, pr, Lot)
{
   connection = 0;

   
   if(connection == 1)
   {
      order = script.Order (lotsS, price, "B");

   }

   if(StrToNum(order) > 100)
   {
      iz = "исполнена";
      coloriz = colorGreen;
      str = str + "  заяка исполнена" + " ответ сервера=" + order;
      if(pos > 0 AND bs == "S")                // закрытие лонга
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
      else if(pos == 0 AND bs == "S")         // шорт
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
      else if(pos < 0 AND bs == "B")          // закрытие шорта
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
      else if(pos == 0 AND bs == "B")       // лонг
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
      str = str + "  позиция на момент исполнения " + pos;
   }
   else {
      iz = "не исполнена";
      coloriz = colorRed;
      str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
   }
}

////////// конец Функций //////////

if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-1] AND pos == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", round(C[BarCount-1]) + Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell1[BarCount-1] AND pos > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short1[BarCount-1] AND pos == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", round(C[BarCount-1]) - Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover1[BarCount-1] AND pos < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
}
else if(TimeFrame != Interval()) {
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}

SetOption( "NoDefaultColumns", 1 );
AddTextColumn(Name(), "Символ", 1.0, colorDefault, colorDefault, 60);
AddColumn( C[BarCount-1], "Последняя цена", 1.2, colorDefault, colorDefault, 100 );
AddColumn( AS_READ_PARAM("Quik_Robot", Name(), "pos"), "Позиция", 1.0, colorDefault,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") > 0, colorGreen,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") < 0, colorRed, colorDefault)), 60);
AddTextColumn(sd, "Сигнал", 1.0, colorDefault, colorDefault, 60);
AddTextColumn(text, "Соединение", 1.2, colorDefault, color, 170);
AddTextColumn(iz, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order, "Заявка", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);


Пишет "Buy" и "заявка не исполнена". В файле лога пишет:
27.07.2015 17:55:19 FORTS.USD-9.15 Buy заяка НЕ исполнена ответ сервера=
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 27, 2015 7:05 pm Ответить с цитатой Вернуться к началу

Можешь сделать мне демо в Альфе? Хотел сам, но они там слишком много хотят... Smile

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



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

СообщениеДобавлено: Пн Июл 27, 2015 7:54 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Можешь сделать мне демо в Альфе? Хотел сам, но они там слишком много хотят... Smile

а каким образом? у них вроде по демке нельзя получать котировки.

Создал у себя в кабинете демо счет. Им можно оперировать только на ммвб. Как тебе передать к нему доступ?) не догоняю
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 27, 2015 9:20 pm Ответить с цитатой Вернуться к началу

Мне котировки не нужны. Мне надо возможность отправить заявку.
Я у них на сайте нашел только вот такой способ
http://www.alfadirect.ru/reg/?page=check&pg=new&demo=Y
Но они там хотят телефон. Потом заспамят нафиг, а левой симки у меня сечас нет...

Тебе же нужна помощь? Я готов разобраться и сделать нормального робота, но мне нужен доступ к альфе. Придумай что нибудь....

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



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

СообщениеДобавлено: Пн Июл 27, 2015 9:50 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Мне котировки не нужны. Мне надо возможность отправить заявку.
Я у них на сайте нашел только вот такой способ
http://www.alfadirect.ru/reg/?page=check&pg=new&demo=Y
Но они там хотят телефон. Потом заспамят нафиг, а левой симки у меня сечас нет...

Тебе же нужна помощь? Я готов разобраться и сделать нормального робота, но мне нужен доступ к альфе. Придумай что нибудь....


Полазил по форуму у них. При деме ничего нельзя делать, только ознакомиться с терминалом. Раньше можно было торговать в деме. Потом они это отключили.
Есть возможность для владельцев счетов сделать демо. Я сделал, но как дать доступ другому человеку не знаю. Думаю это невозможно. Но попробую спросить на форуме
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 27, 2015 11:26 pm Ответить с цитатой Вернуться к началу

Ок. Пробуем разобраться так.
Значит вот этот код
Код:

//это код для альфы со скриптом
Filter = 1;

Period      = 60*5;                                   
Account     = "00000-000";                             
PlaceCode   = "FORTS";// (FORTS или MICEX_SHR)
PCode      = "SBER-12.14";
Dat         = Now(1) + " 23:45";

lotsS = 1;
price = 2000;


EnableScript("vbscript");   
<%

Dim AD
Set ADObj = CreateObject("ADLite.AlfaDirect")

Account = AFL("Account")
PlaceCode = AFL("PlaceCode")
PCode = AFL("PCode")
Dat = AFL("Dat")
function Order(vblots,vbprice,bs)
   OrderNo = ADObj.CreateLimitOrder(Account, PlaceCode, PCode, Dat, "sample order", "RUR", bs, vblots, vbprice, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, 10)
   if (OrderNo = 0) Then
      Msg = AD.LastResultMsg
      Order = Msg
   else
      Order = CStr(OrderNo)
   End if
     
End function
%>

script = GetScriptObject();
OrderInf = script.Order (lotsS, price, "B");

AddTextColumn(OrderInf, "Сообщение", 1.0);

у тебя работает.
Что он пишет в таблице АА ???

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



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

СообщениеДобавлено: Вт Июл 28, 2015 10:11 am Ответить с цитатой Вернуться к началу

Доброе утро Олег.
Нажимаю эксплоре и заявка отсылается. Ниже в таблице (ты ее имеешь в виду?) отображается
FORTS.USD-9.15 28.07.2015 10:05:00 152914904
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июл 28, 2015 2:38 pm Ответить с цитатой Вернуться к началу

Ясно. Вот это место у тебя
Код:
procedure orders(bs, pr, Lot)
{
   connection = 0;

   
   if(connection == 1)
   {
      order = script.Order (lotsS, price, "B");

   }


Измени на вот так
Код:

procedure orders(bs, pr, Lot)
{
   order = script.Order (lotsS, price, "B");

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


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

СообщениеДобавлено: Вт Июл 28, 2015 2:41 pm Ответить с цитатой Вернуться к началу

И убери 3 снизу строку
Вот эту
Код:
AddTextColumn(text, "Соединение", 1.2, colorDefault, color, 170);

Совсем убери.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen