Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Октября 12, 2024, 09:31:47 am
Начало Помощь Поиск Войти Регистрация
Новости:

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Стохастик « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Стохастик  (Прочитано 4866 раз)
buv87
Newbie
*
Сообщений: 12


Просмотр профиля Email
« : Марта 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;
   }
}
Записан
buv87
Newbie
*
Сообщений: 12


Просмотр профиля Email
« Ответ #1 : Марта 25, 2015, 04:48:06 pm »

Сделал другой вариант. По событию пересечения. Картина та же
#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);

   }
Записан
ramil
Newbie
*
Сообщений: 9


Просмотр профиля Email
« Ответ #2 : Марта 27, 2015, 12:45:00 pm »

Попробуй так:

//Проба - 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ехов!
Записан
buv87
Newbie
*
Сообщений: 12


Просмотр профиля Email
« Ответ #3 : Марта 30, 2015, 10:45:53 pm »

Спасибо!
Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Стохастик « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!