Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 След. |
Автор |
Сообщение |
BFG
Зарегистрирован: 17.03.2014
Сообщения: 17
|
Спасибо!
Я сам не прогреммер, но по аналогии внес изменения в твой код доливки, в целях экономии твоего времени выделил жирным то, что я поменял, посмотри плиз при возможности:
Код: |
Filter = 1;
TimeFrame = 60*15; // таймфрейм в секундах.
Account = "NL0011100043"; // Номер счета
Client_Code = "38000"; // Код Клиента
Quik = "C:\\QUIK"; // путь к Квику
Tickers = "LKOH,SBER"; // торгуемые символы через запятую без пробелов. Для контроля ошибок. Так, как они называются в Ами
/////////////
///////////////
// задаем размер лотов, коды и отступ для разных символов
/////////////
if(Name() == "LKOH") { //Символ как он называется в Ами
SecCode = "LKOH";
Class = "EQBR";
Lots = 12;
TickS = 0.1; // Минимальный шаг цены торгуемой бумаги
Otstup = 20; // Заявка будет выставлена хуже текущей цены на Otstup рублей
[b]LimS = 6; // число лотов для фикса по покупке
LimC = 6; // число лотов для фикса по шорту[/b]
}
else if(Name() == "SBER") { //Символ как он называется в Ами
SecCode = "SBER03";
Class = "EQBR";
Lots = 12;
TickS = 0.01; // Минимальный шаг цены торгуемой бумаги
Otstup = 1; // Заявка будет выставлена хуже текущей цены на Otstup рублей
[b]LimS = 6; // число лотов для фикса по покупке
LimC = 6; // число лотов для фикса по шорту[/b]
}
//////////////Система///////////////
Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));
[b] for(i=BarCount-1;i>1;i--)
{
if(Buy[i] == 1)
{
entry = C[i];
sig = "BUY";
targetS = entry + (entry * .0092);
bars = i;
i = 0;
}
if(Sell[i] == 1)
{
sig = "SELL";
entry = C[i];
targetC = entry - (entry * .0112);
bars = i;
i = 0;
}
}
Sell2 = Close>=targetS;
Cover2 = Close<=targetC; [/b]
///////////Конец Системы////////////
Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);
[b]
Sell2 = Ref(Buy2, -1);
Cover2 = Ref(Short2, -1); [/b]
////////////////////////////////////
text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + " " + Name();
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");
SdID = AS_READ_PARAM("Quik_Robot", Name(), "BarID");
BarID = LastValue(Ref(DayOfWeek()*1000000 + TimeNum(), -1));
///////////// проверка наличия символа в списке для торговли ////////////////
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;
QC = AS_QUIK_CONNECT(Quik);
if (QC == 1)
{
connection = 1;
text = "Есть соединение с сервером";
Color = colorGreen;
}
else if (QC == -1)
{
text = "нет соединения с квиком";
Color = colorRed;
}
else if (QC == -2)
{
text = "нет соединения с сервером";
Color = colorRed;
}
else
{
text = "фигня какая то";
Color = colorRed;
}
if(connection == 1)
{
order = AS_QUIK_SEND_SYNC_NEWORDER( "123", // OrderID - Любые цифры
Account,
Client_Code,
"L", // Тип заявки M-рыночная, L-лимитированная
Class,
SecCode,
bs,
pr,
Lot);
}
if(StrToNum(order) > 100)
{
iz = "исполнена";
coloriz = colorGreen;
str = str + " заяка исполнена" + " ответ сервера=" + order;
if(pos == 0 AND bs == "S") // шорт
{
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);
}
else if(pos < 0 AND bs == "B") // закрытие шорта
{
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);
}
else if(pos == 0 AND bs == "B") // лонг
{
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);
}
else if(pos > 0 AND bs == "S") // закрытие лонга
{
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);
}
else if[b](pos = Lots AND bs == "S") // отливка от покупки (частичный фикс позы ) [/b] -- здесь не знаю как условие правильно написать
{
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", [b]pos -LimS); [/b]
AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", BarID);
}
else if[b](abs(pos) = Lots AND bs == "B") // отливка от шорта (частичный фикс позы )[/b] -- здесь не знаю как условие правильно написать
{
AS_WRITE_PARAM("Quik_Robot", Name(), "pos",[b] pos + LimC); [/b]
AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", BarID);
}
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([b]Sell2[BarCount-1] AND pos =Lots AND BarID != SdID)[/b] -- здесь не знаю как условие правильно написать
{
str = str +[b] " Sell (отливка)"; [/b]
sd = [b] "SellOut";[/b]
orders[b]("S", round(C[BarCount-1]) - Otstup, LimS); [/b]
AS_WRITE_FILE("log.quik", str);
}
else if([b]Cover2[BarCount-1] AND abs(pos) =Lots AND BarID != SdID)[/b] -- здесь не знаю как условие правильно написать
{
str = str + [b] " Cover (отливка)"; [/b]
sd = [b] "CoverOut";[/b]
orders [b]("B", round(C[BarCount-1]) + Otstup,LimC); [/b]
AS_WRITE_FILE("log.quik", str);
}
}
else if(TimeFrame != Interval()) {
PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
"ошибка", timeout = 5, left = -1, top = -1 );
} |
|
Последний раз редактировалось: BFG (Вт Апр 15, 2014 3:18 pm), всего редактировалось 7 раз(а) |
|
Посмотреть профиль Отправить личное сообщение |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
Залезь в настройки и сделай так |
Привет!
Сделал как на картинке, все равно заявки посреди бара отправляются( |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Время заявок дай. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
Время заявок дай. |
Исполнение получается каждые 15 минут, но с момента запуска робота. Если запустить в 10:04, то заявки будут идти в 10:19,10:34 и т. Д. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
У тебя Ами не правильно собирает свечи.
Посмотри на графике 15 минутки. Какое время у свечек? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
У тебя Ами не правильно собирает свечи.
Посмотри на графике 15 минутки. Какое время у свечек? |
Да правильные, как положено 10:00; 10:15....
по любому какую то галочку гдето нужно поставить) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Странно все это.
Пока даже мыслей никаких нет....
А у тебя в базе тут
какие настройки и какой фрейм у базы установлен?
Думаю может |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
Странно все это.
Пока даже мыслей никаких нет....
А у тебя в базе тут
какие настройки и какой фрейм у базы установлен?
Думаю может |
Мои настройки: |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
а если смотреть на 15 минутный график в реалтайме, то новые свечки появляются в нужное время (10:00, 10:15, 10:30...)? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
а если смотреть на 15 минутный график в реалтайме, то новые свечки появляются в нужное время (10:00, 10:15, 10:30...)? |
С этим все ок.
Проблема в том, что когда есть сигнал, то он отправляется в квик сразу же, а не в конце свечи. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сигнал не может отправляться в Квик в конце свечи. Сигнал отправляется в самом начале следующей свечки.
За это в роботе отвечает вот этот блок.
Код: |
Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);
|
В товоем коде этот блок присутствует. Я не могу понять почему сигналы исполняются сразу.
Этого не может быть. Потому, что этого не может быть никогда. Или на самом деле у тебя другой код. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Skornet
Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все
|
Есть такой вот индикатор
Но при попытке встроить его в систему сделок в анализаторе нет, а стрелки рисует. В чём может быть причина?
Код: |
_SECTION_BEGIN( "Flower" );
// "Line Detail"
OverBought = Param( "OverBought Above", 200, 0, 400, 1 );
OverSold = Param( "OverSold Bellow", -200, -400, 0, 1 );
// "Trend Bought/Sold Detail"
Smoother = Param( "Trend Smoother", 4, 2, 20 );
upcolor = ParamColor( "UpTrend Color", colorGreen );
Downcolor = ParamColor( "DownTrend Color", colorRed );
// "Circle Detail"
Warningcolor = ParamColor( "Warning/Watch Signal", colorBlue );
WatchColor = ParamColor( "Accumulation Zone", colorWhite );
EntryColor = ParamColor( "Entry Signal", colorAqua );
ProfitTakeColor = ParamColor( "Distribution Zone", colorYellow );
ExitColor = ParamColor( "Exit Signal", colorRed );
// "Overbought/Oversold/Warning Detail"
koef = Param( "koefsmoof", 4, 2, 7, 1 );
n = Smoother;
ys1 = ( High + Low + Close * 2 ) / 4;
rk3 = EMA( ys1, n );
rk4 = StDev( ys1, n );
rk5 = ( ys1 - rk3 ) * 200 / rk4;
rk6 = EMA( rk5, n );
UP = EMA( rk6, n );
DOWN = EMA( up, n );
Oo = IIf( up < down, up, down );
Hh = Oo;
Ll = IIf( up < down, down, up );
Cc = Ll;
barcolor2 = IIf( Ref( oo, -1 ) < Oo AND Cc < Ref( Cc, -1 ), colorGreen, IIf( up > down, colorGreen, colorRed ) );
PlotOHLC( Oo, hh, ll, Cc, "", barcolor2, styleCandle );
UP = EMA( rk6, n );
UPshape = IIf( UP >= OverBought OR UP <= OverSold, shapeSmallCircle, shapeNone );
UPColor = IIf( UP >= 210, ProfitTakeColor, IIf( UP <= -210, WatchColor, Warningcolor ) );
Plot( UP, "UP", colorGrey50, styleThick );
Plot( DOWN, "D", colorBlue, styleThick );
PlotShapes ( IIf( Ref( oo, -1 ) < Oo AND Cc > Ref( Cc, -1 ), shapeUpArrow, shapeNone ) , EntryColor, layer = 0, yposition = UP, offset = 1 );// Ref( oo, -1 ) < Oo AND
PlotShapes ( IIf( Ref( oo, -1 ) > Oo AND Cc < Ref( Cc, -1 ), shapeDownArrow, shapeNone ) , ExitColor, layer = 0, yposition = UP, offset = 1 );// Ref( oo, -1 ) > Oo AND
//Buuy1 = Hold(Ref(Cross (up, down),-1), 4);
//Shoort1 = Hold(Ref(Cross (down, up),-1), 4);
PlotShapes( UPShape, UPColor, 0, UP, 0 );
// "Plot Lines"
Plot( OverBought, "OB", colorDarkRed, styleLine | styleNoLabel );
Plot( 0, "0", colorDarkGrey, styleDashed | styleNoLabel );
Plot( OverSold, "OS", colorDarkRed, styleLine | styleNoLabel );
_SECTION_END();
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вероятно не так вставил в систему.
Должно быть все нормально. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
Сигнал не может отправляться в Квик в конце свечи. Сигнал отправляется в самом начале следующей свечки.
За это в роботе отвечает вот этот блок.
Код: |
Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);
|
В товоем коде этот блок присутствует. Я не могу понять почему сигналы исполняются сразу.
Этого не может быть. Потому, что этого не может быть никогда. Или на самом деле у тебя другой код. |
По идее если бы не этот код, то сигналы бы выполнялись в момент выполнения скрипта, правильно? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|