Перспективы платформы cAlgo и отладки в VisualStudio
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 22

Тема: Перспективы платформы cAlgo и отладки в VisualStudio

  1. #1
    Уже не гость
    Регистрация
    29.01.2014
    Сообщений
    1
    Promo (¢)
    45
    Благодарности
    Получено: 5
    Отправлено: 0

    Перспективы платформы cAlgo и отладки в VisualStudio

    Привет всем пользователям использующим или планирующим использование cAlgo для роботостроения, уверен что когда вы разберетесь во всех преимуществах то забудете про любые другие платформы. Прошу также учесть что это мое личное мнение и я не являюсь работником Spotware Systems , а являюсь обычным пользователем как и вы, зовут меня Андрей. Я много лет работаю с MQL и вижу все плюсы использования C# в этой замечательной платформе и отладчика VisualStudio.

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

    Для начала небольшое вступление с вашего позволения. Когда я увидел эту платформу я сразу понял что она заткнет за пояс МТ, идеальное исполнение ордеров это не единственное ее преимущество. Язык программирования C# легок в освоении, а отладка кода в VisualStudio дает неоспоримое преимущество перед любыми другими платформами. Зачем я должен растрачивать свою жизнь на изучение нововведений MQL если я не могу его больше нигде использовать, также этот убогий редактор с примитивным отладчиком не позволяет полноценно работать. К нормальному быстро привыкаешь и после VisualStudio я вижу в каком каменном веке находится MQL.

    Встроенный в cAlgo редактор C# не позволяет вести полноценную отладку кода, разработчики действительно обещают полную интеграцию отладки в VisualStudio, но пока она не реализована, насколько мне известно.
    Но возможность отладки есть и в данный момент, причем абсолютно нормальной и полноценной использовать возможности VisualStudio можно полностью. Я использую отладчик VisualStudio в данный момент. Сейчас за неимением свободного времени, я не могу научить вас это делать в двух словах, поэтому давайте постепенно и вместе со мной разберемся в этом. Если мне кто то поможет я буду очень рад, потому что времени у меня на это совсем мало.

    Очень коротко расскажу как можно начать отладку.
    Создаете новую библиотеку dll в VisualStudio, нового советника в cAlgo. Для понимания процесса, отлаживать мы будем код в VisualStudio, а именно в нашей созданной dll мы будем писать весь алгоритм торговли. Советник работающий в cAlgo будет лишь оберткой к нашей библиотеке, большего от него и не требуется. Тогда в редакторе VisualStudio будет доступно все что необходимо.

    Я видел некоторые пользователи не могу найти сам терминал. Он тут, в моем случае: "C:\Users\Admin\AppData\Local\Apps\2.0\0MEQVG96.3G 1\YG1WRNEB.AC1\"
    У вас эти пути могу отличатся и я советую воспользоватся поиском по диску "C" и поискать файл cTrader.exe.
    Вообще нам понадобится этот файл а cAlgo.API.dll, можете искать и его, это библиотека API cAlgo.

    Добавляем ссылку в VisualStudio на cAlgo.API.dll . В редакторе cAlgo добавляем ссылку на наш dll который мы создали в VisualStudio, кстати в свойствах проекта лучше добавить директорию терминала для выкладки dll из VisualStudio. Так не будет проблем с правами доступа к файлу.



    Далее создаем необходимые функции в VisualStudio, а именно у меня это.

    init() для которая будет выполняться вместо OnStart()
    и Tick() вместо OnTick()

    init() я вызываю из OnStart() и передаю ссылку вот так init(this);

    вот содержимое шаблона

    Код:
    using System;
    using System.Linq;
    using cAlgo.API;
    using cAlgo.API.Indicators;
    using cAlgo.API.Internals;
    using cAlgo.Indicators;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace cAlgo2
    {
        static public class NewcBot 
        {
            public static Robot robot;
            static public void init(Robot rb) // старт советника.
            {
                robot = rb; // ссылка на основной класс в cAlgo
            }
            static public void Tick() // на каждом тике
            {
               
                int totalPositions = robot.Positions.Count; // количество ордеров
                var _ma = robot.Indicators.SimpleMovingAverage(robot.MarketSeries.Close, 20); // индикатор МА все работает !!!
            }
            static public void OnStop()
            {
                // остановка советника
            }
        }
    }
    а вот содержимое из cAlgo

    Код:
    //#reference: ..\..\..\..\AppData\Local\Apps\2.0\0MEQVG96.3G1\YG1WRNEB.AC1\tech..ader_2b1d787f64b7eb41_0001.0010_6454556efb2a70d1\cBot_DLL.dll
    
    
    using System;
    using System.Linq;
    using cAlgo.API;
    using cAlgo.API.Indicators;
    using cAlgo.API.Internals;
    using cAlgo.Indicators;
    using cAlgo2;
    
    namespace cAlgo.Robots
    {
        [Robot(TimeZone = TimeZones.UTC)]
        public class NewcBot : Robot
        {
            [Parameter(DefaultValue = 0.0)]
            public double Parameter { get; set; }
    
            protected override void OnStart()
            {
                NewcBot.init(this);
            }
    
            protected override void OnTick()
            {
                NewcBot.OnTick();
            }
    
            protected override void OnStop()
            {
                NewcBot.OnStop();
            }
        }
    }

    Присоединяетесь к процессу cAlgo.exe в отладчике и наслаждаетесь всеми возможностями VisualStudio для своего робота.
    Все работает! Благодарности принимаю обычным способом, вопросы тоже. Так что пишите, возможно что то упустил.

    Вы не можете благодарить!

  2. #2
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 246
    Отправлено: 48
    Вот были у меня такие мысли, но руки не дошли проверить )) Спасибо, инфа реально ценная

    Вы не можете благодарить!

  3. #3
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 246
    Отправлено: 48
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    Вот были у меня такие мысли, но руки не дошли проверить )) Спасибо, инфа реально ценная
    Один минус - нет в cAlgo оптимизации, только бэктестинг. А с учетом обновленного MQL4 стало наконец-то возможным делать нормальные программы. С другой стороны, в новом MQL4 совершенно жалкий набор библиотек, по сравнению со всем богатством .NET. Плюс в cAlgo можно использовать потоки и задачи. Эххх, нет в жизни совершенства ))
    Кстати, вопрос, в cAlgo можно создавать формы?

    Вы не можете благодарить!

  4. #4
    Новичок Аватар для papaklass
    Регистрация
    18.04.2013
    Сообщений
    50
    Promo (¢)
    810
    Благодарности
    Получено: 11
    Отправлено: 9
    Спасибо за информацию.
    Дополнил Ваш метод Tick(), для того чтобы робот что-то выводил:

    static public void tick()
    {
    int posTotal = robot.Positions.Count;
    var ma = robot.Indicators.SimpleMovingAverage(robot.MarketS eries.Close, 20);

    string stat = posTotal.ToString() + " " + ma.ToString();

    robot.Print("{0} {1} ", ma, posTotal); //надеялся, что будет вывод в лог. Не выводит.

    robot.ChartObjects.DrawText("SymbolCode", stat, StaticPosition.TopLeft, Colors.Turquoise); //надеялся, что будет выводить на экран. Не выводит.
    }
    В чем может быть проблема?

    Вы не можете благодарить!
    Последний раз редактировалось papaklass; 02.04.2014 в 10:19.

  5. #5
    Новичок Аватар для papaklass
    Регистрация
    18.04.2013
    Сообщений
    50
    Promo (¢)
    810
    Благодарности
    Получено: 11
    Отправлено: 9
    В новом релизе наконец то появилась возможность править код в Visual Studio. Но облом в том, что в версии Express такая возможность не работает. Почему?
    Половинчатое решение.

    Вы не можете благодарить!

  6. #6
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 246
    Отправлено: 48
    Цитата Сообщение от papaklass Посмотреть сообщение
    В новом релизе наконец то появилась возможность править код в Visual Studio. Но облом в том, что в версии Express такая возможность не работает. Почему?
    Половинчатое решение.
    В экспресс всегда были ограничения на подключение плагинов и т.д. А зачем Вам экспресс?

    Вы не можете благодарить!

  7. #7
    Новичок Аватар для papaklass
    Регистрация
    18.04.2013
    Сообщений
    50
    Promo (¢)
    810
    Благодарности
    Получено: 11
    Отправлено: 9
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    В экспресс всегда были ограничения на подключение плагинов и т.д. А зачем Вам экспресс?
    Я не профессиональный программист, поэтому мне полноценная версия ВС не нужна. Экспресс - бесплатная версия.

    Вы не можете благодарить!

  8. #8
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 246
    Отправлено: 48
    Цитата Сообщение от papaklass Посмотреть сообщение
    Я не профессиональный программист, поэтому мне полноценная версия ВС не нужна. Экспресс - бесплатная версия.
    Ну так поставьте Ultimate или Professional, там 90 дней пробный период. Ну а потом, сжав совесть в кулак, велком ту торрент ))))

    Вы не можете благодарить!

  9. #9
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 246
    Отправлено: 48
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    Ну так поставьте Ultimate или Professional, там 90 дней пробный период. Ну а потом, сжав совесть в кулак, велком ту торрент ))))
    Вчера заходил на сайт Microsoft и вспомнил одну вещь. Если вы студент или преподаватель ВУЗа, можете получить бесплатно на сайте _http://www.dreamspark.ru/ версию Professional.

    Вы не можете благодарить!

  10. #10
    Уже не гость
    Регистрация
    05.07.2014
    Сообщений
    1
    Promo (¢)
    60
    Благодарности
    Получено: 0
    Отправлено: 0

    Вопрос по коду в cAlgo

    Помогите разобраться.
    Нужно используя данные из серии dataSeries вычислить и записать результаты в серию resultMov3.
    Запись в dataSeries проходит нормально, проверяю Print("dataSeries 1 = ", dataSeries[1]);
    Результаты resultMov3 = NAN.
    Параметр period2 = 5 после расчётов.


    using System;
    using System.Linq;
    using cAlgo.API;
    using cAlgo.API.Indicators;
    using cAlgo.API.Internals;
    using cAlgo.Indicators;
    using System.Runtime.InteropServices;

    namespace cAlgo.Robots
    {
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SuperProfit2 : Robot
    {
    [Parameter("Vol", DefaultValue = 10000)]
    public int Vol { get; set; }

    [Parameter(DefaultValue = 35)]
    public int DllPeriod { get; set; }

    [Parameter(DefaultValue = 1.7)]
    public double Period { get; set; }

    [Parameter(DefaultValue = MovingAverageType.Weighted)]
    public MovingAverageType MaType { get; set; }

    [Parameter()]
    public DataSeries Price { get; set; }

    private MovingAverage movingAverage1;
    private MovingAverage movingAverage2;
    private MovingAverage movingAverage3;
    public int index = 0;
    public IndicatorDataSeries dataSeries;
    public IndicatorDataSeries resultMov3;
    private const string label = "Super Profit cBot";
    public int period2;


    protected override void OnStart()
    {
    dataSeries = CreateDataSeries();
    resultMov3 = CreateDataSeries();
    var period1 = (int)Math.Floor(DllPeriod / Period);
    var period2 = (int)Math.Floor(Math.Sqrt(DllPeriod));

    movingAverage1 = Indicators.MovingAverage(Price, period1, MaType);
    movingAverage2 = Indicators.MovingAverage(Price, DllPeriod, MaType);
    movingAverage3 = Indicators.MovingAverage(dataSeries, period2, MaType);

    }

    protected override void OnTick()
    {
    var longPosition = Positions.Find(label, Symbol, TradeType.Buy);
    var shortPosition = Positions.Find(label, Symbol, TradeType.Sell);

    dataSeries[index] = 2.0 * movingAverage1.Result.Last(index) - movingAverage2.Result.Last(index);

    Print("Index ", index);
    Print("dataSeries ", dataSeries[index]);
    if (index > 10)
    {
    resultMov3[index] = movingAverage3.Result[index];
    Print("dataSeries 1 = ", dataSeries[1]);
    Print("dataSeries 2 = ", dataSeries[2]);
    Print("dataSeries 3 = ", dataSeries[3]);
    Print("dataSeries 4 = ", dataSeries[4]);
    Print("resultMov3 = ", resultMov3[index]);

    }

    index = index + 1;


    }
    }
    }

    Вы не можете благодарить!

Страница 1 из 3 1 2 3 ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •