У вас не стоит Flash Player
Настройки
#31492 - Mon Sep 26 2011 01:41 PM Скрипт не торгует
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Вопрос к сообществу трейдеров-программистов.
Имеем два внешних скрипта (похожих по структуре, но различающихся в методике расчета одного и того же индикатора для генерации сигналов). Оба скрипта показывают правильные результаты в лаборатории (то есть нет заглядывания в будущее и прочего). НО! Один скрипт работает на реале, то есть генерирует заявки, а второй молчит. В менеджере команд ничего нет.
Вопрос: куда копать? В чем может быть проблема?


Отредактировано Ti_ru (Mon Sep 26 2011 01:48 PM)

Наверх
#31493 - Mon Sep 26 2011 01:57 PM Re: Скрипт не торгует [Re: Ti_ru]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
а что за индюк?

по настройкам тут можно прочитать, может поможет: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=13898#Post13898
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#31495 - Mon Sep 26 2011 02:13 PM Re: Скрипт не торгует [Re: Ti_ru]
Gji Offline
member

Registered: Fri Apr 22 2011
Записи: 137
Команды на покупку/продажу выдаете на СЛЕДУЮЩИЙ бар?
Например:
security.Positions.BuyAtMarket(i + 1, 1, "E");

Наверх
#31496 - Mon Sep 26 2011 02:21 PM Re: Скрипт не торгует [Re: Gji]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
не, tiru ж написал, нету прочего. Соответственно если проверять по порядку.
1.Будущего нет -ок!
2.Проверяем настройки, описанные Нектодроном, думаю то ж - ок!

3.остается: Сам индюк и его методики расчета.
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#31498 - Mon Sep 26 2011 03:41 PM Re: Скрипт не торгует [Re: 777]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Originally Posted By: 777
а что за индюк?

по настройкам тут можно прочитать, может поможет: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=13898#Post13898

Индюк секретный ), но ничего сверхсложного. Я его написал в двух вариантах: в виде кубика и в составе целого скрипта, - скрипт с данным кубиком работает, а полный скрипт ни в какую.. В лабе в режиме онлайн обновления показывает сделки, а на реале ничего.

Originally Posted By: Gji
Команды на покупку/продажу выдаете на СЛЕДУЮЩИЙ бар?
Например:
security.Positions.BuyAtMarket(i + 1, 1, "E");


Да

Originally Posted By: 777
не, tiru ж написал, нету прочего. Соответственно если проверять по порядку.
1.Будущего нет -ок!
2.Проверяем настройки, описанные Нектодроном, думаю то ж - ок!

3.остается: Сам индюк и его методики расчета.


Насчет будущего еще раз проверю. Но дело в том, что если бы было будущее, то результаты были бы раз в 20 лучше (я специально это делал)


Отредактировано Ti_ru (Mon Sep 26 2011 03:44 PM)

Наверх
#31499 - Mon Sep 26 2011 03:49 PM Re: Скрипт не торгует [Re: Ti_ru]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Ничего не понимаю, только что загрузил ТСЛаб, скрипты заработали, то есть в менеджере команд появилось предложение войти по последнему сигналу в сделку. Мистика

Есть следующее предположение (тут уже нужен комментарий разработчика):
если меняется содержимое файла внешнего скрипта, то в лаборатории данные изменения вступают в силу сразу после запуска скрипта по F5. НО! Если поменять внешний файл на другой, То ничего не произойдет, скрипт будет работать на старом коде. Для вступления в силу изменений нужно перезапускать скрипт. Это нормально или баг?
Я вот думаю, что на реале он тоже "держал в уме" какой-то старый скрипт и не хотел работать. Хотя я пробовал перезапускать.


Отредактировано Ti_ru (Mon Sep 26 2011 03:55 PM)

Наверх
#31503 - Mon Sep 26 2011 04:13 PM Re: Скрипт не торгует [Re: Ti_ru]
Gji Offline
member

Registered: Fri Apr 22 2011
Записи: 137
Да, это недоработка. У меня часто повторялась ситуация, когда в кубике "внешний скрипт" один cs файл меняешь на другой, а ТСЛаб на это не реагирует, использует старый код. Ни F5, ни добавление новых блоков, ни другие манипуляции с блоками не помогают. Я блок "внешний скрипт" удаляю и добавляю заново.

