Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: buv87 on Марта 25, 2015, 11:16:32 am
-
Добрый день! Пробую сделать робота, который покупает или продает при пересечении линий стохастика.
При тесте в Транзаке получается такая картина...
Получается непонятно как сделки совершает. Заметил что пересечения стохастика происходят не всегда на свечке, бывает и между свечей. Как сделать чтобы после пересечения стохастика, сделка открывалась на след свече?
#line 0 solid lime
#line 1 solid red
extern "number" perstoh = 14; // Период стохастика
extern "number" skol = 3; // Период скользящей
extern "number" lots = 1; // Базовое число лотов актива
static SecName;
static lotsize;
static NewCandle;
static CandleTime;
static quantity;
function init()
{
setInitCandles(perstoh+1);
SecName = getSecName();
lotsize = getLotSize();
NewCandle = false;
CandleTime = getFormattedTime(getServerTime());
}
function onNewCandle()
{
NewCandle = true;
CandleTime = getFormattedTime(getCandleTime());
quantity = lots*2;
// Определим число лотов в портфеле
}
function calc()
{
line[0] = IndRef("stochastic", perstoh, skol, ind_sma)[0];
line[1] = IndRef("stochastic", perstoh, skol, ind_sma)[1];
if (NewCandle) {
if(line[0][-1] > line[1][-1] && line[0] < line[1])
{
var order = new_object("hash");
order["quantity"] =2 ;
order["operation"] = OP_BUY;
trade_action::transact(order);
}
if(line[0][-1] < line[1][-1]&& line[0] > line[1])
{
var order = new_object("hash");
order["quantity"] =2 ;
order["operation"] = OP_SELL;
trade_action::transact(order);
}
NewCandle = false;
}
}
-
Сделал другой вариант. По событию пересечения. Картина та же
#line 0 solid lime
#line 1 solid red
extern "number" perstoh = 14; // Период стохастика
extern "number" skol = 3; // Период скользящей
extern "number" lots = 1; // Базовое число лотов актива
function init()
{
setInitCandles(1);
}
function onCross(var a, var b)
{
if (a == 0 && b==1 ) {
trade_action::buy(1, ::lots);
}
if (a == 1 && b==0) {
trade_action::sell(1, ::lots);
}
}
function calc()
{
line[0] = IndRef("stochastic", perstoh, skol, ind_sma)[0];
line[1] = IndRef("stochastic", perstoh, skol, ind_sma)[1];
addCrossWatch(0);
addCrossWatch(1);
}
-
Попробуй так:
//Проба - stoch
//prstoch
#line 0 solid lime
#line 1 solid red
extern "number" perstoh = 14; // Период стохастика
extern "number" skol = 3; // Период скользящей
extern "number" lots = 1; // Базовое число лотов актива
static SecName;
static lotsize;
static NewCandle;
static CandleTime;
static quantity;
static posn = 0;
function init()
{
setInitCandles(perstoh+1);
SecName = getSecName();
lotsize = getLotSize();
NewCandle = false;
CandleTime = getFormattedTime(getServerTime());
}
function onNewCandle()
{
NewCandle = true;
CandleTime = getFormattedTime(getCandleTime());
quantity = lots*2;
// Определим число лотов в портфеле
}
function calc()
{
line[0] = IndRef("stochastic", perstoh, skol, ind_sma)[0];
line[1] = IndRef("stochastic", perstoh, skol, ind_sma)[1];
// автозапуск при позиция = 0
if (posn == 0 && line[0][-1] > line[1][-1] && line[0] < line[1])
{
var order = new_object("hash");
order["quantity"] =2 ;
order["operation"] = OP_BUY;
trade_action::transact(order);posn = 1;
}
if(posn ==0 && line[0][-1] > line[1][-1] && line[0] < line[1])
{
var order = new_object("hash");
order["quantity"] =2 ;
order["operation"] = OP_SELL;
trade_action::transact(order);posn = -1;
}
if (NewCandle ) {
if(posn ==-1 && line[0][-1] > line[1][-1] && line[0] < line[1])
{
var order = new_object("hash");
order["quantity"] =2 ;
order["operation"] = OP_BUY;
trade_action::transact(order);posn = 1;
}
if(posn ==1 &&line[0][-1] < line[1][-1]&& line[0] > line[1])
{
var order = new_object("hash");
order["quantity"] =2 ;
order["operation"] = OP_SELL;
trade_action::transact(order);posn = -1;
}
NewCandle = false;
}
}
Усgехов!
-
Спасибо!