SmartQuant Discussion

Automated Quantitative Strategy Development, SmartQuant Product Discussion and Technical Support Forums
It is currently Mon Sep 23, 2019 2:36 pm

All times are UTC + 3 hours




Post new topic Reply to topic  [ 5 posts ] 
Author Message
PostPosted: Mon Nov 26, 2012 2:23 pm 
Offline

Joined: Sat Mar 19, 2011 7:38 pm
Posts: 27
Не могу понять, что происходит с Global в последнем OQ:
Code:
public class MyScenario : Scenario
{
   public override void Run()
   {
      Strategy.Global["test"] = 1;
      Console.WriteLine(   Strategy.Global.Count );
      Start();
   }
}

Code:
public override void OnStrategyStart()
{
            Console.WriteLine(   Strategy.Global.Count );
}


В сценарии Strategy.Global.Count возвращает 1, а в стратегии уже 0 - т.е. Global пустое.
Я что-то упустил ?


Top
 Profile  
 
PostPosted: Mon Nov 26, 2012 3:14 pm 
Offline

Joined: Thu Feb 04, 2010 3:32 pm
Posts: 45
Подтверждаю подобное поведение в версии 3.5.4
Возможное решение:
Code:
public class MyScenario : Scenario
{   
    public override void Run()
   {
        var dic = Singleton<Hashtable>.GetInstance();
        dic["key"] = "Привет";
        Console.WriteLine("В сценарии = " + dic.Count);
        Start();
   }
}

Code:
public class MyStrategy : Strategy
{
   public override void OnStrategyStart()
   {
        var dic = Singleton<Hashtable>.GetInstance();
        Console.WriteLine("В стратегии = " + dic.Count);
        Console.WriteLine(dic["key"]);
   }
}

Вот код на Singleton<T>:
Code:
/// <summary>
    /// Синглтон
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public sealed class Singleton<T> where T: new()
    {
        readonly static T obj;

        static Singleton()
        {
            obj = (T)Activator.CreateInstance(typeof(T));
        }
       
        /// <summary>
        /// Получить экземпляр класса
        /// </summary>
        /// <returns></returns>
        public static T GetInstance()
        {
            return obj;
        }
    }


Top
 Profile  
 
PostPosted: Mon Nov 26, 2012 4:40 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
Здравствуйте, Global чистится каждый раз перед стартом проекта (когда в сценарии вызывается метод Start).

Решение, предложенное Павлом, должно сработать в обход Global.

С уважением,
Сергей.


Top
 Profile  
 
PostPosted: Mon Nov 26, 2012 8:12 pm 
Offline

Joined: Sat Mar 19, 2011 7:38 pm
Posts: 27
Павел, спасибо за красивое решение, но оно у меня не заработало. Сам про singleton забыл и пробовал static class - никак не смог добиться, чтобы его было видно и в сценарии и в стратегии. Такое ощущение, что у них разный namespace.

Пока передаю что надо через сериализацию и параметры стратегии типа string.

Сергей - а глобальная чистка Global это что-то новенькое или было всегда ?
Даже пока искал на форуме решение своей проблемы натыкался на куски кода с вызовом Global в сценариях.
Вот - первое в поиске - http://www.smartquant.com/forums/viewtopic.php?f=65&t=10356&p=33873&hilit=global#p33873


Top
 Profile  
 
PostPosted: Mon Nov 26, 2012 9:16 pm 
Offline

Joined: Thu Feb 04, 2010 3:32 pm
Posts: 45
Quote:
Павел, спасибо за красивое решение, но оно у меня не заработало
Вам нужно код Синглтона скомпилировать в отдельную библиотеку и подключить ее к OpenQuant. Тогда все будет работать


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 5 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group