Наверх
#31504 - Mon Sep 26 2011 04:18 PM Re: Скрипт не торгует [Re: Gji]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Может поправят.
Я сегодня пол дня голову ломал над этим, весь код перелопатил smile А ТСЛаб перезагрузить не догадался

Наверх
#31506 - Mon Sep 26 2011 04:53 PM Re: Скрипт не торгует [Re: Ti_ru]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Сейчас попробовал подключить тот же скрипт, но со сжатием:

1-поменял внешний файл, сохранил скрипт
2-перезагрузил программу
3-добавил скрипт к портфелю
4-запустил: опять нет сигналов
5-перезагрузил программу
6-сигналы появились

Наверх
#31520 - Mon Sep 26 2011 06:28 PM Re: Скрипт не торгует [Re: Ti_ru]
pasha Offline

old hand

Registered: Tue Dec 23 2008
Записи: 1085
При запущенном скрипте программа не проверяет изменения внешних файлов скриптов. Скрипт уже скомпилирован и выполняется.
Для подхвата изменений достаточно остановить и вновь запустить скрипт. Программа поймет по дате изменения файла внешного скрипта, что необходимо перестроить скрипт.

Наверх
#31524 - Mon Sep 26 2011 07:03 PM Re: Скрипт не торгует [Re: pasha]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Originally Posted By: pasha
При запущенном скрипте программа не проверяет изменения внешних файлов скриптов. Скрипт уже скомпилирован и выполняется.
Для подхвата изменений достаточно остановить и вновь запустить скрипт. Программа поймет по дате изменения файла внешного скрипта, что необходимо перестроить скрипт.

Дак в том-то и дело, что остановка/запуск скрипта никак не влияла. Только после перезагрузки программы код подхватился.

Наверх
#31587 - Wed Sep 28 2011 10:16 AM Re: Скрипт не торгует [Re: Ti_ru]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Еще одна просьба будет к знатокам. Скрипт использует сжатие, вроде все работает, но все же просьба посмотреть. Вот фрагмент кода, в котором сомневаюсь
Click to reveal..
Code:
// Make 'log_long' item data
            System.Collections.Generic.IList<bool> log_long;
            try
            {
                int count = nRange.Count;
                bool[] list = new bool[count];
                if ((Source.IsLastBarUsed == false))
                {
                    count--;
                }
                for (int bar = 1; (bar < count); bar++)
                {
                    list[bar] = "условие";
                }
                log_long = list;
            }
            catch (System.ArgumentOutOfRangeException)
            {
                throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'log_long\'. Индекс за пределам диапазона.");
            }
            // Make 'log_short' item data
            System.Collections.Generic.IList<bool> log_short;
            try
            {
                int count = nRange.Count;
                bool[] list = new bool[count];
                if ((source.IsLastBarUsed == false))
                {
                    count--;
                }
                for (int bar = 1; (bar < count); bar++)
                {
                    list[bar] = "условие";
                }
                log_short = list;
            }
            catch (System.ArgumentOutOfRangeException)
            {
                throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'log_short\'. Индекс за пределам диапазона.");
            }
.........................
//Декомпрессия индикаторов

.........................
//Проход по барам

            
            if ((source.IsLastBarUsed == false))
            {
                barsCount--;
            }
            for (int bar = ctx.TradeFromBar; bar < barsCount; bar++)
            {
LongPos = source.Positions.GetLastActiveForSignal("LN");
                ShortPos = source.Positions.GetLastActiveForSignal("SN");
                // Торговля
                if (LongPos == null)
                {
                    if (log_long[bar])
                    {
                        source.Positions.BuyAtMarket(bar + 1, 1, "LN");
                    }
                }
                else
                {
                    if ((LongPos.EntryBarNum <= bar))
                    {
                        if (log_short[bar])
                        {
                            LongPos.CloseAtMarket(bar + 1, "LX");
                        }
                    }
                }
                if (ShortPos == null)
                {
                    if (log_short[bar])
                    {
                        source.Positions.SellAtMarket(bar + 1, 1, "SN");
                    }
                }
                else
                {
                    if ((ShortPos.EntryBarNum <= bar))
                    {
                        if (log_long[bar])
                        {
                            ShortPos.CloseAtMarket(bar + 1, "SX");
                        }
                    }
                }
            }


Отредактировано Ti_ru (Wed Sep 28 2011 10:17 AM)

Наверх
#31620 - Wed Sep 28 2011 10:30 PM Re: Скрипт не торгует [Re: Ti_ru]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Ну, код, мягко говоря, не очень. Видимо получен из автоматически генерируемого TSLab`ом временного файла.

Много лишнего.

В коде используются переменные "Source" и "source". Не понятно: это опечатка или так и задумано. Размер, в данном случае, имеет значение smile. Очень похожие имена лучше не использовать, можно легко ошибиться.

Повторное:
count--;
это скорее всего ошибка.

В строчках:
Code:
  if ((source.IsLastBarUsed == false))
    barsCount--;
  for (int bar = ctx.TradeFromBar; bar < barsCount; bar++)

похоже ошибка. Если "IsLastBarUsed == false" то скрипт будет выставлять последнюю заявку на ПОСЛЕДНИЙ бар, а не на следующий за ним, что не правильно (в реале сделок не будет вообще, насколько я понимаю).

Что еще? Обработка ошибок (try...catch) не нужна. TSLab сам все перехватит.

Да, параллельно ведутся ДВЕ позиции, с именами: "LN" и
"SN". Сигналов рассчитывается тоже 2 и они не связаны. Это означает, что не исключена ситуация когда будет два сигнала и две открытые позиции: лонг и шорт. Скорее всего сигналы взаимоисключающиеся, но из отрывка кода этого не ясно.

Ну и раз уж я все равно это сделал, прикреплю свой вариант форматирования кода, вдруг да окажется полезным:
Click to reveal..

Code:
      // Make 'log_long' item data
      int count = nRange.Count;
      var log_long = new bool[count];
      if (Source.IsLastBarUsed == false)
        count--;

      for (int bar = 1; bar < count; bar++)
        log_long[bar] = "условие";

      // Make 'log_short' item data
      var log_short = new bool[count];
      if (source.IsLastBarUsed == false)
        count--;
      for (int bar = 1; bar < count; bar++)
        log_short[bar] = "условие";

      //.........................
      //Декомпрессия индикаторов

      //.........................
      //Проход по барам

      if (source.IsLastBarUsed == false)
        barsCount--;
      
      for (int bar = ctx.TradeFromBar; bar < barsCount; bar++) {
        var LongPos = source.Positions.GetLastActiveForSignal("LN");
        var ShortPos = source.Positions.GetLastActiveForSignal("SN");
        // Торговля
        if (LongPos == null) {
          if (log_long[bar])
            source.Positions.BuyAtMarket(bar + 1, 1, "LN");
        } else {
          if (LongPos.EntryBarNum <= bar)
            if (log_short[bar])
              LongPos.CloseAtMarket(bar + 1, "LX");
        }

        if (ShortPos == null) {
          if (log_short[bar])
            source.Positions.SellAtMarket(bar + 1, 1, "SN");
        } else {
          if (ShortPos.EntryBarNum <= bar)
            if (log_long[bar])
              ShortPos.CloseAtMarket(bar + 1, "SX");
        }
      }
    }



Как там сестру таланта зовут?
smile
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#31621 - Wed Sep 28 2011 10:54 PM Re: Скрипт не торгует [Re: jhgjrht]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Спасибо, что ответили ) Начнем по порядку.

Код корявый, согласен, я учусь с нуля. Документации и примеров мало, поэтому приходится делать некоторые вещи по аналогии с файлами, генерируемыми ТСЛабом. Что могу перерабатываю, если не понимаю, то, сами понимаете, оставляю как есть.

Quote:
В коде используются переменные "Source" и "source"

В коде нормальные названия, я тут заменил просто

Quote:
Повторное:
count--;
это скорее всего ошибка.


Так в ТСЛабовском файле было. В вашем примере вы тоже два раза упоминаете почему-то.

Quote:
Если "IsLastBarUsed == false" то скрипт будет выставлять последнюю заявку на ПОСЛЕДНИЙ бар, а не на следующий за ним, что не правильно (в реале сделок не будет вообще, насколько я понимаю).


