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

Просмотр сообщений

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Termvsrobo

Pages: [1]
1
Вот написал такой код

#line 0 solid red

extern kol_punktov = 15;
extern kol_lotov = 3;
extern step =0.01;

var trend1;
var trend2;
var i = 0;

function init()
{
   setInitCandles(10);
    setBounds(0, 10, 0);
}

function checkAction() //Определяем наличие активных заявок
{
   var NewArray = new_object("array"); //Определяем количество обычных активных заявок
   NewArray = getActiveOrderIDs();
   var NewArray2 = new_object("array"); //Определяем количество активных стоп-заявок
   NewArray2 = getActiveStopOrderIDs();
   var n = NewArray.size()+NewArray2.size();
   return n;
}

function calc()

{
   trend1 = IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0] - IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0][-1]; //Определяем направление тренда
   trend2 = IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0][-1] - IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0][-2];
   line[0] = trend1; //Для графического представления строим линию
   checkAction();
   var t = checkAction();
   line[1] = 0.01;
   line[2] = -0.01;
   line[3] = trend2;
   //i = 0;
   if (t == 0)    {
   if (trend1>0.01 and trend2>0.01)    {   
                                 //signal::outputMultiple(OP_BUY);
                                 //signal::outputMultiple(OP_SELL);
                                 signal::outputMultiple("i="+i);
                                 i = OP_BUY;
                                 signal::outputMultiple("i="+i);
                                 trade_action::buyMultiple(kol_lotov, ::lots, close);
                                 signal::outputMultiple(getLastErrorMessage());
                              }
   else    {
            signal::output("Тренды меньше 0,01. Событие calc()");
         }
               }
}
   
function onTrade(var id)
{
signal::outputMultiple("Событие onTrade");
signal::outputMultiple("i="+i);
if (i==1)   {
            i = 0;
            var order1 = new_object("hash");
            order1["operation"] = OP_SELL;
            order1["tp_activationprice"] = close+kol_punktov*step;
            order1["tp_quantity"] = kol_lotov;
            order1["tp_correction"] = "0.01";
            order1["tp_guardspread"] = "0.01";
            order1["sl_activationprice"] = close-kol_punktov*step;
            order1["sl_quantity"] = kol_lotov;
            order1["sl_orderprice"] = close-kol_punktov*step;
            trade_action::transactMultiple(order1); //Если тренд восходящий, то встаем в лонг
            }

signal::outputMultiple("i="+i);
}   


Сутью данного кода должно быть следующее. По событию сделки на рынке проверяем есть ли у нас активные сделки, ожидающие исполнения. Если таких сделок нет, то можем смело выставлять ордер на покупку. Выставили ордер, соответственно дальнейшие вызовы calc игнорируются, так как работает условие. Когда наш ордер удовлетворяется, то по событию onTrade выставляем нужный стоп лосс. Выставили. Опять ждем его исполнения. Когда удовлетворяется стоп-лосс, то мы должны запретить выполнение того же события onTrade и разрешить работу calc на выставление ордера. Для этого введен флаг i, который вы можете тут видеть. Я все проверил, по логике вещей все должно работать. Но на деле это работает совсем не так. По первому запуску выставляется ордер на покупку как надо. Когда ордер исполняется, то выставляется стоп лосс как я и хотел. Но дальше, когда стоп лосс исполняется и исполняется выставленная стоп лоссом заявка сново почему-то выставляется еще один стоп-лосс по событию onTrade и все (включая calc) перестает работать. И почему то в ошибке пишется о том, что средств не достаточно. Хотя я все проверял, всего хватает. Может быть как-то иначе можно запретить событие onTrade? Кто знает как это сделать?

2
Прошу помощи. Не могу никак разобраться с получением id номеров заявок. Задача стоит такая. Робот выставляет заявку на покупку, нужно получить id заявки и по событию изменения состояния заявки (событие покупки) нужно выставить стоп-ордер на продажу. Умею отдельно выставлять заявки на покупку/продажу и стоп-ордеры в коде. Но никак не могу разобраться с тем как получить id заявки для того, чтобы передать этот id в функции onOrder и onTrade. Подскажите пожалуйста как мне это реализовать. И как функция trade_action::buy передает id транзакции? У меня строчка var p = trade_action::buy вызывает внутреннюю ошибку компилятора.

Pages: [1]


Войти

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