Финансовая лаборатория

Биржевая торговля и торговые роботы

Здесь будут накапливаться вопросы, которые возникают у тех, кто осваивает построение торговых стратегий с помощью C# и языка WealthScript программы Wealth-Lab. По сути, это будет база данных по ответам, которые находятся в инструкциях Велс Лаб. Если У Вас есть вопрос, на который Вы не нашли ответа здесь - пишите его в комментариях - постараюсь помочь найти на него ответ.

ЧаВо: Ответы на вопросы по программированию в Wealth-Lab

1. Где найти русскую инструкцию по программированию торговых стратегий в программе Wealth-Lab, с подробным описанием языка C#, библиотеки WealthScript и примерами?

2. Какой язык программирования нужно выучить для того, чтобы уметь строить и тестировать торговые стратегии в программе Wealth-Lab?

3. Как выполнить в программе Wealth-Lab код примеров, который приводится в Инструкции по программированию и статьях с описанием языка C# и библиотеки WealthScript?

4. Как с помощью кода посчитать количество баров на графике Wealth-Lab?

5. Как найти номер первого внутридневного бара, который был несколько дней назад?

6. Как найти номер бара, который соответствует конкретной дате на графике Велс Лаб?

7. Как в коде торговой стратегии программы Wealth Lab получить доступ к значениям цен (OHLC) и объема (V)?

8. Как в коде торговой стратегии программы Wealth-Lab отобразить на графике ряды цен (OHLC) и объемов (V)?

9. Как с помощью кода скорректировать первоначальные значения цен и объемов (OHLC/V) в программе Велс Лаб?

10. Как программно узнать текущий таймфрейм или интервал графика?

11. Как получить доступ к дате и времени соответствующего бара на графике в программе Wealth-Lab?

12. Как получить доступ к краткому названию текущего финансового инструмента (тикера) или к полному названию компании при программировании торговых стратегий в Велс Лаб?

13. Как получить доступ к величине минимального шага цены, если торгуемый инструмент является фьючерсом?

14. Как получить доступ к барам второго (внешнего) финансового инструмента в рамках одной торговой стратегии программы Wealth-Lab?

15. Как оперировать (Умножать, Делить, Добавлять или Вычетать) несколькими DataSeries при построении торговых стратегий в Wealth-Lab?

16. Как создать ряд данных, содержащий типичную цену ("Typical Price") с помощью кода при создании торговых стратегий в Велс Лаб?

17. Как сдвинуть значения DataSeries вправо или влево по шкале времени?

18. Как получить массив DataSeries только с положительными значениями?

19. Как получить доступ к информации конкретного бара графика Велс Лаб при построении и тестировании торговой стратегии?

20. Как создать последовательность данных DataSeries и наполнить каждую ее ячейку нулевыми значениями?

21. Как поменять значения в массивах DataSeries?

22. Как получить доступ к DataSeries второго финансового инструмента в рамках одной торговой стратегии, проектируемой в Wealth-Lab?

23. Как организована по умолчанию синхронизация нескольких финансовых инструментов по времени в Велс Лаб?

24. Как поменять способ синхронизации данных в Wealth-Lab?

25. Как создать индикатор используя несинхронизированные данные второго финансового инструмента?

26. Какие области графика выделяются в программе Wealth-Lab для отображения разных данных?

27. Как создать индивидуальную область на графике?

28. Как: скрыть область объема на графике в программе Wealth-Lab?

29. Как в Wealth-Lab отобразить на графике внешний финансовый инструмент?

30. Как отобразить на графике в программе Велс Лаб синтетический финансовый инструмент?

31. Как сравнить основной финансовый инструмент с бенчмарком и отобразить их на одном графике?

32. Как отобразить на графике программы Велс Лаб последовательность данных (DataSeries)?

33. Как отобразить на графике в программе Wealth-Lab область объемов выше чем область цен?

34. Как отобразить на индивидуальной области графика количественные показатели торговой стратегии?

35. Как контролировать вертикальную Y-шкалу на графиках в программе Wealth-Lab?

36. Как написать вертикальный текст на гарфике в программе Wealth-Lab?

37. Как сделать более удобным описание рядов данных (индикаторов, осцилляторов и т.п.) для отображении описания ряда данных на графике?

38. Как в программе Велс Лаб нарисовать линию тренда и продлить ее вправо по шкале времени?

39. Как начертить на графике в программе Велс Лаб скоростные линии сопротивления (1/3 - 2/3 линии)?

40. Как в Wealth-Lab выделить зону на графике в виде многоугольника?

41. Где можно посмотреть полный синтаксис применяемого индикатора?

42. Как получить доступ к полному ряду данных (DataSeries) индикатора?

43. Как рассчитать значение индикатора только для одного бара?

44. Как рассчитать значение индикатора несколькими способами?

45. Как создать "полуофициальный (semi-formal)" индикатор своими руками?

46. Как создать индикатор MACD с самостоятельно определяемым периодом?

47. Как создать индикатор, отражающий взвешенную цену закрытия

48. Как создать индикатор СПРЕДа, отражающий разницу между двумя финансовыми инструментами?

