Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: buv87 on Декабря 19, 2014, 02:46:53 pm
-
Добрый день! Более менее разобрался с небольшим роботом, но почему - то не проходят заявки на продажу. Главное на покупку без проблем. И деньги на счете есть, и кредитное плечо есть. Вручную продажа отлично работает, а вот робот почему не продает, не пойму. все перелазил уже... Даже если я например купил 1 лот, и сработал сигнал на продажу 1 лота, все равно заявка не отправляется.
Transaq Trader
ver.5.10.341.10 rev.58 ATF 1.20
вот команда trade_action::sell(1, ::lots);
trade_action::buy(1, ::lots); отлично срабатывает по рынку.
Подскажите где копать? может галочку какую поставить где-нибудь?
-
Если только это не грааль напишите скрипт , может у вас где флаг стоит запрещающий продажу.
Скажу по секрету телепатов на форуме не водится.
-
Скрипт найден тут на форуме. Пересечение скользящих.
#samewindow
#line 0 solid lime
#line 1 solid red
extern "number" fast = 5; // Период быстрой EMA
extern "number" slow = 45; // Период медленной EMA
extern "number" lots = 1; // Базовое число лотов актива
static SecName;
static lotsize;
static NewCandle;
static CandleTime;
static quantity;
function init()
{
setInitCandles(slow+1);
SecName = getSecName();
lotsize = getLotSize();
NewCandle = false;
CandleTime = getFormattedTime(getServerTime());
// При перезапуске МТС эта переменная = ""
}
function onNewCandle()
{
NewCandle = true;
CandleTime = getFormattedTime(getCandleTime());
quantity = int(getSecBalance() / lotsize);
// Определим число лотов в портфеле
}
function calc()
{
line[0] = MovAvg(ind_ema, fast, pt_close);
line[1] = MovAvg(ind_ema, slow, pt_close);
if (NewCandle) {
if(line[0][-2] < line[1][-2] && line[0][-1] > line[1][-1] )
{
// Зелёная пересекает снизу вверх красную линию
signal::output(CandleTime + " " + SecName + ": Buy signal.");
if(quantity < 0) { quantity *= -2; }
// Закрыть короткую позицию, открыть длинную
else if(quantity == 0) { quantity = lots; }
signal::output(CandleTime + " " + SecName + ": Close short, open long. Volume:" + as_string(quantity));
trade_action::buy(quantity, ::lots);
}
else if(line[0][-2] > line[1][-2] && line[0][-1] < line[1][-1] )
{
// Красная пересекает снизу вверх зелёную линию
signal::output(CandleTime + " " + SecName + ": Sell signal.");
if(quantity > 0) { quantity *= 2; }
// Закрыть длинную позицию, открыть короткую
else if(quantity == 0) { quantity = lots; }
signal::output(CandleTime + " " + SecName + ": Close long, open short. Volume:" + as_string(quantity));
trade_action::sell(quantity, ::lots);
}
NewCandle = false;
}
}
-
Даже элементарный этот скрипт, тоже на продажу не срабатывает. На покупку без проблем.
#samewindow
#line 0 solid red
extern fast = 9;
extern slow = 14;
static trend = 0;
function init()
{
setInitCandles(1);
}
function calc()
{
line[0] = MovAvg(ind_ema, fast, pt_close);
line[1] = MovAvg(ind_ema, slow, pt_close);
if (trend == 1 and line[0] < line[1]) {
trade_action::sell(1, ::lots);
}
if (trend == -1 and line[0] > line[1]) {
trade_action::sell(1, ::lots);
}
if (line[1] < line[0]) {trend = 1;}
else if (line[1] > line[0]) {trend = -1;}
}
Поставил в нем обе заявки на продажу. и при пересечении вверх, и при пересечении вниз. Ноль реакции
-
В этом скрипте продажа не осуществится никогда ....
так как : сравниваем if (trend == -1 and line[0] > line[1]){...} и if (line[1] < line[0]) {trend = 1;}
осложнения : 1. не кратная функция sell.
2. параллельная постановка if-ов.
основное противоречие : в то время как лайн 1 больше лайн 0 тренд всегда будет = -1 ,....как же тогда мы соотнесем этим неравенством : if (trend == -1 and line[0] > line[1]) {
т.е. условие теоретически наглядно на графике может и выполнится,...но все линии -глобальные и принимают старые значения прошлой свечки,...и на новой свечке они конечно станут нужными,...и готовы будут удовлетворить нашему неравенству,...но....ведь у нас параллельные ифы,...и минута еще не кончиоась.....а значит влючается такое неравенство (минуя нашу нужную продажу): if (line[1] < line[0]) {trend = 1;} - в котором то , как раз до нашего нужного момента (когда глобальная линия 1 приняла свое значение) - тренд меняется на = 1 - что автоматом зачеркивает всю нашу продажу,.....в которой как мы помним тренд требуется = -1,...
Вот такие пироги ))))