Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
nemoy писал(а): |
а как быть если все доливки зациклены математической формулой на предыдущие доливки, а не простым условием как в примере? и это всё приправлено такими же отливками
|
Все просто.
Есть сигналы на доливку - отливку. Они должны работать только когда поза открыта. Иногда в зависимости от этого меняется и сайз.
Но роботу всегда известна текущая позиция в рынке. На основе этого и поступившего сигнала он запросто может "принимать решение" как быть с очередным сигналом. Я там очень старательно и подробно написал. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Пн Окт 13, 2014 5:11 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
nemoy
Зарегистрирован: 05.10.2014
Сообщения: 29
|
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
|
000 писал(а): |
nemoy писал(а): |
а как быть если все доливки зациклены математической формулой на предыдущие доливки, а не простым условием как в примере? и это всё приправлено такими же отливками
|
Все просто.
Есть сигналы на доливку - отливку. Они должны работать только когда поза открыта. Иногда в зависимости от этого меняется и сайз.
Но роботу всегда известна текущая позиция в рынке. На основе этого и поступившего сигнала он запросто может "принимать решение" как быть с очередным сигналом. Я там очень старательно и подробно написал. |
я правильно понимаю по аналогии роботу с доливками, что sigScale не будет в коде робота. или я не в ту сторону копаю? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
sigScale в роботе не надо. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Apple
Зарегистрирован: 24.09.2014
Сообщения: 39
|
Олег, привет я тут застопорилась в блоке файла для управления 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
|
Не, надо не так
Тут
Код: |
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
|
Олег, еще раз здравствуй.
Возвращаюсь к роботу под Альфу. Изначальный вариант не работает. Перечитал ваши диалоги с 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
|
Можешь сделать мне демо в Альфе? Хотел сам, но они там слишком много хотят... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
Можешь сделать мне демо в Альфе? Хотел сам, но они там слишком много хотят... |
а каким образом? у них вроде по демке нельзя получать котировки.
Создал у себя в кабинете демо счет. Им можно оперировать только на ммвб. Как тебе передать к нему доступ?) не догоняю |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Мне котировки не нужны. Мне надо возможность отправить заявку.
Я у них на сайте нашел только вот такой способ
http://www.alfadirect.ru/reg/?page=check&pg=new&demo=Y
Но они там хотят телефон. Потом заспамят нафиг, а левой симки у меня сечас нет...
Тебе же нужна помощь? Я готов разобраться и сделать нормального робота, но мне нужен доступ к альфе. Придумай что нибудь.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
Мне котировки не нужны. Мне надо возможность отправить заявку.
Я у них на сайте нашел только вот такой способ
http://www.alfadirect.ru/reg/?page=check&pg=new&demo=Y
Но они там хотят телефон. Потом заспамят нафиг, а левой симки у меня сечас нет...
Тебе же нужна помощь? Я готов разобраться и сделать нормального робота, но мне нужен доступ к альфе. Придумай что нибудь.... |
Полазил по форуму у них. При деме ничего нельзя делать, только ознакомиться с терминалом. Раньше можно было торговать в деме. Потом они это отключили.
Есть возможность для владельцев счетов сделать демо. Я сделал, но как дать доступ другому человеку не знаю. Думаю это невозможно. Но попробую спросить на форуме |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ок. Пробуем разобраться так.
Значит вот этот код
Код: |
//это код для альфы со скриптом
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
|
Доброе утро Олег.
Нажимаю эксплоре и заявка отсылается. Ниже в таблице (ты ее имеешь в виду?) отображается
FORTS.USD-9.15 28.07.2015 10:05:00 152914904 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ясно. Вот это место у тебя
Код: |
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
|
И убери 3 снизу строку
Вот эту
Код: |
AddTextColumn(text, "Соединение", 1.2, colorDefault, color, 170); |
Совсем убери. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|