49. Как создать осциллятор силы Элдера (EFO)?

50. Как самостоятельно создать NRTR_WATR индикатор Константина Копыркина?

51. Как создать индикаторы используя внешние финансовые инструменты?

52. Почему значения некоторых индикаторов нестабильны и зависят от периода доступных данных?

53. Почему опасно использовать нестабильные значения индикаторов?

54. С какими индикаторами нужно быть осторожным?

55. Что представляет собой класс стратегий в программе Велс Лаб?

56. Как выполнить компиляцию кода стратегий в программе Wealth-Lab?

57. Какие ограничения существуют для кода стратегий в программе Wealth-Lab?

58. Какие торговые сигналы поддерживаются в программе Wealth-Lab?

59. Какие параметры имеют торговые сигналы в Wealth-Lab?

60. Как совершить теоретический трейд в программе Велс Лаб?

61. Как произвести сделку в определенную заранее дату применяя метод DateTimeToBar()?

62. Как организовать главный цикл при построении торговых стратегий в Wealth-Lab?

63. Как переделать код торговой стратегии в код скрининговой системы?

64. Где найти шаблон программного кода для однопозиционной стратегии Wealth-Lab?

65. Что представляют из себя позиции (Positions) в программе Wealth-Lab?

66. Как проверить с помощью кода - существует ли активная позиция в текущий момент времени в Wealth-Lab?

67. Как в Wealth-Lab осуществляется закрытие позиции?

68. Как разместить лимитный или стоп приказ на покупку при программировании стратегий в Wealth-Lab?

69. Как создать отложенные (GTC) ордера (приказы, действующие до отмены) при моделировании торговли в Велс Лаб?

70. Как отображать на графике программы Велс Лаб стоп-приказы с помощью программного кода?

Комментариев: 26

  1. Andrew пишет:

    Добрый день!
    Подскажите пожалуйста, к кому можно обратиться за помощью по программе FinLab.Trade. Писал на разные ящики, никто не отвечает
    У меня при открытие файла лицензионного ключа, программа пишет:
    “К сожалению, ни одной лицензии добавлено не было. Возможна, лицензии истекли или повреждены. Подробности: Ошибок не обнаружено!”
    Помогите пожалуйста!

  2. Alexander Panarin пишет:

    Добрый вечер, Дмитрий. Возможно сделать расчеты индикаторов и нарисовать их с разным Time-Frame, т.е. как в ТСлабе есть минутка а расчет индикаторов на базе часовика. Там это делается путем сжатия и разжатия времени, а как в Велс Лабе?

    • Да, это все можно сделать без проблем в WealthLab. Об этом чуть позже целый пост будет.
      Пока скажу, что для этих целей используются следующие методы: SetScaleCompressed(), SetScaleDaily(); SetScaleWeekly(); SetScaleMonthly();

    • Gerig пишет:

      Добрый день, Александр! В TSlab это можно сделать применив кубик сжатие, но картинка получится ломаная, не наглядная, у TSlab нет того функционала, который есть в Wealthl-lab.

  3. Alexander Panarin пишет:

    Очень интересные выши посты. Подождем.

  4. Kartman пишет:

    Дмитрий, как создать два ряда данных из белых и чёрных отдельно?

    • Нужно два раза выполнить метод PlotSeries();
      При этом в первом методе выбрать свойство Color.Black, а во втором случае – соответственно Color.White (правда, на белом фоне будет не видно, так что лучше какой-либо другой фон выбрать, либо цвет, передающий ряд данных).

      PlotSeries(myPane, Close, Color.Black, WealthLab.LineStyle.Line, 2);
      PlotSeries(myPane, Close, Color.White, WealthLab.LineStyle.Line, 2);

  5. Kartman пишет:

    Спасибо. Я не про то. DataSeries для свечей вверх и свечей вниз. Вот например, для RSI (нууу за 14 дней) среднее вверх надо разделить на среднее вниз. Для начала надо узнать их сумму. как всё это сделать?) Я понимаю, что RSI там вшитый есть – мне нужно кодом.

  6. Alexander Panarin пишет:

    Добрый день, Дмитрий. Подскажите, пожалуйста, встречали Вы проработки кода по определению сильных уровней с помощью объемно-вертикального анализа (т.е. то, чем занимается Volfix на основе теории Стеделмайера)?

  7. Alexander Panarin пишет:

    Дмитрий, жаль конечно, но это очень интересная тема особенно, если объемно-вертикальный анализ совместить с элементами технического анализа, то можно продвинуться намного дальше, чем просто с техническим анализом. Я пытаюсь в этом разобраться, если у Вас будут какие-то мысли на эту тему, то было бы интересно продолжить такой опыт.

    • Если сформулируете почетче условие на вход в позицию – я готов помочь это закодировать и предоставить Вам этот код.
      Было бы интересно попробовать.

  8. Alexander Panarin пишет:

    Добрый вечер, Дмитрий. Можете прислать свою почту? Я сброшу картинку из Волфикса со своими комментариями. Если Вам будет интересно, то можно будет продолжить эту тему.

  9. Олег пишет:

    Дмитрий, подскажите пожулуйста:
    1. как найти High/Low внутри дня (например с 10:15 до 12:00) по мотивам Вашего примера «Торговая система HighLowLong?
    2. Как для WL подключить //using System.Linq, в VS ошибок нет, а в WL пишет ошибку “Имя типа
    или пространства имен Linq отсутствует в пространстве имен System (пропущена ссылка на борку?)”
    Спасибо.

    • Олег, приветствую.
      1) Если Вы просто хотите входить сделки с 10:15 до 12:00 часов – Вы можете установить дополнительное условие (фильтр) в блоке генерации сигналов. Например вот так:

       //.....
      
       for (int bar = 1; bar < Bars.Count - 1; bar++)
              {
      // ...
       int hourBar = Date[bar].Hour;
       int minuteBar = Date[bar].Minute;
       int timecount = hourBar * 100 + minuteBar
      
      //УСЛОВИЕ ПО ВЕРМЕНИ
      if (timecount >1015 && timecount < 1200)
          BuyAtMarket(bar + 1, "Buy");
      //...
              }
      

      2. Эту строчку можете вообще удалить, либо закомментировать, поставив вначале две косые черты. Она здесь не играет вообще никакой роли.

      Может быть кто-нибудь предложит другие варианты…

  10. Олег пишет:

    Дмитрий, спасибо за ответ, но это не совсем то, что я ищу. Идея в следующеем: находим макс и мин значение образованное ценой в период с 10:15 до 12:00 и входим в сделку на преодоление этого макс или мин уже после 12:00.

    • Олег, в принципе, это тоже вполне решаемая задача. В общем виде схема будет выглядеть так:
      Вы заводите две переменных, одна из которых будет содержать значение максимум цен, другая минимум цен ( double maxPrice; double minPrice)

      После чего внутри основного торгового цикла проверяете – если время соответствует устанавливаемому Вами интервалу – то проверяете – если максимальная цена текущего бара больше чем значение переменной, то переменная maxPrice получает новое значение. Тоже самое для переменной, которая хранит наименьшее значение.

      После этого в блоке генерации сигнала формулируете правила входа в позицию с учетом времени и рассчитанных минимальных и максимальных цен за нужный Вам период.

      Код писать сейчас не буду, думаю, идея ясна. Если не будет получаться – пишите – помогу.

      • Сергей пишет:

        Дмитрий, частенько на Вашем портале получаю полезную информацию по программирования для WLD, за что Вам спасибо! Интересует реализация идеи Олега. Пробую выполнить алгоритм по предложенному Вами варианту, но не выходит к сожалению. С помощью цикла for на 5 минутном графике определяю минимум цены и максимум за определенное кол-во баров (12 для часового – получается за час), но потом, эти значения уже не получается использовать для торговли, т.е. они действительны только внутри цикла for. Подскажите, пожалуйста, как реализовать правильно?

  11. Дмитрий пишет:

    Здравствуйте.

    Пилю стратегию, использующую указатели, компилятор пишет, компилировать нужно с параметром “/unsafe”, но в мануалах по Wealth Lab нет даже намёка на возможность задавать параметры компиляции.
    Не подскажете, возможно ли это в действительности и как?

    Спасибо.

    • Дмитрий, я попросил у знакомого специалиста ответить на этот вопрос. Вот что он сказал:

      ” Лучше не надо использовать указатели в стратегии :-)

      Такая опция компилятора есть в студии. Она позволяет компилировать небезопасный код.

      Лично я предпочитаю для перехода между safe-unsafe использовать managed с++ проекты. В них можно переход между managed и unmanaged кодом делать, а из c# использовать только managed часть этих библиотек”

      Если не совсем понятно – пишите – уточним.

  12. SAV пишет:

    Дмитрий, думаю здесь проблема не в том, что в мануалах нет об этом речи, а суть заключается в том, что .net приложения, использующие unmanaged код должны компилироваться с учетом ключевого слова unsafe. Т.е когда Вы используете метод, тип, еще что-нибудь, то ставьте перед ним unsafe.
    Попробуйте откомпилировать в Visual Studio:
    Установка параметра компилятора в среде разработки Visual Studio
    Откройте страницу Свойства проекта.
    Выберите страницу свойств Построение.
    Установите флажок Разрешить небезопасный код.
    http://msdn.microsoft.com/ru-ru/library/ct597kb0.aspx

  13. wlrt пишет:

    Дмитрий, по поводу Вашей стратегии с указателями, возможно это какая-то ошибка, либо вы пытаетесь использовать сторонние компоненты? можете написать подробнее указатели на что вы используете в стратегии. В c# вообще, не только в Wealth-Lab, в этом практически нет необходимости.

    PS Параметры можно указать в MS Visual Studio, если вынести туда свой код

  14. Дмитрий пишет:

    Да, пожалуй, обойдусь без указателей, т.к. мне просто нужна функция, возвращающая несколько значений, и я только что вычитал в интернете про ref. :)

Оставить комментарий