_0SampleStrategyTypeConverterEtoStr Ninjatrader

 avatar
unknown
csharp
2 years ago
10 kB
13
No Index
#region Using declarations
using NinjaTrader.Cbi;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui;
using NinjaTrader.NinjaScript.DrawingTools;
using NinjaTrader.NinjaScript.Indicators;
using NinjaTrader.NinjaScript;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows;
using System.Xml.Serialization;
using System;
#endregion


namespace NinjaTrader.NinjaScript.Strategies
{
    [TypeConverter("NinjaTrader.NinjaScript.Strategies.MyConverterEtoStr")]
    public class _0SampleStrategyTypeConverterEtoStr : Strategy
    {
        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description = "";
                Name = "_0SampleStrategyTypeConverterEtoStr";
                IsOverlay = true;
   
                ReadOnlyToggle1 	= false;
                ReadOnlyToggle2 	= false;
                ReadOnlyInt 		= 10;
                
                EnumValue 		= MyEnumEtoStr.MyCustom2;
				ReadOnlyString 	= EnumValue.ToString();
				
				Print("EnumValue: " + EnumValue);
				Print("ReadOnlyString: " + ReadOnlyString);
            }
        }

        protected override void OnBarUpdate()
        {
        }
		
        [RefreshProperties(RefreshProperties.All)] 
        [Display(Name = "Toggle read only 1", Order = 1, GroupName = "Use Case #2")]
        public bool ReadOnlyToggle1
        { get; set; }

        [Range(1, int.MaxValue)]
        [Display(Name = "Read only int", Order = 2, GroupName = "Use Case #2")]
        public int ReadOnlyInt
        { get; set; }
		
        [RefreshProperties(RefreshProperties.All)] 
        [Display(Name = "Toggle read only 2", Order = 3, GroupName = "Use Case #2")]
        public bool ReadOnlyToggle2
        { get; set; }

        [NinjaScriptProperty]
        [Display(Name = "Read only string", Order = 4, GroupName = "Use Case #2")]
        public string ReadOnlyString
        { get; set; }

        [TypeConverter(typeof(FriendlyEnumConverterEtoStr))] 
        [PropertyEditor("NinjaTrader.Gui.Tools.StringStandardValuesEditorKey")] 
        [Display(Name = "Friendly Enum", Order = 5, GroupName = "Use Case #4")]
        public MyEnumEtoStr EnumValue
        { get; set; }
    }
    
    public class MyConverterEtoStr : StrategyBaseConverter 
    {
        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object component, Attribute[] attrs)
        {
            _0SampleStrategyTypeConverterEtoStr strategy = component as _0SampleStrategyTypeConverterEtoStr;

            PropertyDescriptorCollection propertyDescriptorCollection = base.GetPropertiesSupported(context)
                                                                        ? base.GetProperties(context, component, attrs)
                                                                        : TypeDescriptor.GetProperties(component, attrs);

            if (strategy == null || propertyDescriptorCollection == null)
                return propertyDescriptorCollection;
			
            PropertyDescriptor readOnlyInt = propertyDescriptorCollection["ReadOnlyInt"];
            PropertyDescriptor readOnlyString = propertyDescriptorCollection["ReadOnlyString"];

            propertyDescriptorCollection.Remove(readOnlyInt);
            propertyDescriptorCollection.Remove(readOnlyString);

            readOnlyInt = new ReadOnlyDescriptorEtoStr(strategy, readOnlyInt);
            readOnlyString = new EnumConverterDescriptorEtoStr(strategy, readOnlyString);

            propertyDescriptorCollection.Add(readOnlyInt);
            propertyDescriptorCollection.Add(readOnlyString);

            PropertyDescriptor enumValue = propertyDescriptorCollection["EnumValue"];

            propertyDescriptorCollection.Remove(enumValue);

            readOnlyInt = new ReadOnlyDescriptorEtoStr(strategy, enumValue);

            propertyDescriptorCollection.Add(enumValue);

            return propertyDescriptorCollection;
        }

        public override bool GetPropertiesSupported(ITypeDescriptorContext context)
        { return true; }
    }
    
    public class ReadOnlyDescriptorEtoStr : PropertyDescriptor
    {
        private _0SampleStrategyTypeConverterEtoStr strategyInstance;

        private PropertyDescriptor property;

        public ReadOnlyDescriptorEtoStr(_0SampleStrategyTypeConverterEtoStr strategy, PropertyDescriptor propertyDescriptor) : 
                base(propertyDescriptor.Name, propertyDescriptor.Attributes.OfType<Attribute>().ToArray())
        {
            strategyInstance = strategy;
            property = propertyDescriptor;
        }

        public override object GetValue(object component)
        {
            _0SampleStrategyTypeConverterEtoStr targetInstance = component as _0SampleStrategyTypeConverterEtoStr;
            
			if (targetInstance == null)
                return null;
			
            switch (property.Name)
            {
                case "ReadOnlyInt":
                	return targetInstance.EnumValue;
            }
            return null;
        }

        public override void SetValue(object component, object value)
        {
            _0SampleStrategyTypeConverterEtoStr targetInstance = component as _0SampleStrategyTypeConverterEtoStr;
            
			if (targetInstance == null)
                return;

            switch (property.Name)
            {
                case "ReadOnlyInt":
                    targetInstance.ReadOnlyInt = (int) value;
                    break;
            }
        }

        public override bool IsReadOnly
        { get { return strategyInstance.ReadOnlyToggle1; } }

        public override bool CanResetValue(object component)
        { return true; }

        public override Type ComponentType
        { get { return typeof(_0SampleStrategyTypeConverterEtoStr); } }

        public override Type PropertyType
        { get { return typeof(int); } }

        public override void ResetValue(object component)
        { }

        public override bool ShouldSerializeValue(object component)
        { return true; }
    }  
    
	public class EnumConverterDescriptorEtoStr : PropertyDescriptor
	{
	    private _0SampleStrategyTypeConverterEtoStr strategyInstance; 
	    private PropertyDescriptor property;
 
	    public EnumConverterDescriptorEtoStr(_0SampleStrategyTypeConverterEtoStr strategy, PropertyDescriptor propertyDescriptor) 
	        : base(propertyDescriptor.Name, propertyDescriptor.Attributes.OfType<Attribute>().ToArray())
	    {
	        strategyInstance = strategy;
	        property = propertyDescriptor;
	    }

	    public override object GetValue(object component)
	    {
	        return strategyInstance.EnumValue;
	    }

	    public override void SetValue(object component, object value)
	    {
			NinjaTrader.Code.Output.Process("strategyInstance.ReadOnlyString: " + strategyInstance.ReadOnlyString, PrintTo.OutputTab1);
			NinjaTrader.Code.Output.Process("strategyInstance.EnumValue.ToString(): " + strategyInstance.EnumValue.ToString(), PrintTo.OutputTab1);
			NinjaTrader.Code.Output.Process("strategyInstance.EnumValue: " + strategyInstance.EnumValue, PrintTo.OutputTab1);
			NinjaTrader.Code.Output.Process("strategyInstance.ReadOnlyString1: " + strategyInstance.ReadOnlyString, PrintTo.OutputTab1);
			NinjaTrader.Code.Output.Process("value: " + value, PrintTo.OutputTab1);
			
			strategyInstance.ReadOnlyString = strategyInstance.EnumValue.ToString();
			
			if(value.ToString() != strategyInstance.EnumValue.ToString())
			{
				strategyInstance.ReadOnlyString = value.ToString();
			}
	    }  
		
		
	    public override bool IsReadOnly 
	    {  get  { return false; } }

	    public override bool CanResetValue(object component)
	    { return true; }

	    public override Type ComponentType
	    { get { return typeof(_0SampleStrategyTypeConverterEtoStr); } }

	    public override Type PropertyType
	    { get { return typeof(string); } }

	    public override void ResetValue(object component) { }

	    public override bool ShouldSerializeValue(object component)
	    { return true; }
	}

    public enum MyEnumEtoStr
    {
        MyCustom1,
        MyCustom2,
        MyCustom3
    }

    public class FriendlyEnumConverterEtoStr : TypeConverter
    {
	    public string stringVal { get; set; }

        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            List<string> values = new List<string>() { "My custom one", "My custom two", "My custom three" };

            return new StandardValuesCollection(values);
        }

        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            string stringVal = value.ToString();
			
            switch (stringVal)
            {
                case "My custom one":
                return MyEnumEtoStr.MyCustom1;
                case "My custom two":
                return MyEnumEtoStr.MyCustom2;
                case "My custom three":
                return MyEnumEtoStr.MyCustom3;
            }
            return MyEnumEtoStr.MyCustom1;
        }

		public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
		{
			MyEnumEtoStr enumValue = (MyEnumEtoStr)value;
			switch (enumValue)
			{
				case MyEnumEtoStr.MyCustom1:
					stringVal = "My custom one";
					break;
				case MyEnumEtoStr.MyCustom2:
					stringVal = "My custom two";
					break;
				case MyEnumEtoStr.MyCustom3:
					stringVal = "My custom three";
					break;
			}
			return stringVal;
		}

        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        { return true; }

        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        { return true; }

        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        { return true; }

        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        { return true; }
    }

}
Editor is loading...
Leave a Comment