orange2000
New member
Добрый день всем!
Решил попробовать сделать робота для данной схемы. Сам не крутой программер, поэтому я соединил в одно две вещи: Робота Меха для квика и наработки в этой теме:
http://www.russian-trader.ru/forum/viewtopic.php?t=4127
вот что у меня получилось:
для простоты системка на средних. Только лонг, 1 лот, фьюч РТС, минутка. Отступ "-2" сделан что бы сделки не совершались а просто вешались в стакан подальше.
Данный код работает не совсем корректно. При поступлении сигнала (напр. лонг) в АД отправляется сделка 1 лот. Но при каждом обновлении графика в ами сигнал генерируется по новой, т.е. за минуту отсылается 2 раза сделка. (в ами больше 30 секунд обновление графика не делается). Это проблема.
При 5 минутном фрейме, таких сделок будет уже 10...Поэтому это нужно как-то исправить...
В общем может кто поможет поправить код. Ну и в целом доработать его.
Думаю это может пригодиться многим.
Решил попробовать сделать робота для данной схемы. Сам не крутой программер, поэтому я соединил в одно две вещи: Робота Меха для квика и наработки в этой теме:
http://www.russian-trader.ru/forum/viewtopic.php?t=4127
вот что у меня получилось:
Код:
EnableScript("vbscript");
<%
Dim AD
Set AD = CreateObject("ADLite.AlfaDirect")
function OrderBuy(vbprice)
vbordernum = AD.CreateLimitOrder ("11111-000", "FORTS", "RTSI-12.09", "24.10.09 23:00", "Buy comment", "RUR", "B", "1", vbprice, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, 10)
OrderBuy = vbordernum
End function
function OrderSell(vbprice)
vbordernum = AD.CreateLimitOrder ("1111-000", "FORTS", "RTSI-12.09", "24.10.09 23:00", "Sell comment", "RUR", "S", "1", vbprice, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, 10)
OrderSell = vbordernum
End function
%>
TickerID=1; // уникальный для каждого индикатора номер
Ticker="RTSI-12.09"; // название бумаги в Амиброкере. На другой бумаге работать не будет
TimeFrame=1; // таймфрейм в минутах. На других таймфреймах работать не будет
Classcode=""; // код класса бумаги
Seccode="RTSI-12.09"; // код бумаги
lots=0; // сколько лотов желаете торговать
Otstup=-2; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
////////// Правила системы ///////////////
Buy= Cross(C, EMA(C,12));
Sell= Cross(EMA(C,12) , C);
Short=0;Cover=0;
////// Убираем лишние сигналы /////////////
Buy=ExRem(Buy,Sell);Sell=ExRem(Sell,Buy);
///////////// Рисуем всякое ///////////////
Equity( 1 );
GraphXSpace = 9;
Plot(C,"price",12,1);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
Plot( Volume, "Volume", 0, styleHistogram | styleOwnScale, 1,110000 );
//////////// Формируем транзакцию.//////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
//////////////////////////////////////////////////////////////////////////////////
if ((Now(3)==LastValue(DateNum()))AND(BarCount>1)AND(Name()==Ticker)AND(TimeFrame==Interval()/60)AND((Buy[BarCount-1]==1)OR(Sell[BarCount-1]==1)OR(Short[BarCount-1]==1)OR(Cover[BarCount-1]==1))) {
ifbuy=IIf(Buy[BarCount-1]==1,1,0);
ifsell=IIf(Sell[BarCount-1]==1,1,0);
ifshort=IIf(Short[BarCount-1]==1,1,0);
ifcover=IIf(Cover[BarCount-1]==1,1,0);
if (ifbuy) {
price=(1+Otstup/100)*Close[BarCount-1];
script = GetScriptObject();
OrderNum = script.OrderBuy (price);
WriteVal (OrderNum);
}
if (ifsell) {
price=(1-Otstup/100)*Close[BarCount-1];
script = GetScriptObject();
OrderNum = script.OrderSell (price);
WriteVal (OrderNum);
}
if (ifshort) {
price=(1-Otstup/100)*Close[BarCount-1];
OrderNum = script.OrderSell (lots, price);
WriteVal (OrderNum);
}
if (ifcover) {
price=(1+Otstup/100)*Close[BarCount-1];
OrderNum = script.OrderBuy (lots, price);
WriteVal (OrderNum);
}
}
Данный код работает не совсем корректно. При поступлении сигнала (напр. лонг) в АД отправляется сделка 1 лот. Но при каждом обновлении графика в ами сигнал генерируется по новой, т.е. за минуту отсылается 2 раза сделка. (в ами больше 30 секунд обновление графика не делается). Это проблема.
При 5 минутном фрейме, таких сделок будет уже 10...Поэтому это нужно как-то исправить...
В общем может кто поможет поправить код. Ну и в целом доработать его.
Думаю это может пригодиться многим.