Тоже делал по аналогии. Ставил на демо=счет, сделки корректно открываются.

Quote:
параллельно ведутся ДВЕ позиции


Так и задумано, скрипт переворотный

Сейчас сижу и не могу понять, почему при пуске/остановке скрипта выдается сообщение о том что пересчет прошел с разницей. Если поставить 5-и минутный интервал (тот в который сжимается), то ошибок нет, если поставить минутки, то лезут ошибки. Пробовал ставить начальный бар, с которого начинается торговля больше, чем период индикатора, не помогло.

Наверх
#31622 - Wed Sep 28 2011 11:20 PM Re: Скрипт не торгует [Re: Ti_ru]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Originally Posted By: Ti_ru

Quote:
Повторное:
count--;
это скорее всего ошибка.


Так в ТСЛабовском файле было. В вашем примере вы тоже два раза упоминаете почему-то.

Я просто не стал удалять непонятные строчки.

Originally Posted By: Ti_ru
Quote:
Если "IsLastBarUsed == false" то скрипт будет выставлять последнюю заявку на ПОСЛЕДНИЙ бар, а не на следующий за ним, что не правильно (в реале сделок не будет вообще, насколько я понимаю).


Тоже делал по аналогии. Ставил на демо=счет, сделки корректно открываются.

Если IsLastBarUsed == true, то все правильно, а вот если == false, тогда последний бар из переданных скрипту обработан не будет. Думаю, не будет и сделок в реальности.

Originally Posted By: Ti_ru
Quote:
параллельно ведутся ДВЕ позиции


Так и задумано, скрипт переворотный
Я ничего против и не имею, лишь обратил Ваше внимание на потенциальную проблему.

Originally Posted By: Ti_ru
Сейчас сижу и не могу понять, почему при пуске/остановке скрипта выдается сообщение о том что пересчет прошел с разницей. Если поставить 5-и минутный интервал (тот в который сжимается), то ошибок нет, если поставить минутки, то лезут ошибки. Пробовал ставить начальный бар, с которого начинается торговля больше, чем период индикатора, не помогло.

Тут я затрудняюсь, что-то сказать, мало информации.
Мне очень не нравятся манипуляции с "count" и "barsCount". Я бы от них отказался.
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#31623 - Wed Sep 28 2011 11:27 PM Re: Скрипт не торгует [Re: jhgjrht]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Вот пример скрипта, сгенерированного ТСЛабом. Скрипт на пересечении двух скользящих средних со сжатием. Там тоже IsLastBarUsed == False Может здесь имеется в виду последний сжатый бар? Мы его не можем использовать, пока он не накопит нужное число свечек меньшего таймфрейма.

Click to reveal..
Code:
using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;

namespace TSLab.User
{
    //using System;
    //using TSLab.Script;


    public class Script
    {

        private TSLab.Script.Handlers.Compress Compress_h = new TSLab.Script.Handlers.Compress();

        private TSLab.Script.Handlers.Close Close_h = new TSLab.Script.Handlers.Close();

        private TSLab.Script.Handlers.SMA Quick_h = new TSLab.Script.Handlers.SMA();

        private TSLab.Script.Handlers.SMA Slow_h = new TSLab.Script.Handlers.SMA();

        public TSLab.Script.Optimization.OptimProperty Quick_Period = new TSLab.Script.Optimization.OptimProperty(20, 10, 100, 5);

        public TSLab.Script.Optimization.OptimProperty Compress_Shift = new TSLab.Script.Optimization.OptimProperty(0, 0, 60, 5);

        public TSLab.Script.Optimization.OptimProperty Slow_Period = new TSLab.Script.Optimization.OptimProperty(20, 10, 100, 5);

        public virtual void Execute(TSLab.Script.Handlers.IContext context, TSLab.Script.ISecurity Index, TSLab.Script.ISecurity Futures)
        {
            // Initialize 'Quick' item
            this.Quick_h.Period = this.Quick_Period;
            // Initialize 'Закрытие' item
            this.Close_h.Context = context;
            // Initialize 'Сжать' item
            this.Compress_h.Interval = 10;
            this.Compress_h.Shift = this.Compress_Shift;
            // Make 'Сжать' item data
            TSLab.Script.ISecurity IndexComp;
            try
            {
                IndexComp = this.Compress_h.Execute(Index);
            }
            catch (System.ArgumentOutOfRangeException)
            {
                throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Сжать\'. Индекс за пределам диапазона.");
            }
            // Make 'Закрытие' item data
            System.Collections.Generic.IList<double> CloseComp = context.GetData("CloseComp", new string[] {
                this.Compress_h.Interval.ToString(), 
                this.Compress_h.Shift.ToString()
            }, delegate
            {
                try
                {
                    return this.Close_h.Execute(IndexComp);
                }
                catch (System.ArgumentOutOfRangeException)
                {
                    throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Закрытие\'. Индекс за пределам диапазона.");
                }
            });
            // Make 'Quick' item data
            System.Collections.Generic.IList<double> Quick = context.GetData("Quick", new string[] {
                this.Quick_h.Period.ToString(), 
                this.Compress_h.Interval.ToString(), 
                this.Compress_h.Shift.ToString()
            }, delegate
            {
                try
                {
                    return this.Quick_h.Execute(CloseComp);
                }
                catch (System.ArgumentOutOfRangeException)
                {
                    throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Quick\'. Индекс за пределам диапазона.");
                }
            });
            // Initialize 'Slow' item
            this.Slow_h.Period = this.Slow_Period;
            // Make 'Slow' item data
            System.Collections.Generic.IList<double> Slow = context.GetData("Slow", new string[] {
                this.Slow_h.Period.ToString(), 
                this.Compress_h.Interval.ToString(), 
                this.Compress_h.Shift.ToString()
            }, delegate
            {
                try
                {
                    return this.Slow_h.Execute(CloseComp);
                }
                catch (System.ArgumentOutOfRangeException)
                {
                    throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Slow\'. Индекс за пределам диапазона.");
                }
            });
            // Make 'log_long' item data
            System.Collections.Generic.IList<bool> log_long;
            try
            {
                int count = System.Math.Min(Slow.Count, Quick.Count);
                bool[] list = new bool[count];
                if ((Index.IsLastBarUsed == false))
                {
                    count--;
                }
                for (int i = 1; (i < count); i++)
                {
                    list[i] = Quick[i] >= Slow[i] & Quick[i - 1] < Slow[i - 1];
                }
                log_long = list;
            }
            catch (System.ArgumentOutOfRangeException)
            {
                throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'log_long\'. Индекс за пределам диапазона.");
            }
            // Make 'log_short' item data
            System.Collections.Generic.IList<bool> log_short;
            try
            {
                int count = System.Math.Min(Quick.Count, Slow.Count);
                bool[] list = new bool[count];
                if ((Index.IsLastBarUsed == false))
                {
                    count--;
                }
                for (int i = 1; (i < count); i++)
                {
                    list[i] = Quick[i] <= Slow[i] & Quick[i - 1] > Slow[i - 1];
                }
                log_short = list;
            }
            catch (System.ArgumentOutOfRangeException)
            {
                throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'log_short\'. Индекс за пределам диапазона.");
            }
            // =================================================
            // Panels
            // =================================================
            // Make 'Главное' pane
            TSLab.Script.IPane Главное_pane = context.CreatePane("Главное", 70, false);
            Главное_pane.Visible = true;
            // =================================================
            // Handlers
            // =================================================
            TSLab.Script.IPosition L;
            TSLab.Script.IPosition S;
            log_long = IndexComp.Decompress(log_long, TSLab.DataSource.DecompressMethodWithDef.Default);
            log_short = IndexComp.Decompress(log_short, TSLab.DataSource.DecompressMethodWithDef.Default);
            // =================================================
            // Trading
            // =================================================
            int barsCount = Index.Bars.Count;
            if ((Index.IsLastBarUsed == false))
            {
                barsCount--;
            }
            for (int i = context.TradeFromBar; (i < barsCount); i++)
            {
                L = Futures.Positions.GetLastActiveForSignal("L");
                S = Futures.Positions.GetLastActiveForSignal("S");
                if ((L == null))
                {
                    if (log_long[i])
                    {
                        Futures.Positions.BuyAtMarket(i + 1, 1, "L");
                    }
                }
                else
                {
                    if ((L.EntryBarNum <= i))
                    {
                        if (log_short[i])
                        {
                            L.CloseAtMarket(i + 1, "Lx");
                        }
                    }
                }
                if ((S == null))
                {
                    if (log_short[i])
                    {
                        Futures.Positions.SellAtMarket(i + 1, 1, "S");
                    }
                }
                else
                {
                    if ((S.EntryBarNum <= i))
                    {
                        if (log_long[i])
                        {
                            S.CloseAtMarket(i + 1, "Sx");
                        }
                    }
                }
            }
            // =================================================
            // Charts
            // =================================================
            // Make 'Index' chart
            TSLab.Script.IGraphList Главное_pane_Index_chart = Главное_pane.AddList(("Index"
                            + (" ["
                            + (Index.Symbol + "]"))), Index, TSLab.Script.CandleStyles.BAR_CANDLE, true, -16777216, TSLab.Script.PaneSides.RIGHT);
            Index.ConnectSecurityList(Главное_pane_Index_chart);
            Главное_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, Index.Decimals);
            // Make 'Quick' chart
            Quick = IndexComp.Decompress(Quick, TSLab.DataSource.DecompressMethodWithDef.Default);
            TSLab.Script.IGraphList Главное_pane_Quick_chart = Главное_pane.AddList(((("Quick"
                            + (" (" + this.Quick_h.Period))
                            + ")")
                            + (" ["
                            + (IndexComp.Symbol + "]"))), Quick, TSLab.Script.ListStyles.LINE, -393216, TSLab.Script.LineStyles.SOLID, TSLab.Script.PaneSides.RIGHT);
            Главное_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, IndexComp.Decimals);
            // Make 'Slow' chart
            Slow = IndexComp.Decompress(Slow, TSLab.DataSource.DecompressMethodWithDef.Default);
            TSLab.Script.IGraphList Главное_pane_Slow_chart = Главное_pane.AddList(((("Slow"
                            + (" (" + this.Slow_h.Period))
                            + ")")
                            + (" ["
                            + (IndexComp.Symbol + "]"))), Slow, TSLab.Script.ListStyles.LINE, -15004712, TSLab.Script.LineStyles.SOLID, TSLab.Script.PaneSides.RIGHT);
            Главное_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, IndexComp.Decimals);
            // Make 'Futures' chart
            TSLab.Script.IGraphList Главное_pane_Futures_chart = Главное_pane.AddList(("Futures"
                            + (" ["
                            + (Futures.Symbol + "]"))), Futures, TSLab.Script.CandleStyles.BAR_CANDLE, true, -4980736, TSLab.Script.PaneSides.LEFT);
            Futures.ConnectSecurityList(Главное_pane_Futures_chart);
            Главное_pane.UpdatePrecision(TSLab.Script.PaneSides.LEFT, Futures.Decimals);
        }
    }
}


Quote:
Мне очень не нравятся манипуляции с "count" и "barsCount". Я бы от них отказался.

Что вы имеете в виду?

Наверх
#31624 - Wed Sep 28 2011 11:48 PM Re: Скрипт не торгует [Re: Ti_ru]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Originally Posted By: Ti_ru
...
Скрипт на пересечении двух скользящих средних со сжатием. Там тоже IsLastBarUsed == False Может здесь имеется в виду последний сжатый бар? Мы его не можем использовать, пока он не накопит нужное число свечек меньшего таймфрейма.

Не исключено. Генерируемые TSLab cs файлы давно не смотрел.
Вот как раз подобный пример я когда-то делал:
пример

Originally Posted By: Ti_ru
Quote:
Мне очень не нравятся манипуляции с "count" и "barsCount". Я бы от них отказался.

Что вы имеете в виду?

Просто удалить декремент и условие. smile
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#31625 - Thu Sep 29 2011 02:04 AM Re: Скрипт не торгует [Re: jhgjrht]
Ti_ru Offline
writer

Registered: Sun Oct 17 2010
Записи: 479
Ваш файл видел, не осилил логики до конца )
С ошибкой "Пересчет с разницей" разобрался. Оказалось, нужно просто в свойствах скрипта ограничить длину истории.

Наверх


Moderator:  ViL, sar